Esercizi · Formulazioni dei problemi di scheduling¶
Esercizi · Capitolo 14 · ogni soluzione si apre con un clic · Capitolo 14: Problemi di scheduling · Eserciziario, volume 2 (PDF)
Formulazioni usate in questi esercizi. Il modello \(\mathrm{ILP}_{P\|C_{\max}}\) del capitolo Formulazioni dei problemi di scheduling, con l'insieme delle macchine \(\mathscr{H}=\{1,\dots,m\}\):
Il rilassamento \(\mathrm{LP}\text{-}0_{P\|C_{\max}}\) rilassa (P3) in \(x_{jh}\ge 0\); il rilassamento \(\mathrm{LP}_{P\|C_{\max}}\) ha anche \(x_{jh}\le 1\). Per ogni istanza
raggiunto da \(\tilde x_{jh}=\frac{1}{m}\); una soluzione duale ottima è \(\tilde\pi_h=\frac{1}{m}\) e \(\tilde\mu_j=\frac{t_j}{m}\). Le disuguaglianze
sono valide per il modello \(\mathrm{ILP}_{P\|C_{\max}}\).
Esercizio 14.1: Modello PLI di \(P\|C_{\max}\) (1)
Consideriamo \(m=2\) macchine identiche e un insieme \(\mathscr{J}=\{1,\dots,5\}\) di \(5\) lavori (\(n=5\)) con i seguenti tempi di processamento:
Domande
-
Contare le variabili e i vincoli (oltre ai domini) del modello \(\mathrm{ILP}_{P\|C_{\max}}\) per questa istanza.
-
Scrivere il modello \(\mathrm{ILP}_{P\|C_{\max}}\) per questa istanza.
-
Calcolare il lower bound \(\max\left\{\max_j t_j,\left\lceil\frac{\sum_j t_j}{m}\right\rceil\right\}\) sul makespan.
-
Risolvere il modello con Gurobi, indicare una schedula ottima e dire quante soluzioni ottime ha il modello.
Soluzione
-
Ci sono \(n\,m=5\cdot2=10\) variabili binarie \(x_{jh}\) e la variabile continua \(C_{\max}\), quindi \(11\) variabili. Ci sono \(n=5\) vincoli di assegnamento e \(m=2\) vincoli di carico, quindi \(7\) vincoli lineari.
-
Con \(\mathscr{H}=\{1,2\}\) il modello è:
\[ \begin{array}{rlcl} {\min} & {C_{\max}} & & \\[1ex] \text{soggetto a} & {x_{11}+x_{12}} & {=} & {1} \\ & {x_{21}+x_{22}} & {=} & {1} \\ & {x_{31}+x_{32}} & {=} & {1} \\ & {x_{41}+x_{42}} & {=} & {1} \\ & {x_{51}+x_{52}} & {=} & {1} \\ & {-7\,x_{11}-5\,x_{21}-4\,x_{31}-3\,x_{41}-3\,x_{51}+C_{\max}} & {\ge} & {0} \\ & {-7\,x_{12}-5\,x_{22}-4\,x_{32}-3\,x_{42}-3\,x_{52}+C_{\max}} & {\ge} & {0} \\[1ex] & {x_{11},~x_{12},~x_{21},~\dots,~x_{52}} & {\in} & {\{0,1\}} \\ & {C_{\max}} & {\ge} & {0} \end{array} \] -
Il tempo di processamento totale è \(7+5+4+3+3=22\), quindi
\[ \max\left\{7,~\left\lceil22/2\right\rceil\right\}=\max\{7,11\}=11. \] -
Gurobi dà \(z(\mathrm{ILP}_{P\|C_{\max}})=11\), uguale al lower bound. Una schedula ottima è \(J_1=\{1,3\}\) e \(J_2=\{2,4,5\}\), con carichi \(11\) e \(11\): \(\tilde x_{11}=1\), \(\tilde x_{31}=1\), \(\tilde x_{22}=1\), \(\tilde x_{42}=1\), \(\tilde x_{52}=1\), \(\tilde C_{\max}=11\).
Enumerando i \(2^5=32\) assegnamenti, la partizione dei lavori è unica: il lavoro \(1\) può condividere una macchina solo con il lavoro \(3\). Scambiando le due macchine otteniamo la seconda soluzione ottima del modello, quindi le soluzioni ottime sono \(2\).
Esercizio 14.2: Rilassamento lineare del modello di \(P\|C_{\max}\) (1)
Consideriamo \(m=3\) macchine identiche e un insieme \(\mathscr{J}=\{1,\dots,6\}\) di \(6\) lavori (\(n=6\)) con i seguenti tempi di processamento:
Domande
-
Risolvere \(\mathrm{LP}\text{-}0_{P\|C_{\max}}\) con Gurobi e confrontarne il valore con la formula (P5).
-
Scrivere le soluzioni primale e duale del capitolo per questa istanza e verificarne l'ammissibilità e l'uguaglianza dei valori obiettivo.
-
Risolvere con Gurobi il modello \(\mathrm{ILP}_{P\|C_{\max}}\) e calcolare il rapporto \(\frac{z(\mathrm{LP}_{P\|C_{\max}})}{z(\mathrm{ILP}_{P\|C_{\max}})}\). Confrontarlo con \(\frac{1}{m}\).
Soluzione
Usiamo il valore (P5) dei rilassamenti, le soluzioni primale e duale date con esso e le disuguaglianze valide (P6) del riquadro all'inizio del capitolo.
-
Gurobi dà \(z(\mathrm{LP}\text{-}0_{P\|C_{\max}})=\frac{29}{3}\), e la formula dà \(\frac{\sum_j t_j}{m}=\frac{29}{3}\), lo stesso valore. Aggiungere i bound \(x_{jh}\le 1\) non lo cambia.
-
Primale: \(\tilde x_{jh}=\frac{1}{3}\) per ogni lavoro e macchina, e \(\tilde C_{\max}=\frac{29}{3}\). Ogni lavoro ha \(3\cdot\frac{1}{3}=1\), e ogni macchina ha carico \(\frac{1}{3}\sum_j t_j=\frac{29}{3}=\tilde C_{\max}\): tutti i vincoli valgono all'uguaglianza.
Duale: \(\tilde\pi_h=\frac{1}{3}\) per ogni macchina e \(\tilde\mu_j=\frac{t_j}{3}\), ossia
\[ \tilde\mu_1=\frac{8}{3},~~\tilde\mu_2=2,~~\tilde\mu_3=\frac{5}{3},~~\tilde\mu_4=\frac{4}{3},~~\tilde\mu_5=\frac{4}{3},~~\tilde\mu_6=\frac{2}{3}. \]Ogni vincolo \(\mu_j-t_j\pi_h\le 0\) vale all'uguaglianza, e \(\sum_h\tilde\pi_h=3\cdot\frac{1}{3}=1\). Il valore duale è \(\sum_j\tilde\mu_j=\frac{29}{3}\), uguale al valore primale: entrambe le soluzioni sono ottime.
-
Gurobi dà \(z(\mathrm{ILP}_{P\|C_{\max}})=10\) (per esempio \(J_1=\{1,6\}\), \(J_2=\{2,4\}\), \(J_3=\{3,5\}\), con carichi \(10\), \(10\), \(9\)). Il rapporto è \(\frac{\frac{29}{3}}{10}=\frac{29}{30}\), molto maggiore di \(\frac{1}{3}\): il caso peggiore del capitolo richiede un lavoro molto lungo.
Esercizio 14.3: Soluzioni ammissibili del modello di \(P\|C_{\max}\) (1)
Consideriamo \(m=2\) macchine identiche e un insieme \(\mathscr{J}=\{1,\dots,5\}\) di \(5\) lavori (\(n=5\)) con i seguenti tempi di processamento:
Consideriamo le seguenti soluzioni candidate del modello \(\mathrm{ILP}_{P\|C_{\max}}\), date dai lavori su ciascuna macchina:
-
(a) macchina \(1\): \(\{1,3\}\), macchina \(2\): \(\{2,4,5\}\), e \(C_{\max}=10\);
-
(b) macchina \(1\): \(\{1,2\}\), macchina \(2\): \(\{3,4,5\}\), e \(C_{\max}=10\);
-
(c) macchina \(1\): \(\{1,2\}\), macchina \(2\): \(\{3,4,5\}\), e \(C_{\max}=12\);
-
(d) \(x_{j1}=x_{j2}=\frac{1}{2}\) per ogni lavoro \(j\), e \(C_{\max}=10\);
-
(e) macchina \(1\): \(\{1,3,5\}\), macchina \(2\): \(\{2,4,5\}\), e \(C_{\max}=12\).
Domande
-
Per ogni candidata, verificare i vincoli di assegnamento e i vincoli di carico.
-
Stabilire quali candidate sono ammissibili per \(\mathrm{ILP}_{P\|C_{\max}}\) e quali per \(\mathrm{LP}_{P\|C_{\max}}\). Per quelle ammissibili, indicare il valore e il più piccolo valore di \(C_{\max}\) che mantiene ammissibile lo stesso assegnamento.
-
Trovare il valore ottimo dell'istanza e stabilire quali candidate sono ottime per \(\mathrm{ILP}_{P\|C_{\max}}\) o per \(\mathrm{LP}_{P\|C_{\max}}\) (usare Gurobi).
Soluzione
-
-
(a) Ogni lavoro è su una macchina. I carichi sono \(10\) e \(10\), e \(C_{\max}=10\): i vincoli di carico valgono.
-
(b) Ogni lavoro è su una macchina. I carichi sono \(11\) e \(9\), e \(C_{\max}=10\): il vincolo di carico della macchina \(1\) è violato, poiché \(11>10\).
-
(c) Ogni lavoro è su una macchina. I carichi sono \(11\) e \(9\), e \(C_{\max}=12\): i vincoli di carico valgono.
-
(d) I vincoli di assegnamento valgono. I carichi sono \(10\) e \(10\), e \(C_{\max}=10\): i vincoli di carico valgono.
-
(e) Il lavoro \(5\) è su entrambe le macchine: il suo vincolo di assegnamento dà \(2\neq 1\). I carichi sono \(12\) e \(10\), e \(C_{\max}=12\): i vincoli di carico valgono.
-
-
-
(a) Ammissibile per entrambi i modelli, di valore \(10\), che è anche il carico massimo.
-
(b) Inammissibile per entrambi i modelli.
-
(c) Ammissibile per entrambi i modelli, di valore \(12\); il carico massimo è \(11\), quindi \(C_{\max}=11\) mantiene ammissibile l'assegnamento ed è migliore.
-
(d) Ammissibile solo per \(\mathrm{LP}_{P\|C_{\max}}\), di valore \(10\): l'assegnamento frazionario bilancia esattamente i carichi.
-
(e) Inammissibile per entrambi i modelli.
-
-
Il lower bound è \(\left\lceil20/2\right\rceil=10\) e la candidata (a) lo raggiunge: \(z(\mathrm{ILP}_{P\|C_{\max}})=10\), e (a) è ottima. Gurobi dà \(z(\mathrm{LP}_{P\|C_{\max}})=10\), quindi (a) e (d) sono entrambe ottime per il rilassamento: su questa istanza non c'è gap di integralità.
Esercizio 14.4: Disuguaglianze valide e simmetria per \(P\|C_{\max}\) (1)
Consideriamo \(m=3\) macchine identiche e un insieme \(\mathscr{J}=\{1,\dots,6\}\) di \(6\) lavori (\(n=6\)) con i seguenti tempi di processamento:
Domande
-
Calcolare \(z(\mathrm{LP}_{P\|C_{\max}})\) con Gurobi.
-
Aggiungere la disuguaglianza valida \(C_{\max}\ge\left\lceil\frac{\sum_j t_j}{m}\right\rceil\) e risolvere di nuovo il rilassamento. Poi aggiungere invece le disuguaglianze valide \(C_{\max}\ge t_j\) e risolvere di nuovo.
-
Calcolare con Gurobi il valore ottimo e confrontarlo con i tre bound.
-
Contare, per enumerazione, le soluzioni ottime del modello senza e con i vincoli di rottura delle simmetrie \(\sum_j t_jx_{jh}\ge\sum_j t_jx_{j,h+1}\) (\(h=1,2\)).
Soluzione
Usiamo il valore (P5) dei rilassamenti, le soluzioni primale e duale date con esso e le disuguaglianze valide (P6) del riquadro all'inizio del capitolo.
-
Gurobi dà \(z(\mathrm{LP}_{P\|C_{\max}})=24/3=8\).
-
La disuguaglianza \(C_{\max}\ge\left\lceil24/3\right\rceil=8\) non cambia il bound: Gurobi dà di nuovo \(8\), poiché \(24/3\) è già intero. Le disuguaglianze \(C_{\max}\ge t_j\) comprendono \(C_{\max}\ge 12\), e Gurobi dà \(12\): il lavoro lungo da solo fissa il bound.
-
Gurobi dà \(z(\mathrm{ILP}_{P\|C_{\max}})=12\): il lavoro \(1\) da solo su una macchina, gli altri lavori sulle altre due macchine. Il bound LP \(8\) ha gap \(\frac{12-8}{8}=50.0\%\); con le disuguaglianze \(C_{\max}\ge t_j\) il bound è \(12\), uguale al valore ottimo.
-
Senza i vincoli di rottura delle simmetrie: il lavoro \(1\) deve stare da solo (qualunque altro lavoro darebbe un carico maggiore di \(12\)), può stare su una qualunque delle \(3\) macchine, e gli altri \(5\) lavori si possono dividere in qualunque modo fra le altre due macchine, i cui carichi restano al più \(12\). Si ottengono così \(3\cdot 2^5=96\) soluzioni ottime.
Con i vincoli i carichi devono essere non crescenti. L'enumerazione dà \(18\) soluzioni ottime: il lavoro \(1\) sulla macchina \(1\) con gli altri lavori divisi in modo che la macchina \(2\) abbia carico almeno pari a quello della macchina \(3\), più la soluzione con tutti i lavori corti sulla macchina \(1\) e il lavoro \(1\) sulla macchina \(2\) (carichi \(12\), \(12\), \(0\)). I vincoli eliminano la maggior parte, ma non tutte, delle soluzioni equivalenti.
Esercizio 14.5: Gap di integralità del modello di \(P\|C_{\max}\) (1)
Consideriamo \(m=2\) macchine identiche e un insieme \(\mathscr{J}=\{1,\dots,3\}\) di \(3\) lavori (\(n=3\)) con i seguenti tempi di processamento:
Domande
-
Calcolare con Gurobi \(z(\mathrm{LP}_{P\|C_{\max}})\) e \(z(\mathrm{ILP}_{P\|C_{\max}})\), e spiegare il valore ottimo.
-
Calcolare il gap assoluto e il rapporto \(\frac{z(\mathrm{LP}_{P\|C_{\max}})}{z(\mathrm{ILP}_{P\|C_{\max}})}\).
-
Aggiungere entrambe le disuguaglianze valide (P6) e risolvere di nuovo il rilassamento. Quanta parte del gap viene chiusa?
-
Consideriamo la famiglia del capitolo con \(m=3\) macchine, un lavoro di tempo \(M=10\) e \(3\) lavori di tempo \(1\). Calcolare il rapporto con Gurobi e il suo limite per \(M\to+\infty\).
Soluzione
Usiamo il valore (P5) dei rilassamenti, le soluzioni primale e duale date con esso e le disuguaglianze valide (P6) del riquadro all'inizio del capitolo.
-
Gurobi dà \(z(\mathrm{LP}_{P\|C_{\max}})=\frac{13}{2}=\frac{13}{2}\) e \(z(\mathrm{ILP}_{P\|C_{\max}})=8\). I due lavori di tempo \(5\) sulla stessa macchina danno carico \(10\); altrimenti il lavoro di tempo \(3\) condivide una macchina con un lavoro di tempo \(5\), con carico \(8\).
-
Il gap assoluto è \(8-\frac{13}{2}=\frac{3}{2}\), e il rapporto è \(\frac{\frac{13}{2}}{8}=\frac{13}{16}\), che è maggiore di \(\frac{1}{m}=\frac{1}{2}\).
-
Le disuguaglianze danno \(C_{\max}\ge\max\{5,\lceil \frac{13}{2}\rceil\}=7\), e Gurobi dà \(7\). Il gap passa da \(\frac{3}{2}\) a \(1\): l'arrotondamento ne chiude un terzo, e l'unità residua viene dall'assegnamento intero.
-
Gurobi dà \(z(\mathrm{LP}_{P\|C_{\max}})=\frac{10+3}{3}=\frac{13}{3}\) e \(z(\mathrm{ILP}_{P\|C_{\max}})=10\), il lavoro lungo. Il rapporto è \(\frac{\frac{13}{3}}{10}=\frac{13}{30}\). In generale vale \(\frac{M+m}{m\,M}=\frac{1}{m}+\frac{1}{M}\), che tende a \(\frac{1}{3}\) per \(M\to+\infty\).