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