2013-04-11 10 views
11

Ho il seguente problema. Un utente ha un carrello con gli articoli N. C'è una quantità Q di ciascun articolo. Inoltre, ci sono i magazzini P e ognuno di essi ha un determinato livello di scorte per ogni prodotto (che può essere 0). Sono inoltre note le distanze tra ciascun magazzino e cliente. Ho bisogno di trovare un insieme di magazzini che possono ospitare gli ordini e soddisfa i seguenti vincoli (in ordine di priorità decrescente):Adempimento ordine ottimale

  1. dovrebbe contenere un numero minimo di magazzini
  2. Tutti i magazzini devono essere quanto cliente come possibile

Tutte le idee sono molto apprezzate. Grazie!

UPD:

Se un magazzino non può pienamente espletare qualche voce, allora può essere consegnato da diversi magazzini diversi. Per esempio. abbiamo bisogno di 10 mele e abbiamo 2 magazzini che hanno livelli di magazzino di 7 e 3. Quindi le mele saranno fornite da questi due magazzini (per fornire 10 in totale).

UPD 2 Il numero di magazzini disponibili è quasi di 15. Quindi la forza bruta non aiuterà qui.

+1

È necessario specificare un po 'di più: cosa succede se un cliente ordina una quantità 'Q' superiore al livello di scorte' S' di un magazzino? Un altro magazzino deve consegnare tutti gli articoli 'Q', oppure possono condividere l'ordine (ad esempio, il primo magazzino invia gli articoli' S', l'altro 'QS'? – blubb

risposta

3

Consiglierei di andare con la soluzione di David Eisenstat. Se desideri saperne di più sull'argomento o hai bisogno di implementare un algoritmo per risolvere autonomamente i programmi interi, ti consiglio la seguente referenza:

Chapter 9 da una conferenza del MIT sulla programmazione matematica applicata fornisce una bella introduzione alla programmazione di numeri interi . Nella terza pagina, si trova il problema di posizione di magazzino come un problema risolvibile con la programmazione di numeri interi.Nota che il problema descritto è leggermente più generale del problema che hai descritto nella tua domanda: Per il tuo caso, si può presumere che i magazzini siano sempre aperti (y i = 1) e il costo operativo fisso f i di un magazzino è sempre f i = 0 nel tuo caso.

Il resto di questo capitolo entra nei dettagli della programmazione di interi e mette in evidenza vari approcci per risolvere i programmi interi.

+0

Grazie per il riferimento –

+0

@volodymyr: Felice di poterti aiutare! Grazie anche :) – blubb

+0

@blubb: Esiste una soluzione implementata per questo problema, che conosci fin da ora? –

10

Questo è risolvibile mediante la programmazione di numeri interi.

Lasciare che gli articoli siano indicizzati da i ei magazzini siano indicizzati da j. Lasciare Qi la quantità dell'articolo i nel carrello e Sij essere la quantità dell'articolo i presso il magazzino j e Dj essere la distanza dal cliente al magazzino j.

Prima trova il numero minimo di magazzino k. Lascia che la variabile binaria xj sia 1 se e solo se il magazzino j è coinvolto nell'ordine. k è il valore di questo programma.

minimize sum over j of xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
for all j, xj in {0, 1} 

Secondo trovare i magazzini più vicini. Assumerò che vogliamo minimizzare la somma delle distanze.

minimize sum over j of Dj * xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
(sum over j of xj) <= k 
for all j, xj in {0, 1} 

Ci sono molte librerie diverse per risolvere programmi interi, alcuni liberi/open source. Solitamente accettano programmi in un formato simile ma più limitato di quello che ho presentato qui. Dovrai scrivere da te un codice per espandere le somme e quantificatori universali ("per tutti").

+0

Grazie. Forse potresti consigliare qualche articolo/tutorial/libro –

+0

Ho imparato questo materiale da una classe che non usava un libro di testo, mi dispiace –

+0

@DavidEisenstat da quale corso proviene questo materiale? –

0

Potrebbe piacerti o meno, ma ho esperienza di elaborazione di magazzino e di evasione degli ordini. La mia personale esperienza di vita reale non richiedeva un algo, ma una serie di strumenti per il magazzino e il servizio clienti (speriamo che questo sia uno spunto di riflessione per voi e altri che lottano nel mondo dello sviluppo delle operazioni di magazzino):

Se si dispone di 10 articoli sull'ordine.

avete 9 in magazzino

Hai 5 in una posizione e 4 nell'altra.

Hai diviso l'ordine. Il 1 prodotto che non può essere soddisfatto diventa un 'ordine arretrato'. Può essere annullato perché non sai quando tu o se il tuo fornitore sta per consegnare. Assicurati di aggrapparti ai riferimenti di autorizzazione della carta di credito.

I 9 articoli rimanenti (articoli ad alte prestazioni) in magazzino saranno interrogati sul vostro inventario virtuale di magazzino per le combinazioni migliori.

Nel nostro caso facciamo tre cose:

Può il personale adempimento ad un trasferimento X magazzino nella voce da un altro magazzino facilmente? Sì/No

Se sì quali prodotti possono trasferire.

Ciò potrebbe richiedere l'interazione umana in base al carico e alle capacità del magazzino.

Se si sta procedendo rigorosamente all'automazione e all'inventario virtuale che oscilla giorno dopo giorno, allora si ha la migliore ipotesi sulle scorte di magazzino.

Successivamente, dividere l'ordine a due, con riferimenti all'ordine principale per tracce di carta.

Si stampa quindi verso le proprie destinazioni e si spera che possano adempiere, se non è possibile, quindi si spera che possano parzialmente eseguire l'ordine e generare un ordine di ritorno che può essere annullato su richiesta del cliente.

Quindi, in pratica, ecco quello che devi codificare.

Ordine Primo sguardo indietro suddivisione ordine e riferimento all'ordine principale. Funzione di tastatore magazzino inventario. Ordine suddiviso ponderato basato su inventario virtuale con riferimento all'ordine principale in base alle capacità del magazzino per recuperare i prodotti da altri magazzini. Pagina di selezione stampa (funzione magazzino) Funzioni manuali di ordine arretrato o parziale (strumenti di assistenza clienti) Raccogliere il denaro solo sulle cose che si sono verificate quando contrassegnate come spedite.

Considerazioni: Assicurarsi che l'ordine principale faccia riferimento all'ordine di restituzione delle azioni e divida. Assicurarsi che le divisioni e gli ordini di evasione parziale facciano riferimento a qualsiasi ulteriore ordine arretrato e suddivisioni. Compilare ciò che è possibile Contrassegnare spedito. Raccogliere $$$ sui prodotti spediti.

Spero che questo aiuti e buona fortuna !!!