Stabilire quali consegne di pacchi spediamo noi stessi e quali esternalizziamo

4

In primo luogo, spero di chiederlo nel posto giusto. Lavoro per un grande rivenditore online nel Regno Unito. Spediamo quasi 2000 ordini al giorno e stiamo crescendo molto rapidamente.

Attualmente utilizziamo più ditte di consegna per gestire tutte le nostre consegne. Stiamo pianificando di lanciare la nostra flotta di furgoni per consegne presto per le consegne locali al nostro centro di distribuzione.

Quando lanceremo la nostra flotta di consegna, uno dei primi compiti per i sistemi informatici dietro di esso sarà decidere quali pacchi devono essere consegnati da noi e quali pacchi dobbiamo esternalizzare la consegna ad uno dei nostri partner di consegna. Una volta che è stato risolto, possiamo preoccuparci di quali pacchi andare su quali furgoni e in quale ordine saranno consegnati (il Vehicle Routing Problem (VRP)).

Cerco qualche consiglio qui sulla prima parte di questo (quali pacchi consegniamo noi stessi e quali esternalizziamo). Al momento non sto cercando aiuto con il VRP (intendiamo costruire un sistema su OSRM e Optaplanner e siamo a nostro agio su come funzionerà), anche se sapete di una buona soluzione per risolvere entrambi i problemi in uno vai, sarebbe fantastico.

Ho preso in considerazione alcune cose abbastanza ovvie per determinare gli ordini che consegniamo noi stessi:

  1. Tutte le consegne entro x miglia raggio del nostro centro di distribuzione.
  2. Tutte le consegne entro x minuti di guida del nostro centro di distribuzione.
  3. Tutte le consegne entro x minuti di guida del nostro centro di distribuzione e quindi tutte le consegne entro y minuti di guida di qualsiasi consegna. Ricorsivamente. Con una distanza massima dal nostro centro di distribuzione (quindi non abbiamo una linea di consegne in tutto il paese e finiscono a 500 miglia di distanza!)
  4. Come con il numero 3 ma calcolando x e y in base al costo di noi che utilizzano una terza parte per effettuare la consegna per nostro conto (ad esempio, saremmo lieti di inviare uno dei nostri furgoni ulteriormente per un peso maggiore / pacco più grande).

Ho intenzione di pensarci un po ', ma ci deve essere un modo migliore rispetto a qualsiasi di queste opzioni sopra. Qualcuno ha un'esperienza con questo dato che sono totalmente nuovo ad esso? C'è un nome per questo problema? Molto come i nomi di Traveller Salesman Problem (TSP) e Vehicle Routing Problem (VRP) che potrebbero aiutare il mio googling? Sono sicuro che ci sarà un modo per usare Optaplanner per trovare una buona soluzione, ma non sono sicuro di come. Idealmente dovremmo considerare nel processo decisionale il costo di consegna dell'ordine con il nostro partner di consegna più economico.

Puoi presumere che sappiamo quanto segue per tutti i pacchi:

  1. Lat / long per ogni punto di consegna.
  2. Il tempo di guida effettivo e la distanza tra due punti di consegna (e / o il nostro centro di distribuzione).
  3. Il costo dell'utilizzo di una terza parte per ogni consegna.

Usiamo sistemi basati su linux e amiamo i progetti open source (e abbiamo apportato correzioni / miglioramenti a molti). Siamo pronti a utilizzare le applicazioni open source o closed per semplificarci la vita e persino le cose che funzionano solo su Windows se davvero ne abbiamo bisogno. Saremmo anche felici di codificare tutta la cosa internamente. Se sai se dei buoni pacchetti da guardare, per favore dì.

Grazie per il tuo aiuto.

    
posta Luke Cousins 07.07.2015 - 21:16
fonte

3 risposte

3

