Ho esaminato numerose soluzioni per la semplice versione di questo problema, ma non ho trovato soluzioni per i casi avanzati, a meno di ordinare tutte le possibili permutazioni.
Non so da dove cominciare questa domanda, ma farò del mio meglio.
Nel mio caso, questo sarà in riferimento a un negozio di macchine.
Per eseguire una parte attraverso una serie di procedure usando una macchina cnc, la macchina deve prima passare attraverso un processo di installazione. Questa volta varia a seconda del tipo di pezzo che è stato eseguito per ultimo.
Diciamo che il widget A richiede che gli strumenti 1 e 2 siano messi sulla macchina. Non c'erano strumenti precedenti sulla macchina e ogni strumento richiede un minuto per essere installato correttamente. Ciò significa che il widget A richiede un tempo di installazione di 2 minuti. Ora, diciamo che il widget B richiede gli strumenti 3 e 2. In questo caso, poiché lo strumento 2 può essere riutilizzato, richiede solo 2 modifiche allo strumento (rimozione dello strumento 1 e installazione dello strumento 3).
Successivamente, hai il tempo di elaborazione che la parte richiede effettivamente per essere costruita sulla rispettiva macchina. Nella maggior parte dei negozi di macchine, questo varia a seconda del computer su cui viene eseguito.
Quindi hai vincoli come la data in cui una parte è richiesta e pesa su determinati lavori (se un lavoro è contrassegnato come "urgente", i suoi requisiti sono ponderati più alti di ordini simili).
Fortunatamente, nel mio caso, ho la maggior parte di questi dati. Il mio sistema ha raccolto il tempo impiegato da una macchina per costruire una parte specifica e il tempo di installazione richiesto tra le diverse parti. La ragione per cui sto cercando un modo programmatico per ottimizzare questo programma è perché ci sono migliaia di parti differenti e richiede un lavoratore a tempo pieno con un'estrema conoscenza del negozio per programmare giorni fuori. Anche in questo caso, calcolare il lead time è un incubo e alla fine è solo una stima del campo di baseball.
Sono curioso di sapere se qualcuno qui ha affrontato problemi simili e potrebbe indicarmi qualche materiale di ricerca che potrei trovare interessante.
So che questo è messo insieme, quindi sarei lieto di rispondere a qualsiasi domanda per ulteriori informazioni.