Esercizio 1 Risolvere il seguente problema di knapsack utilizzando l

Transcript

Esercizio 1 Risolvere il seguente problema di knapsack utilizzando l
Esercizio 1 Risolvere il seguente problema di knapsack utilizzando l’algoritmo di Branch&Bound (cfr.
pag.201-206 del libro di Chvatal).
max 9y1 + 23y2 + 16y3
3y1 + 7y2 + 5y3 ≤ 16
y1 , y2 , y3 ∈ Z+
Svolgimento. Innanzitutto rinominiamo le variabili, ponendo x1 = y2 , x2 = y3 , x3 = y1 .
max 23x1 + 16x2 + 9x3
7x1 + 5x2 + 3x3 ≤ 16
x1 , x2 , x3 ∈ Z+
In questo modo le variabili sono ordinate in modo decrescente rispetto al rapporto utilità/ingombro.
Svolgiamo l’algoritmo di Branch&Bound (N.B. per rapidità non disegno l’albero di enumerazione,
ma è molto conveniente farlo).
La prima soluzione computata è x1 = 2, x2 = 0, x3 = 0. Il valore della funzione obiettivo su questo
punto è 46.
Il prossimo ramo di esplorazione è quello con x1 = 1. Prima di andare avanti con l’esplorazione
valutiamo un upper bound U sul valore di una soluzione con x1 = 1: U = 23 + (16 − 7) 16
5 = 51.8. Poiché
51.8 è maggiore del nostro ottimo corrente 46, il ramo di esplorazione è promettente e andiamo avanti:
la prossima soluzione computata è quindi: x1 = 1, x2 = 1, x3 = 1. Il valore della funzione obiettivo su
questo punto è 48: aggiorniamo quindi il nostro ottimo corrente!
Il prossimo ramo di esplorazione è quello con x1 = 1 e x2 = 0. Prima di andare avanti con l’esplorazione
valutiamo un upper bound U sul valore di una soluzione con x1 = 1 e x2 = 0: U = 23 + (16 − 7) 93 = 50.
Poiché 50 è maggiore del nostro ottimo corrente 48, il ramo di esplorazione è promettente e andiamo
avanti: la prossima soluzione computata è quindi: x1 = 1, x2 = 0, x3 = 3. Il valore della funzione obiettivo
su questo punto è 50: aggiorniamo quindi il nostro ottimo corrente!
Il prossimo ramo di esplorazione è quello con x1 = 0. Prima di andare avanti con l’esplorazione
valutiamo un upper bound U sul valore di una soluzione con x1 = 0: U = 16 16
5 = 51.2. Poiché 51.2
è maggiore del nostro ottimo corrente 50, il ramo di esplorazione è promettente e andiamo avanti: la
prossima soluzione computata è quindi: x1 = 0, x2 = 3, x3 = 0. Il valore della funzione obiettivo su
questo punto è 48, peggiore del nostro ottimo corrente.
Il prossimo ramo di esplorazione è quello con x1 = 0 e x2 = 2. Prima di andare avanti con l’esplorazione
valutiamo un upper bound U sul valore di una soluzione con x1 = 0 e x2 = 2: U = 32 + (16 − 10) 39 = 50.
Poiché 50 non è maggiore del nostro ottimo corrente 50, possiamo chiudere questo ramo di esplorazione.
Il prossimo ramo di esplorazione è quello con con x1 = 0 e x2 = 1. Innanzitutto valutiamo un upper
bound U sul valore di una soluzione con x1 = 0 e x2 = 1: U = 16 + (16 − 5) 39 = 49. Poiché 49 non è
maggiore del nostro ottimo corrente 50, possiamo chiudere questo ramo di esplorazione.
Il prossimo ramo di esplorazione è quello con con x1 = 0 e x2 = 0. Innanzitutto valutiamo un upper
bound U sul valore di una soluzione con x1 = 0 e x2 = 0: U = 16 39 = 48. Poiché 48 non è maggiore del
nostro ottimo corrente 50, possiamo chiudere questo ramo di esplorazione.
A questo punto l’esplorazione è terminata e concludiamo che x1 = 1, x2 = 0, x3 = 3 è una soluzione
ottima.
1