Fondamenti di Ricerca Operativa Esercizi sulla Programmazione

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