Modellare un programma di lavoro complesso


9

Ho un problema nel mondo reale che sto cercando di rappresentare e automatizzare. L'ho semplificato e sottratto al seguente:

  • Vi sono n luoghi di lavoro (P1, P2, ..., Pn).
  • Ogni posto, Pn ha una chiave, Kn.
  • Ci sono m Lavoratori, (W1, W2, ..., Wm).
  • Per lavorare in Pn, un lavoratore deve tenere Kn.
  • Ogni chiave può essere detenuta da un lavoratore o lasciata in borsa, E.
  • Un lavoratore può effettuare un viaggio in Exchange in qualsiasi momento per ritirare alcune chiavi non reclamate o rilasciare alcune chiavi che altri possono utilizzare.

  • Ora, c'è un programma di lavoro esogeno che deve essere completato in un rigoroso ordine. Per esempio:

    • 21/04/2016 W1 deve funzionare su P6
    • 21/04/2016 W2 deve funzionare su P3
    • ** scambio di chiavi richiesto **
    • 22/04/2016 W3 deve funzionare su P3
    • 22/04/2016 W2 deve funzionare su P6
  • Qualsiasi numero di lavoratori potrebbe dover lavorare in Pn ad un certo punto del loro programma, anche se mai nello stesso giorno

Sappiamo:

  • La posizione iniziale di tutte le chiavi, sia con i lavoratori che in corrispondenza di E
  • Gli ordini di lavoro futuri che ciascun lavoratore dovrà soddisfare

Quindi, sto lottando per modellare l'intera situazione. Puoi suggerire strutture di dati e algoritmi che dovrei prendere in considerazione al fine di afferrarlo e iniziare a ottimizzare i viaggi per lo scambio per ciascun lavoratore?

Quello che voglio minimizzare è il numero totale di viaggi verso E. Un obiettivo secondario sarebbe quello di garantire che nessun lavoratore effettui un numero sproporzionato di viaggi.

Grazie in anticipo!!


2
Numero medio di viaggi verso E per lavoratore = "numero totale di viaggi" / m. Quindi, se m è costante, i tuoi due obiettivi sono lo stesso obiettivo. Più interessante: immagino che ogni lavoratore possa trasportare più di una chiave contemporaneamente?
Doc Brown,

Sì, i lavoratori possono trasportare qualsiasi numero di chiavi. Per quanto riguarda la "media" penso di essermi espresso male. Stavo pensando di più all'equità, che nessun lavoratore avrebbe dovuto completare un numero sproporzionato di viaggi, quindi una bassa varianza. (domanda modificata da abbinare)
Gareth Lloyd,

Poiché i lavoratori sono ovviamente fidati delle chiavi e possono conservarle per tutta la notte e per tutto il tempo necessario - purché non sia richiesto uno scambio - perché non creare un set di chiavi per ciascun lavoratore che mantengono permanentemente? In alternativa, crea un set di chiavi per ciascun lavoratore per tutti i luoghi in cui si recano per un determinato periodo di tempo, ad esempio una settimana. Le chiavi vengono duplicate secondo necessità per creare un set settimanale per ogni lavoratore. Tutti i lavoratori si scambiano le chiavi una volta alla settimana.
radarbob,

C'è un costo (denaro o tempo) per andare allo scambio?
Dan Pichelman,

Sì, più viaggi nello scambio sono un risultato peggiore.
Gareth Lloyd,

Risposte:


1

La domanda è un po 'ambigua su un punto chiave: quali elementi stiamo cercando di risolvere. Stiamo cercando di ottimizzare l'ordine in cui sono delegate le risorse? Ridurre al minimo i viaggi allo scambio? Massimizzare la produttività degli ordini di lavoro?

Con questo in mente, suppongo che potremmo fare qualsiasi miscuglio di queste cose e mantenere la risposta di livello abbastanza alto.

La prima cosa che mi viene in mente è che i problemi correlati che questo tentativo di risolvere sono principalmente incentrati sulla gestione delle dipendenze. I lavoratori, le chiavi e le posizioni possono essere pensati come dipendenze che devono essere risolte per completare i lavori.

Portando questo al livello successivo, guarderei un adattamento dell'ordinamento topologico ( https://en.wikipedia.org/wiki/Topological_sorting ). Modella lo spazio problematico come un grande grafico (i moderni database di grafi potrebbero essere un buon supporto anche per alcune di queste analisi) e quindi usa vari tipi topologici per risolvere diversi aspetti dello spazio problematico.

Su una leggera tangente, sembra un progetto davvero divertente. Oggi ti invidio signore.


Dai un'occhiata ai grafici nel mio github github.com/MatheusArleson/Graphs
linuxunil

L'algoritmo di colorazione aiuta in questa situazione? en.m.wikipedia.org/wiki/Graph_coloring
linuxunil
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.