Soluzioni 4.7-4.10 Fondamenti di Ricerca Operativa Prof. E. Amaldi Esercizi sulla Programmazione Lineare Intera 4.7 Algoritmo del Simplesso Duale. Risolvere con l’algoritmo del simplesso duale il seguente problema di PL: min 3x1 + 4x2 + 5x3 2x1 + 2x2 + x3 ≥ 6 x1 + 2x2 + 3x3 ≥ 5 x1 , x 2 , x 3 ≥ 0. Quali sono i vantaggi rispetto all’algoritmo primale? 4.8 Branch-and-Bound. Trovare la soluzione ottima del seguente problema di PLI max z ∗ = 3x1 + 4x2 2x1 + x2 ≤6 2x1 + 3x2 ≤ 9 x1 , x 2 ≥ 0, intere mediante il metodo Branch-and-Bound (risolvendo graficamente il rilassamento continuo dei sottoproblemi di PLI associati ad ogni nodo dell’albero decisionale). Per il branching, si scelga sempre la variabile con il valore frazionario più vicino a 21 . Per la scelta del sottoproblema da elaborare, si scelga quello con il “bound” più promettente. 4.9 Branch-and-Bound applicato al problema dello Zaino. Una banca di investimenti dispone di 14 milioni di euro, e investe primariamente in quattro tipi di investimento (numerati 1,2,3,4). La seguente tabella indica, per ogni investimento, il ritorno netto e il capitale da investire. Investimento Ritorno netto Capitale da investire 1 16 5 2 22 7 3 4 12 8 4 3 Si formuli un modello di PLI per risolvere il problema di scegliere gli investimenti da effettuare in modo da massimizzare il ritorno totale (gli investimenti possono essere scelti o non scelti, ma non è possibile effettuare un investimento parziale). Risolvere mediante Branch-and-Bound. Spiegare come si semplifica il problema dei rilassamenti continui. 4.10 Algoritmo dei Piani di Taglio. Si risolva il problema seguente: min x1 − 2x2 −4x1 + 6x2 ≤ 9 x1 + x 2 ≤4 x1 , x 2 ≥ 0, intere mediante l’algoritmo dei piani di taglio con tagli di Gomory. Documento preparato da: Leo Liberti 1 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 Prof. E. Amaldi Soluzioni 4.7 Algoritmo del Simplesso Duale. Il tableau iniziale in forma canonica non evidenzia una soluzione di base ammissibile: operando con l’algoritmo del simplesso primale occorrerebbe procedere con la fase 1 per l’individuazione di una soluzione di base iniziale ammissibile. Cambiando il segno alle righe 1 e 2 si ottiene invece facilmente un tableau iniziale per l’algoritmo del simplesso duale: −z x4 x5 x1 3 -2 -1 0 -6 -5 x2 4 -2 -2 x3 5 -1 -3 x4 0 1 0 x5 0 0 1 Si osservi che b̄4 = −6 < 0 e quindi il valore di x4 non è primale ammissibile. Imponiamo l’ammissibilità primale facendo uscire x4 dalla base (dunque r = 4) e ponendola quindi uguale a 0. Dobbiamo adesso trovare un indice s ≤ n tale che x s possa entrare in base al posto di xi mantenedo l’ammissibilità duale. L’elemento pivot ārs viene determinato calcolando il rapporto |āc̄rss | minimo in { c̄j | ārj < 0, 1 ≤ j ≤ n}. |ārj | Forniamo ora una breve spiegazione per questa scelta. Supponendo che per ogni j ≤ n si abbia ārj ≥ 0, un pivot in ārj non cambierebbe il segno di b̄r : questo significherebbe che il primale è inammissibile (nessun cambio di base porterebbe a xr ≥ 0). Essendo invece presenti dei coefficienti ārj < 0, un pivot in ārj renderebbe xr primale ammissibile (ponendola uguale a 0 e facendola uscire dalla base). Questo è il motivo per cui si prendono in considerazione solo i coefficienti negativi nel computo dell’indice s. Vediamo ora come la scelta di s cambia i coefficienti della funzione obiettivo. Effettuando le operazioni di pivoting sulla riga della funzione obiettivo, si avrà l’aggiornamento c̄j ← c̄j − āc̄rss ārj per ogni j ≤ n. Per mantenere l’ammissibilità duale è necessario che c̄j ≥ 0 per ogni j ≤ n, e quindi che c̄j − āc̄rss ārj ≥ 0: dunque si deve avere, come specificato sopra, ∀ j ≤ n tale che ārj < 0, c̄s c̄j ≤ . |ārs | |ārj | Nel tableau sopra si ha: 3 c̄2 c̄2 c̄1 = ; = 2; = 5. |ā11 | 2 |ā12 | |ā13 | L’elemento pivot è quindi ā11 (come indicato nel tableau) e la variabile che entra in base è x1 . Effettuando l’operazione pivot corrispondente si ottiene il nuovo tableau: −z x1 x5 Documento preparato da: Leo Liberti -9 3 -2 x1 0 1 0 x2 1 1 -1 x3 7/2 1/2 -5/2 x4 3/2 -1/2 -1/2 x5 0 0 1 2 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 Prof. E. Amaldi Effettuando l’operazione pivot la variabile x5 esce dalla base (riga 2) e la variabile x2 entra (colonna 2). Si ottiene il tableau ammissibile per il primale (e quindi ottimo): −z x1 x2 -11 1 2 x1 0 1 0 x2 0 0 1 x3 1 -2 5/2 x4 1 -1 1/2 x5 1 1 -1 La funzione obiettivo è passata da 0 (tableau iniziale) a 9 (secondo tableau), arrivando infine al valore ottimo 11. 4.8 Branch-and-Bound. Risolviamo il problema mediante l’algoritmo Branch-andBound. Ad ogni nodo, risolviamo per via grafica il rilassamento continuo del sottoproblema corrispondente: si individua l’ottimo per ispezione come intersezione di due rette e si trova il punto ottimale x̄ risolvendo il relativo sistema in due equazioni e due incognite. Il limite superiore (“upper bound”) è dato dal valore della funzione obiettivo z̄. L’ordine di risoluzione dei sottoproblemi (si veda il diagramma in Fig. 1) è P1, P2, P3, P4, P5, P6, P7. Dopo aver risolto P7 si nota che P6 ha una soluzione intera peggiore di P7, e che P2 ha un limite superiore peggiore del valore della migliore soluzione intera trovata per ora (in P7). Dunque il nodo P6 è elaborato senza bisogno di branching, e la soluzione di P7 è la soluzione ottima del problema di PLI, con x∗ = (0, 3) e z ∗ = 12. Si noti anche che quando il valore ottimale z̄ della funzione obiettivo del sottoproblema è frazionario, il limite superiore effettivo può essere preso come il massimo intero minore di z̄, ovvero bz̄c. Ad esempio, in P1 il limite è b 51 c = 12. 4 N.B. L’albero decisionale riportato in Fig. 1 contiene la rappresentazione grafica di ogni sottoproblema ad ogni nodo per maggiore chiarezza didattica. In sede di esame risulterà più chiaro per il correttore vedere l’albero decisionale separato dalla rappresentazione grafica del problema. 4.9 Branch-and-Bound applicato al problema dello Zaino. Formuliamo il problema come segue: min 16x1 + 22x2 + 12x3 + 8x4 5x1 + 7x2 + 4x3 + 3x4 ≤ 14 x1 , x 2 , x 3 , x 4 ∈ {0, 1}. Per trovare una soluzione al rilassamento lineare, ordiniamo i rapporti tra il costo e la spesa degli investimenti: (16/5, 22/7, 12/4, 8/3) = (3.2, 3.14, 3, 2.66) In pratica, l’investimento 1 è il più proficuo a parità di spesa, a cui seguono 2,3,4 in ordine. Prendiamo adesso frazioni dei vari investimenti in modo da rispettare il Documento preparato da: Leo Liberti 3 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 (1) Prof. E. Amaldi (2) P1: x̄ = (1) ∩ (2) x̄2 = −2x̄1 + 6 x̄2 = − 23 x̄1 + 3 x̄ = 49 , 32 , z̄ = 51 . 4 x2 ≤ 1 x2 ≥ 2 (3) (3) (2) (1) (1) P2: x̄ = (1) ∩ (3) x̄2 = −2x̄1 + 6 x̄2 = 1 . x̄ = 52 , 1 , z̄ = 23 2 (2) P3: x̄ = (2) ∩ (3) x̄2 = − 23 x̄1 + 3 x̄2 = 2 x̄ = 23 , 2 , z̄ = 25 . 2 x1 ≤ 1 x1 ≥ 2 11.5 < 12: stop (3) (3) (1) (2) (1) (4) (2) (4) P4: x̄ = (2) ∩ (4) x̄2 = − 23 x̄1 + 3 x̄1 = 1 x̄ = 1, 37 , z̄ = 37 . 3 x2 ≤ 2 x2 ≥ 3 P5: inammissibile (3) (3) (1) (2) (4) (1) (2) (4) P6: x̄ = (3) ∩ (4) P7: x̄ = (2) ∩ (3) x̄ = (1, 2), z̄ = 11. x̄ = (0, 3), z̄ = 12. Figura 1: Branch-and-Bound applicato al problema 4.8. vincolo di zaino e in modo da accrescere prima le variabili relative agli investimenti più redditizi secondo l’ordine specificato. Per esempio, al nodo 1 avremo: x 1 = 1 Documento preparato da: Leo Liberti 4 Soluzioni 4.7-4.10 Fondamenti di Ricerca Operativa Prof. E. Amaldi (impegna 5 milioni di euro), x2 = 1 (impegna 7 milioni di euro), x3 = 12 impegna 4/2=2 milioni di euro. In tutto abbiamo 5 + 7 + 2 = 14, che è pari al budget. Dato che in un Branch-and-Bound applicato a un problema con variabili binarie i vincoli aggiunti ad ogni nodo sono della forma xi = di , con di ∈ {0, 1}, questo metodo greedy funziona ad ogni nodo dell’albero decisionale: è sufficiente fissare al valore di le variabili xi per cui esiste un vincolo aggiunto di Branch-and-Bound. L’albero decisionale è riportato in Fig. 2. • L’indice t indica l’ordine di risoluzione dei problemi. • Calcolo del limite superiore. Ad ogni nodo si risolve il sottoproblema rilassato per mezzo del metodo greedy descritto sopra. Se la soluzione z̄ del sottoproblema rilassato è frazionaria, dato che i coefficienti della funzione obiettivo sono interi e la soluzione del problema deve essere intera, possiamo considerare bz̄c come limite superiore effettivo (“upper bound”). • Calcolo del limite inferiore. Il limite inferiore (“lower bound”, indicato con LB in Fig. 2) serve a elaborare senza ricorrere al branching quei sottoproblemi in cui si abbia z̄ ≤ LB (cioè il cui limite superiore non è maggiore del limite inferiore trovato finora, che sicuramente non possono dar luogo alla soluzione ottima). Mentre il limite superiore si calcola ad ogni nodo, il limite inferiore viene inizializzato a +∞ e aggiornato durante lo svolgimento dell’algoritmo: ogni volta che un sottoproblema dà luogo a una soluzione intera, se il valore della funzione obiettivo z̄ è maggiore di LB, allora si aggiorna LB← z̄. Ad esempio, nel sottoproblema 4 si trova una soluzione intera con z̄ = 36; dato che è la prima trovata, LB era ancora inizializzato a +∞ e quindi viene aggiornato a LB= 36. • Al sottoproblema 6 si trova una soluzione intera con z̄ = 42, quindi LB = 42. Pertanto il sottoproblema 4 è elaborato senza bisogno di branching. • Il sottoproblema 7 è inammissibile perché se x̄1 = x̄2 = x̄3 = 1 allora il valore del vincolo diventa 16. • Il sottoproblema 8 è elaborato senza branching perché z̄ = 38 è minore del LB corrente (42). • Al sottoproblema 9 si ha z̄ = 42 67 ; per quanto detto sopra, il limite superiore effettivo è dato da bz̄c = 42 che non è superiore al LB corrente (42). Dunque anche il sottoproblema 9 è elaborato senza branching. A questo punto l’algoritmo termina e la soluzione intera x∗ = (0, 1, 1, 1) corrispondente al valore corrente di LB=42 è quella ottima. 4.10 Algoritmo dei Piani di Taglio. Nell’algoritmo dei piani di taglio si utilizza il metodo del simplesso duale, inizialmente applicato al rilassamento continuo del problema di PLI. Dato che il metodo del simplesso risolve un problema di PL in forma standard, innanzitutto mettiamo il rilassamento continuo in forma standard, Documento preparato da: Leo Liberti 5 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 1 t=1 z̄ = 44 x̄1 = x̄2 = 1 x̄3 = 1/2 LB= +∞ x3 = 1 x3 = 0 2 z̄ = 43 31 t = 7 x̄1 = x̄2 = 1 x̄3 = 0, x̄4 = LB = 42 x4 = 0 8 z̄ = 38 x̄1 = x̄2 = 1 x̄3 = x̄4 = 0 LB = 42 t=8 Prof. E. Amaldi 3 t=2 2 3 x4 = 1 z̄ = 43 75 x̄1 = x̄3 = 1 x̄2 = 57 , x̄4 = 0 LB= +∞ x2 = 0 9 z̄ = 42 67 x̄1 = x̄4 = 1 x̄2 = 67 , x̄3 = 0 LB = 42 z̄ = 36 x̄1 = x̄3 = 1 x̄2 = 0, x̄4 = 1 LB = 36 x2 = 1 4 5 z̄ = 43 35 x̄1 = 35 , x̄4 = 0 x̄2 = x̄3 = 1 LB=36 t=3 x1 = 0 t=9 6 z̄ = 42 x̄1 = 0 x̄2 = x̄3 = x̄4 = 1 LB=42, Ottimo t=5 t=4 x1 = 1 7 Non ammissibile t=6 Figura 2: Albero decisionale per il problema 4.9. ottenendo: min x1 − 2x2 −4x1 + 6x2 + x3 = 9 x1 + x 2 + x 4 =4 x1 , x 2 , x 3 , x 4 ≥ 0, dove x3 , x4 sono variabili di scarto. Tramite il metodo del simplesso1 applicato alla base ammissibile xB = (x3 , x4 ), si ottiene la seguente successione di tableaux (l’elemento pivot è evidenziato con p ): 1 Sebbene in seguito basti effettuare, dopo l’aggiunta di ogni singolo taglio, un’unica iterazione del simplesso duale, in questo caso per determinare la soluzione ottima del rilassamento continuo iniziale si può applicare senza la prima fase il metodo del simplesso primale poiché è immediatamente disponibile una soluzione di base ammissibile iniziale. Documento preparato da: Leo Liberti 6 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 0 9 4 x1 1 -4 1 x2 -2 6 1 x3 0 1 0 x4 0 0 1 3 3 2 5 2 x1 − 13 − 23 x2 0 1 0 5 3 x3 1 3 1 6 − 16 x4 0 0 1 Prof. E. Amaldi 7 2 5 2 3 2 x1 0 0 1 x2 0 1 0 x3 x4 3 10 1 10 1 − 10 1 5 2 5 3 5 Dunque la soluzione ottima del rilassamento è x̄ = ( 32 , 52 ), con le variabili di scarto x3 = x4 = 0 (si veda anche la Fig. 3). Dal tableau ottimo, deriviamo un taglio di x̄ (1) (2) PSfrag replacements Figura 3: Soluzione grafica del rilassamento del problema 4.10. Gomory dalla prima riga x2 + + 52 x4 = 52 . Il taglio di Gomory è espresso come X xi + bāij cxj ≤ bb̄i c, (1) 1 x 10 3 j∈F dove F è l’insieme di indici delle variabili fuori base e i è l’indice della riga scelta. In questo caso, otteniamo x2 ≤ 2. Bisogna adesso svolgere l’operazione di orlatura: cioè, il taglio di Gomory x 2 ≤ 2 va introdotto nel tableau ottimo per poter effettuare un’altra iterazione del metodo del simplesso. Dato che inserendo un taglio valido la base corrente cessa di essere ammissibile primale, bisogna utilizzare l’algoritmo del simplesso duale. Prima, tuttavia, è necessario esprimere x2 ≤ 2 in funzione delle variabili fuori base x3 , x4 . Se dall’i-esima riga del tableau ottimale X xi + āij xj = b̄i j∈F sottraiamo (1) otteniamo la seguente forma frazionaria del taglio di Gomory: X (āij − bāij c)xj ≥ (b̄i − bb̄i c), j∈F Documento preparato da: Leo Liberti 7 Soluzioni 4.7-4.10 Fondamenti di Ricerca Operativa Prof. E. Amaldi che applicata al caso in questione diventa: 2 1 1 x3 + x4 ≥ . 10 5 2 Dato che l’algoritmo del simplesso prevede soltanto l’utilizzo di vincoli in forma di equazione, sottraiamo una variabile di surplus x5 ≥ 0 e otteniamo 1 2 1 x3 + x4 − x 5 = . 10 5 2 Dato che la nuova variabile x5 compare soltanto nel taglio di Gomory, essa può entrare in base (i coefficienti di x5 negli altri vincoli e nella f.o. saranno 0); moltiplichiamo dunque il taglio per -1 affinché il coefficiente di x5 risulti 1: − 2 1 1 x3 − x4 + x 5 = − . 10 5 2 In questa forma, il vincolo può essere aggiunto al tableau ottimo ottenuto in precedenza. Otteniamo cosı̀ un nuovo tableau con una riga e una colonna aggiuntive, corrispondenti rispettivamente al nuovo taglio e alla nuova variabile, che viene inserita nella base: 7 2 5 2 3 2 x1 0 0 1 x2 0 1 0 − 21 0 0 x3 x4 3 10 1 10 1 − 10 1 − 10 1 5 2 5 3 5 x5 0 0 0 − 25 1 La nuova riga corrisponde, come abbiamo detto, al taglio di Gomory x 2 ≤ 2, indicato in Fig. 4 come vincolo (3). Eseguiamo adesso un’iterazione dell’algoritmo del simplesso duale usando il tableau orlato. I costi ridotti sono tutti non-negativi, ma b̄3 = − 21 < 0 implica che x5 = b̄3 ha valore negativo, e dunque non è ammissibile primale (si ricordi che x5 ≥ 0 è un vincolo del problema). Scegliamo quindi l’indice r = 5 affinché x5 esca dalla base. La variabile che entra in base è data dall’indice s, dove c̄j c̄s = min{ | j ≤ n, ārj < 0}. |ārs | |ārj | In questo caso il minimo in {3, 21 } è 21 , che corrisponde all’indice s = 4; dunque x4 entra in base al posto di x5 , e l’elemento pivot è quello indicato nel tableau orlato sopra. Otteniamo il tableau seguente 13 4 2 3 4 5 4 Documento preparato da: Leo Liberti x1 0 0 1 0 x2 0 1 0 0 x3 1 4 0 − 14 1 4 x4 0 0 0 1 x5 1 2 1 3 2 − 52 8 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 Prof. E. Amaldi x̄ x̃ (3) (1) (2) PSfrag replacements Figura 4: Primo taglio di Gomory generato per 4.10. con soluzione ottima x̃ = ( 43 , 2). La soluzione non è ancora intera, dunque scegliamo la seconda riga del tableau: 1 3 3 x1 − x3 + x5 = , 4 2 4 da cui otteniamo un taglio di Gomory x1 − x3 + x5 ≤ 0 che nello spazio delle variabili originali x1 , x2 è −3x1 + 5x2 ≤ 7. La versione frazionaria del taglio di Gomory menzionato sopra è 3 1 3 x3 + x5 ≥ . 4 2 4 L’operazione di orlatura produce il tableau seguente: 13 4 2 3 4 5 4 − 34 x1 0 0 1 0 0 x2 0 1 0 0 0 x3 x4 0 0 0 1 0 1 4 0 − 14 1 4 − 34 x5 x6 0 0 0 0 1 1 2 1 3 2 − 52 − 12 dove è evidenziato l’elemento pivot (la riga 4 è stata selezionata perché b̄4 < 0, la colonna 5 perché |āc̄433 | = 31 < 1 = |āc̄455 | ). L’operazione pivot produce il tableau sotto, 3 2 1 1 1 Documento preparato da: Leo Liberti x1 0 0 1 0 0 x2 0 1 0 0 0 x3 0 0 0 0 1 x4 0 0 0 1 0 x5 x6 1 3 1 3 1 5 3 0 − 13 2 3 − 43 − 83 1 3 9 Fondamenti di Ricerca Operativa Soluzioni 4.7-4.10 Prof. E. Amaldi che corrisponde alla soluzione ottima intera x∗ = (1, 2) evidenziata in Fig. 5 (assieme all’ultimo taglio di Gomory aggiunto). (4) x̄ x̃ (1) PSfrag replacements x∗ (3) (2) Figura 5: Ultimo taglio di Gomory generato dall’algoritmo sul problema 4.10. Documento preparato da: Leo Liberti 10