Esercizi · Problemi di scheduling¶
Esercizi · Capitolo 7 · ogni soluzione si apre con un clic · Capitolo 7: Problemi di scheduling · Eserciziario, volume 1 (PDF)
Esercizio 7.1: Carichi, makespan e diagramma di Gantt (\(P\|C_{\max}\))
Consideriamo l'istanza di \(P\|C_{\max}\) con \(m=3\) macchine e \(n=7\) lavori, con tempi di processamento
e i tre assegnamenti
Domande
-
Per ogni assegnamento, scrivere gli insiemi \(J_1,J_2,J_3\), i carichi e il makespan.
-
Stabilire quali assegnamenti descrivono lo stesso schedule.
-
Disegnare il diagramma di Gantt dell'assegnamento con il makespan minimo.
-
Calcolare il lower bound \(\max\{\max_j t_j,\lceil \sum_j t_j/m\rceil\}\) e stabilire se quello schedule è ottimo.
Soluzione
-
-
\(\mathrm{mach}^1\): \(J_1=\{1,4,7\},\ J_2=\{2,5\},\ J_3=\{3,6\}\), carichi \((10,8,7)\), makespan \(C_{\max}=10\);
-
\(\mathrm{mach}^2\): \(J_1=\{2,5\},\ J_2=\{3,6\},\ J_3=\{1,4,7\}\), carichi \((8,7,10)\), makespan \(C_{\max}=10\);
-
\(\mathrm{mach}^3\): \(J_1=\{1,3\},\ J_2=\{4,5\},\ J_3=\{2,6,7\}\), carichi \((9,9,7)\), makespan \(C_{\max}=9\);
-
-
\(\mathrm{mach}^1\) e \(\mathrm{mach}^2\) danno gli stessi tre insiemi di lavori, con i nomi delle macchine cambiati (\(1\to 3\), \(2\to 1\), \(3\to 2\)): sono lo stesso schedule. \(\mathrm{mach}^3\) dà insiemi diversi.
-
Il makespan minimo, \(9\), è quello di \(\mathrm{mach}^3\):
-
\(\sum_j t_j=25\) e \(\max_j t_j=6\), quindi \(\mathrm{LB}=\max\{6,\lceil 25/3\rceil\}=9\). Lo schedule di \(\mathrm{mach}^3\) lo raggiunge: è ottimo, \(z(I)=9\).
\(\mathrm{mach}^1\) e \(\mathrm{mach}^2\) sono lo stesso schedule; lo schedule di \(\mathrm{mach}^3\) ha makespan \(9\), pari al lower bound, ed è ottimo.
Esercizio 7.2: Contare gli schedule (\(P\|C_{\max}\))
Consideriamo un'istanza di \(P\|C_{\max}\) con \(n=5\) lavori. Contiamo gli assegnamenti e gli schedule distinti per \(m=2\) e per \(m=3\) macchine.
Domande
-
Contare gli assegnamenti \(\mathrm{mach}\) con \(m=2\) e con \(m=3\).
-
Calcolare il numero di Stirling \(S(5,2)\), contando le partizioni dei lavori in due insiemi non vuoti.
-
Calcolare \(S(5,3)\), raggruppando le partizioni in tre insiemi non vuoti secondo le cardinalità degli insiemi.
-
Contare gli schedule distinti con \(m=2\) e con \(m=3\), e spiegare perché gli schedule sono meno degli assegnamenti.
Soluzione
-
Ogni lavoro sceglie una delle \(m\) macchine: \(2^5=32\) assegnamenti con \(m=2\), \(3^5=243\) con \(m=3\).
-
Una partizione in due insiemi è determinata dall'insieme che contiene il lavoro \(1\) insieme ad alcuni degli altri \(4\) lavori, ma non a tutti: \(2^4-1=15\) scelte. Quindi \(S(5,2)=15\).
-
Le cardinalità di tre insiemi non vuoti con \(5\) lavori sono \((3,1,1)\) oppure \((2,2,1)\).
-
Cardinalità \((3,1,1)\): scegliamo l'insieme di \(3\) lavori, in \(\binom{5}{3}=10\) modi.
-
Cardinalità \((2,2,1)\): scegliamo il lavoro da solo, in \(5\) modi, e dividiamo gli altri \(4\) in due coppie, in \(\binom{4}{2}/2=3\) modi: \(15\).
Quindi \(S(5,3)=10+15=25\).
-
-
Con \(m=2\): \(S(5,1)+S(5,2)=1+15=16\) schedule. Con \(m=3\): \(S(5,1)+S(5,2)+S(5,3)=1+15+25=41\) schedule. Le macchine sono identiche: un assegnamento e quelli ottenuti rinominando le macchine sono lo stesso schedule. Con \(m=2\) ogni schedule con due macchine non vuote è dato da \(2\) assegnamenti: \(\frac{32-2}{2}=15\), più lo schedule con tutti i lavori insieme.
Con \(5\) lavori ci sono \(32\) e \(243\) assegnamenti su \(2\) e \(3\) macchine, ma solo \(16\) e \(41\) schedule.
Esercizio 7.3: Un primo schedule, un lower bound e l'ottimo (\(P\|C_{\max}\))
Consideriamo l'istanza di \(P\|C_{\max}\) con \(m=3\) macchine e \(n=7\) lavori, con tempi di processamento
Domande
-
Costruire uno schedule prendendo i lavori nell'ordine \(1,2,\dots,n\) e assegnando ciascuno alla macchina con il carico minimo (pareggi risolti con l'indice minimo). Disegnarne il diagramma di Gantt.
-
Calcolare il lower bound del capitolo.
-
Trovare uno schedule ottimo e stabilire se è unico.
Soluzione
-
I carichi dopo ogni assegnamento sono:
lavoro \(j\) (\(t_j\)) macchina scelta carichi \((L_1,L_2,L_3)\) \(1\) (\(3\)) \(1\) \((3,0,0)\) \(2\) (\(5\)) \(2\) \((3,5,0)\) \(3\) (\(2\)) \(3\) \((3,5,2)\) \(4\) (\(6\)) \(3\) \((3,5,8)\) \(5\) (\(4\)) \(1\) \((7,5,8)\) \(6\) (\(4\)) \(2\) \((7,9,8)\) \(7\) (\(3\)) \(1\) \((10,9,8)\) Otteniamo \(J_1=\{1,5,7\},\ J_2=\{2,6\},\ J_3=\{3,4\}\), con makespan \(10\):
-
\(\mathrm{LB}=\max\{6,\lceil 27/3\rceil\}=9\), quindi \(9\le z(I)\le 10\).
-
Un makespan pari a \(9\) richiede tre carichi pari esattamente a \(9\), poiché i carichi sommano a \(27=3\cdot9\). Il lavoro \(4\) (\(6\)) ha bisogno di un compagno di durata \(3\), il lavoro \(2\) (\(5\)) di uno di durata \(4\), e i lavori rimanenti riempiono la terza macchina. Lo schedule \(J_1=\{4,7\},\ J_2=\{2,6\},\ J_3=\{1,3,5\}\) ha carichi \((9,9,9)\):
Raggiunge il bound, quindi \(z(I)=9\). Non è unico: l'enumerazione degli schedule ne dà \(4\) ottimi; per esempio, i lavori \(1\) e \(7\), entrambi di durata \(3\), si possono scambiare.
Assegnare i lavori nell'ordine dei dati dà makespan \(10\); lo schedule \(J_1=\{4,7\},\ J_2=\{2,6\},\ J_3=\{1,3,5\}\) raggiunge il lower bound, e \(z(I)=9\).
Esercizio 7.4: Quando il lower bound non è raggiunto (\(P\|C_{\max}\))
Consideriamo l'istanza di \(P\|C_{\max}\) con \(m=2\) macchine e \(n=4\) lavori, con tempi di processamento
Domande
-
Calcolare il lower bound del capitolo.
-
Dimostrare che nessuno schedule ha makespan \(10\).
-
Trovare uno schedule ottimo, enumerando gli schedule distinti.
Soluzione
-
\(\mathrm{LB}=\max\{8,\lceil 20/2\rceil\}=10\).
-
I due carichi sommano a \(20\): un makespan pari a \(10\) richiede entrambi i carichi pari a \(10\), cioè un insieme di lavori di durata totale esattamente \(10\). I totali dei sottoinsiemi di lavori sono \(0\), \(3\), \(4\), \(5\), \(7\), \(8\), \(9\), \(11\), \(12\), \(13\), \(15\), \(16\), \(17\), \(20\), e \(10\) non è fra questi. Quindi \(z(I)\ge 11\).
-
Con \(m=2\) ci sono \(S(4,1)+S(4,2)=1+7=8\) schedule:
\(J_1\) \(J_2\) carichi \(C_{\max}\) \(\{1,4\}\) \(\{2,3\}\) \((11,9)\) \(11\) \(\{1\}\) \(\{2,3,4\}\) \((8,12)\) \(12\) \(\{1,3\}\) \(\{2,4\}\) \((12,8)\) \(12\) \(\{1,2\}\) \(\{3,4\}\) \((13,7)\) \(13\) \(\{1,3,4\}\) \(\{2\}\) \((15,5)\) \(15\) \(\{1,2,4\}\) \(\{3\}\) \((16,4)\) \(16\) \(\{1,2,3\}\) \(\{4\}\) \((17,3)\) \(17\) \(\{1,2,3,4\}\) \(\emptyset\) \((20,0)\) \(20\) Lo schedule ottimo è unico, \(J_1=\{1,4\},\ J_2=\{2,3\}\), con \(z(I)=11\):
Il lower bound dà \(10\), ma nessun insieme di lavori ha durata totale \(10\): il makespan ottimo è \(z(I)=11\), e il bound non è raggiunto.
Esercizio 7.5: Makespan e bin packing (\(P\|C_{\max}\))
Consideriamo l'istanza di \(P\|C_{\max}\) con \(m=3\) macchine e \(n=5\) lavori, con tempi di processamento
Usiamo la relazione con il problema del bin packing: esiste uno schedule con makespan al più \(T\) se e solo se i lavori, visti come oggetti di peso \(t_j\), entrano in \(m\) contenitori di capacità \(T\).
Domande
-
Calcolare il lower bound \(\mathrm{LB}\) del capitolo.
-
Stabilire se i lavori possono essere inseriti in \(3\) contenitori di capacità \(T=\mathrm{LB}\).
-
Trovare il valore minimo di \(T\) per cui i lavori entrano in \(3\) contenitori, e lo schedule corrispondente.
-
Stabilire se lo schedule ottimo è unico.
Soluzione
-
\(\mathrm{LB}=\max\{7,\lceil 27/3\rceil\}=\max\{7,9\}=9\).
-
Tre contenitori di capacità \(9\) contengono \(27=27\), il peso totale: ogni contenitore deve essere riempito esattamente. L'oggetto di peso \(7\) richiede oggetti di peso totale \(2\), e ogni altro oggetto pesa almeno \(4\). Quindi i lavori non entrano, e \(z(I)\ge 10\).
-
Con \(T=10\) il riempimento \(\{\{1\},\{2,5\},\{3,4\}\}\) ha contenitori di peso \(7, 10, 10\le 10\). Lo schedule \(J_1=\{1\},\ J_2=\{2,5\},\ J_3=\{3,4\}\) ha makespan \(10\):
Quindi \(z(I)=10\).
-
Sì: l'enumerazione dei \(41\) schedule con al più \(3\) macchine mostra che è l'unico schedule con makespan \(10\). Il lavoro \(1\) deve stare da solo, perché con un qualunque altro lavoro la sua macchina supererebbe \(10\), e le coppie \(\{2,5\}\) e \(\{3,4\}\) sono l'unico modo di dividere gli altri lavori entro \(10\).
I lavori non entrano in \(3\) contenitori di capacità \(9\) ed entrano in \(3\) contenitori di capacità \(10\): \(z(I)=10\), uno in più del lower bound.