Sto lavorando a un'applicazione di pianificazione del lavoro interattiva. Dato un insieme di risorse con i relativi profili di capacità/disponibilità, un insieme di lavori da eseguire su queste risorse e una serie di vincoli che determinano la sequenza del lavoro e le ore di inizio/fine più recenti/più recenti per i lavori che voglio consentire all'utente di spostarsi manualmente lavori in giro Essenzialmente voglio che l'utente sia in grado di "afferrare" un nodo della rete di lavoro e trascinarlo avanti/indietro nel tempo senza violare nessuno dei vincoli.Trasformazione grafica vincolata nelle applicazioni di pianificazione
L'immagine mostra una semplice configurazione di esempio. Il lavoro triangolare alla fine indica il tempo di fine ultimo per tutti i lavori, le linee di collegamento tra i lavori impongono un ordine sui lavori e le barre grigio/verde indicano la disponibilità e il carico delle risorse.
È possibile trascinare uno qualsiasi dei lavori per comprimere la pianificazione. Si noti che i lavori cambieranno di lunghezza a causa di diversi profili di capacità.
Ho implementato un algoritmo ad-hock che funziona. Tuttavia ci sono ancora casi in cui fallirà e violerà alcuni vincoli. Tuttavia, dal momento che la pianificazione del job-shop è un campo ben studiato con molti algoritmi ed euristiche per trovare una soluzione ottimale (o piuttosto buona) per il problema generale NP-rigido, penso che le soluzioni dovrebbero esistere per il mio sottoinsieme più facile. Ho esaminato argomenti di programmazione di vincoli e anche soluzioni basate sulla fisica (corpi rigidi collegati tramite giunti statici) ma finora non ho trovato nulla di adatto. Qualche suggerimento/suggerimento/consiglio/ricerca parole chiave per me?
Non capisco completamente il problema, mi dispiace. Perché cambierebbe la durata dei lavori? Cosa intendi quando dici di afferrare e spostare il nodo? Un lavoro è un nodo? Grazie. –
La rete come mostrato sopra può essere modificata tramite operazioni di trascinamento e rilascio interattive. Fare clic su un lavoro (i nodi nel grafico con l'etichetta "lavoro") e spostarlo altrove. Poiché la durata del lavoro dipende dalla capacità disponibile (le barre grigio/verde), le lunghezze del lavoro cambieranno durante lo spostamento. – BuschnicK
Non capisco neanche. Vuoi che altri lavori si spostino per soddisfare un determinato movimento di lavoro, ad esempio se trascini job032 a sinistra, job029 e job031 in qualche modo riprogrammano se stessi in modo che job031 finisca ancora prima che job032 venga avviato? In tal caso, dovrai dirci cosa possiamo fare agli altri lavori: spostarci nel tempo, cambiare risorse, ecc.? Le risorse condividono semplicemente (cioè due lavori unitari in esecuzione sulla stessa risorsa richiedono 2 unità di tempo per finire)? –