Aiuto / suggerimenti per la pianificazione parallela della catena di montaggio (programmazione dinamica)

6

Sto lavorando su un problema simile alla programmazione della catena di montaggio con la programmazione dinamica. Il problema è che, diversamente dal classico problema in cui abbiamo stazioni predefinite, ora ho solo informazioni su quale attività dovrebbe essere eseguita prima di quale altra (potrebbe essere più di una ) attività.

Devo scoprire quali compiti mettere su quale linea minimizzare il tempo totale impiegato dalla produzione. Ovviamente, se i compiti sono su una singola riga, essi vengono eseguiti in modo seriale e quindi sono più lenti.

Quindi ho i seguenti problemi

  1. Come posso creare livelli / linee basati sul tempo poiché non ho una sequenza di tutte le attività? So solo quale attività viene eseguita prima di quale (una o più) attività. I livelli basati sul tempo sono necessari in quanto devo ridurre al minimo il tempo (cosa che succederebbe quando le attività sono eseguite in parallelo).
  2. Come posso determinare l'ordine ottimale delle attività per ridurre al minimo il tempo? Poiché diverse attività sarebbero in attesa di una singola attività, devo minimizzare anche questa volta.
  3. Come il problema originale, anche la comunicazione tra linee diverse avrebbe un costo. Devo determinare se questo costo di comunicazione vale la pena spostare l'attività su una riga separata (dalla sua attività di comunicazione)

tl; dr : una versione parallela della pianificazione della catena di montaggio (programmazione dinamica) in cui tutte le linee potrebbero essere occupate allo stesso tempo e non ho numerazioni / ordini di stazioni. So solo quali attività devono essere eseguite prima di quale.

Devo decidere quali compiti mettere sulla stessa linea e quali compiti mettere sulle diverse linee (dato il tempo di comunicazione quando le attività sono su linee diverse) per minimizzare il tempo di produzione.

    
posta gnat 28.11.2013 - 11:39
fonte

1 risposta

1

Se sei disposto ad accettare una risposta abbastanza buona, potresti trattarla come un problema di ottimizzazione combinatoria. Crea in memoria, un albero di possibili soluzioni. I primi rami dell'albero sono l'assegnazione dell'attività o delle attività successive alle linee di assemblaggio disponibili. Basandosi su una catena di dipendenze stabilita quando le attività entrano nel sistema, si conosce sempre l'attività o le attività "successive". Se il "prossimo" compito è uno dei tanti, potresti voler rendere l'attività più grande la priorità.

I nodi alla successiva profondità dell'albero consistono nelle possibilità di assegnare l'attività successiva (a quale linea è assegnata).

Poiché questo porta a un'esplosione di possibilità, con l'albero che cresce rapidamente grande, è necessario periodicamente sfoltire l'albero. Se ci sono incarichi che non avrebbero mai senso, non dovresti aggiungere quei compiti all'albero.

Quando l'albero diventa troppo grande, in termini di utilizzo della memoria, o ad una profondità arbitraria, pota l'albero ad una singola foglia: calcola il costo (efficienza) di ciascuna foglia, prendi la migliore e getta via tutto altri. Partendo da quella foglia, calcola una nuova serie di rami e così via.

    
risposta data 27.10.2016 - 19:17
fonte