Advanced Algoritmo di pianificazione del Job Shop Scheduling

6

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.

    
posta dvdnnn 10.08.2016 - 23:46
fonte

2 risposte

1

Credo che il corpo di conoscenza che stai cercando sia "Programmazione matematica".

In generale, vuoi costruire un modello per supportare il processo decisionale. Per fare ciò inizierei con un modello "giocattolo". Qui è dove fai un esempio molto piccolo, ad esempio hai solo una macchina e tre ordini da elaborare.

Devi quindi rispondere a alcune domande fondamentali, come

  • Che orizzonte temporale vuoi ottimizzare (includi in questo processo decisionale). Ad esempio, se un ordine (di qualsiasi priorità) compare oltre il tempo x, non lo includerò nella mia pianificazione. Se non hai una coda molto grande questo non è un problema, ma diventa più importante se stai ricevendo sempre nuovi lavori.
  • Che cosa stiamo ottimizzando? Vogliamo il costo minimo? o il programma orario minimo? o la massima flessibilità (ad esempio, inserire un nuovo lavoro nel mezzo o mantenere una manutenzione pianificata ...). Gli obiettivi porteranno i tuoi programmi in diverse direzioni (soluzioni)
  • Quali sono esattamente le decisioni da prendere? Suppongo che ci siano due serie distinte.

    A. L'ordine in cui pianificare i lavori

    B. L'ordine in cui a eseguire tagli sui singoli pezzi

Nota: se sappiamo che B o il suo tempo / costo è fisso, allora dobbiamo solo calcolare i tempi di transizione tra ciascuna combinazione di lavori per essere in grado di risolvere per A.

esempio (3 lavori, a1, a2, a3)

a1- > a2 = 5

a1- > a3 = 10

a2- > a1 = 3

a2- > a3 = 7

a3- > a1 = 2

a3- > a2 = 1

non abbiamo bisogno di una matematica elaborata per vedere che il percorso di "minor tempo" è a3- > a2- > a1 = 1 + 3 = 4

Tuttavia, se B è dipendente da A, allora dobbiamo incorporare tutte le possibili pianificazioni per A nel determinare una soluzione congiunta per A e B che minimizzi il tempo o il costo o massimizzi le entrate.

Se è necessario risolvere B, questo è il problema più difficile, poiché implica il calcolo e la determinazione dei percorsi di costo minimo attraverso la geometria della parte. Mi spingo fino a dire che probabilmente non vale la pena fare un tentativo.

Se devi solo risolvere A, ecco una formulazione che ho fatto a scuola e un riferimento

È necessario configurarlo e inserirlo in un risolutore se diventa di grandi dimensioni. in caso contrario, per un problema con il giocattolo, puoi farlo forza bruta. id consiglia il solutore Fico Xpress in quanto ha pacchetti / assembly o qualsiasi cosa tu chiami per C #.

    
risposta data 25.08.2018 - 09:51
fonte
0

La pianificazione è difficile.

Ma calcolare il tempo necessario per un ordine specifico di parti è facile.

L'approccio migliore che trovo è quello di fare una ipotesi migliore, possibilmente essere forza bruta nel tuo caso, e consentire all'utente di modificare. Mostrandogli il tempo previsto con la loro configurazione.

Ciò conferisce flessibilità al sistema per cose come gli ordini urgenti, dove può essere richiesto un giudizio umano e un "abbastanza buono" per un suggerimento di lavoro generale.

Nel corso del tempo, gli utenti potrebbero indicare dove possono fare meglio del proprio algoritmo e si sarà in grado di migliorarlo in quei casi specifici.

    
risposta data 25.07.2018 - 17:20
fonte

Leggi altre domande sui tag