Ciò di cui hai bisogno è qualcosa che Programmazione lineare . Le varie variabili che usereste sono chiamate "Decision Variable" nel contesto di questi metodi. La programmazione lineare è una tecnica molto matura e ci sono molti pacchetti e piattaforme disponibili. Ci sono anche legioni di risorse per apprendere le tecniche che stanno dietro a questo, se vuoi scalare qualcosa.

Ci sono vari altri metodi di ottimizzazione che puoi usare anche se i metodi lineari risultano insufficienti. Ad esempio, Stochastic Optimization copre casi in cui alcune o tutte le variabili sono casuali.

    
risposta data 07.07.2015 - 21:35
fonte
3

Questa sembra una decisione presa dagli uomini d'affari, non dagli sviluppatori. Eseguono calcoli e determinano le regole in base alle quali l'applicazione deciderà quale pacco verrà spedito da te e quale pacco verrà spedito da terzi.

Se dovessi implementarlo, ecco come farei al riguardo:

  1. Ottieni preventivi per ogni società di consegna che puoi utilizzare.
  2. Fattore nelle tue stime per la tua flotta. (Può essere $ / miglio o $ / ora).
  3. Decidi quale guadagna più profitto.

Probabilmente questo dovrebbe essere fatto offline, in una sorta di coda di elaborazione in modo che l'utente non aspetti la decisione.

    
risposta data 08.07.2015 - 01:18
fonte
0

Problema interessante ....

In primo luogo, un furgone / autista ha un costo fisso per il turno, quindi vorrai mettere abbastanza articoli nel furgone per utilizzare tutta la capacità che hai.

Quindi, se un driver accede spesso alla stessa proprietà, sarà in grado di trovarlo più rapidamente.

Devi prendere in considerazione ciò che fai se il tuo cliente non è presente, ad esempio trovo facile ritirare un articolo dall'ufficio di smistamento dell'ufficio postale. Puoi creare una cronologia basata su customerId, customerType, typeOfItem, per prevedere se qualcuno sarà presente.

Chiaramente se un furgone supererà un indirizzo, dovresti tenerne conto, quindi non sono convinto che puoi separare il "problema di routing del veicolo" dalla scelta dei pacchi da gestire. (Allo stesso modo se un singolo pacco rende difficile il routing del veicolo, non dovresti gestirlo da solo)

Poiché il costo incrementale della consegna di un pacco da te dipende dagli altri pacchi che decidi di gestire, la "programmazione lineare" è improbabile che possa farcela.

Supponendo di avere nVans, stai cercando di suddividere i tuoi pacchi in nVans + 1 set, ad esempio.

  • Il set di pacchi per ogni furgone può essere consegnato da quel furgone in un giorno. (Limitazione dura)
  • Il set di pacchi che vengono esternalizzati in un dato giorno ha il costo di consegna più basso possibile. (ottimizza per)
  • Che non ci sono pacchi sul furgone, che hanno un costo di margine (costo di esercizio del furgone) che è più di quello che ti costerebbe esternalizzarli.
  • I pacchi possono essere raggruppati in base al codice postale per ridurre le dimensioni del problema.
  • Alcuni pacchi possono avere flessibilità nel giorno in cui vengono consegnati.

Se avessi un numero illimitato di CPU, potresti eseguire quanto sopra in Optaplanner, usando un'istanza secondaria di Optaplanner per eseguire il routing del veicolo per verificare il duro vincolo di ciò che un furgone può fare in un giorno. Ma facendo un problema NP completo, il loop interno del problema NP di anther completo non funzionerà !!!

Se hai qualche mazzo di pacchi quando il risparmio di usare i tuoi furgoni è molto maggiore di altri pacchi, puoi dividerli tra i tuoi furgoni, aggiungere quanti più pacchi possibile, uno alla volta, base sulla "vicinanza alla rotta attuale", trovando la rotta migliore dopo aver aggiunto ciascun pacco.

    
risposta data 15.04.2016 - 15:33
fonte

Leggi altre domande sui tag