Esercizio 5.2.6

0 passi visti su 5

Consegna

Si supponga di voler caricare uno zaino di capacità massima di 17 kg avendo a disposizione 4 oggetti diversi con peso e profitto riportati nella seguente tabella:

OggettoPeso (in kg)Profitto (in euro)
1840
2624
3515
448
  1. Si descriva il modello matematico del problema dello zaino frazionario con riferimento al problema descritto e lo si risolva trovandone una soluzione ottima;
  2. Si descriva il modello matematico del problema dello zaino 0/1 con riferimento al problema descritto e lo si risolva trovandone una soluzione ottima tramite applicazione di (a) un algoritmo di Programmazione Dinamica; (b) un algoritmo Branch & Bound.
0Modelloapri

Con xjx_j la parte dell'oggetto jj che si carica:

max⁡ 40x1+24x2+15x3+8x4s.a. 8x1+6x2+5x3+4x4≤17\begin{aligned} \max\ & 40x_1 + 24x_2 + 15x_3 + 8x_4 \\ \text{s.a.}\ & 8x_1 + 6x_2 + 5x_3 + 4x_4 \le 17 \end{aligned}

Nel frazionario 0≤xj≤10 \le x_j \le 1; nello zaino 0/1 xj∈{0,1}x_j \in \{0, 1\}.

1Zaino frazionarioapri

I rapporti valgono 5, 4, 3 e 2: gli oggetti sono già in ordine. Entrano 1 e 2 (14 kg), restano 3 kg e l'oggetto 3 è critico: x3=35x_3 = \frac{3}{5}.

Soluzione x=(1,1,35,0)x = (1, 1, \frac{3}{5}, 0) con z=40+24+9=73z = 40 + 24 + 9 = 73.

2Programmazione dinamicaapri
mm \ W^\hat W0-34567891011121314151617
0000000000000000
10000040404040404040404040
2000242440404040404064646464
30015242440404040405564646464
40815242440404040485564646464

Si risale da f4,17=64f_{4,17} = 64: f4,17=f3,17f_{4,17} = f_{3,17} e f3,17=f2,17f_{3,17} = f_{2,17} danno x4=x3=0x_4 = x_3 = 0; f2,17≠f1,17f_{2,17} \ne f_{1,17} e f1,11≠f0,11f_{1,11} \ne f_{0,11} danno x2=x1=1x_2 = x_1 = 1.

3Branch & Boundapri

Visita in profondità, prima il ramo xj=0x_j = 0. I nodi nell'ordine in cui si visitano:

NodoVariabili fissateBoundEsito
Z1Z_1nessuna73si ramifica su x3x_3
Z2Z_2x3=0x_3 = 070si ramifica su x4x_4
Z4Z_4x3=0x_3 = 0, x4=0x_4 = 064intero: zopt=64z_{\mathrm{opt}} = 64
Z5Z_5x3=0x_3 = 0, x4=1x_4 = 168si ramifica su x2x_2
Z6Z_6x2=0x_2 = 0, x3=0x_3 = 0, x4=1x_4 = 148chiuso, 48≤6448 \le 64
Z7Z_7x2=1x_2 = 1, x3=0x_3 = 0, x4=1x_4 = 167si ramifica su x1x_1
Z8Z_8x1=0x_1 = 0, x2=1x_2 = 1, x3=0x_3 = 0, x4=1x_4 = 132chiuso
Z9Z_9x1=1x_1 = 1, x2=1x_2 = 1, x3=0x_3 = 0, x4=1x_4 = 1inammissibile (18 kg)
Z3Z_3x3=1x_3 = 171si ramifica su x2x_2
Z10Z_{10}x2=0x_2 = 0, x3=1x_3 = 163chiuso
Z11Z_{11}x2=1x_2 = 1, x3=1x_3 = 169si ramifica su x1x_1
Z12Z_{12}x1=0x_1 = 0, x2=1x_2 = 1, x3=1x_3 = 147chiuso
Z13Z_{13}x1=1x_1 = 1, x2=1x_2 = 1, x3=1x_3 = 1inammissibile (19 kg)
4Soluzioneapri

Lo zaino 0/1 ha ottimo x=(1,1,0,0)x = (1, 1, 0, 0), trovato nel nodo Z4Z_4, con z=64z = 64; l'albero ha 13 nodi.