Sto provando a simulare una linea di produzione di DVD in Java. La cosa su cui ho un problema è il calcolo del tempo in questo tipo di simulazione e il numero di DVD all'ora.
La linea di produzione è composta da 4 macchine, ognuna delle quali trascorre un certo tempo casuale lavorando su 1 DVD. Il terzo può lavorare su più di 1 DVD contemporaneamente (massimo 100). Inoltre, il terzo accetterà sempre più DVD su cui lavorare, a patto che la capacità sia < 50%, che ho intenzione di etichettare come m3Capacity
. Ma per ora, ignoriamo semplicemente la caratteristica della capacità.
Quello che ho finora è che, con un generatore di numeri casuali (dato che ogni macchina ha un tempo di elaborazione casuale del DVD ogni volta che inizia a lavorare su un nuovo DVD), ho assegnato un tempo di elaborazione casuale a ciascuna delle quattro macchine, sommato i tempi di elaborazione per il tempo totale trascorso in produzione one-go ( totalProdTime = processTime1 + processTime2 + processTime3 + processTime4
), quindi continuo a sommare quei valori totalProdTime fino a quando il tempo totale dell'intera simulazione raggiunge la durata desiderata del simulazione specificata dall'utente ( totalProdTimeSim = totalProdTimeSim + mTotal.totalProdTime
). Più tardi ho solo verificato se totalProdTimeSim ha raggiunto l'ora desiderata e il gioco è fatto.
Ora, il problema è che, in questo modo, la produzione dei DVD attende che un'istanza di produzione finisca completamente fino alla fine della macchina 4, e quindi il lavoro inizia sul secondo DVD, ecc. Quello che voglio fare è che dopo che la macchina 1 ha terminato il lavoro, e la seconda inizia il suo lavoro, la macchina 1 inizia a lavorare su un altro DVD con il tempo appena generato. Lo stesso vale per tutte le altre macchine. Dopo che la macchina 2 ha finito di lavorare su un DVD, inizia immediatamente a lavorare su un altro DVD.
Ora, poiché tutte le macchine hanno tempi di elaborazione casuali ogni volta che iniziano a lavorare su un altro DVD, spesso accade che una macchina "voglia lavorare su un altro DVD" mentre quella precedente non ha finito il suo lavoro su quella attuale . In questo caso, la macchina inattiva "attende" che la macchina precedente abbia terminato l'elaborazione e quindi accetta il DVD dalla macchina precedente.
Quindi, nel mio esempio, abbiamo che tutte le macchine funzionano una per una, ma voglio che tutti lavorino costantemente, anche dopo aver finito di lavorare sul DVD corrente (eccetto nella prima iterazione, dove le altre macchine hanno bisogno aspettare che i precedenti li inoltrino il loro DVD su cui hanno precedentemente lavorato).
Come pensi che dovrei calcolare il tempo totale di simulazione e l'uscita del DVD? Ci stavo pensando ieri sera, ma non ho avuto idee.
Il mio schizzo su come dovrebbe funzionare può essere trovato nella foto qui sotto. Nello schizzo tutte le macchine si comportano come se avessero costantemente qualcosa su cui lavorare, ma dovrebbero aspettare dall'input della macchina precedente.
Grazie in anticipo!