Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
– p. 1/1
Upper bound U (S)
Cominciamo con il calcolare l’upper bound U (S) su tutta la
regione ammissibile S .
– p. 2/1
Risoluzione del rilassamento lineare
Riordinare, eventualmente, gli oggetti in modo non
crescente rispetto ai rapporti valore/peso pvii , cioè si
abbia che:
v1 v2 vn
≥ ≥ ··· ≥ .
p1 p2 pn
– p. 3/1
Si calcolino i valori
b − p1
b − p1 − p2
.
.
.
– p. 4/1
Soluzione rilassamento lineare
La soluzione ottima del rilassamento lineare è la seguente
x1 = x2 = · · · = xr = 1
Pr
b − j=1 pj
xr+1 =
pr+1
xr+2 = xr+3 = · · · = xn = 0
ed ha il valore ottimo
Pr
X
r
b− j=1 pj
vj + vr+1 .
pr+1
j=1
– p. 5/1
Soluzione ammissibile
Notiamo anche che la soluzione
x1 = x2 = · · · = xr = 1
xr+1 = xr+2 = xr+3 = · · · = xn = 0
– p. 6/1
Sottinsiemi di S di forma particolare
Consideriamo sottinsiemi di S con questa forma:
S(I0 , I1 ) = {N ∈ S : l’oggetto i 6∈ N ∀ i ∈ I0 ,
l’oggetto i ∈ N ∀ i ∈ I1 }
dove I0 , I1 ⊆ {1, . . . , n} e I0 ∩ I1 = ∅.
– p. 7/1
Nota bene
Si ha che
S = S(∅, ∅),
cioè la regione ammissibile del problema può essere vista
come caso particolare di sottinsieme di forma S(I0 , I1 ) con
I0 = I1 = ∅.
– p. 8/1
Upper bound per tali sottinsiemi
Il nostro originario problema KN AP SACK ristretto al
sottinsieme S(I0 , I1 ) si presenta nella seguente forma:
P P P
max i∈I0 vi xi + i∈I1 vi xi + i∈If vi xi
P P P
i∈I0 pi xi + i∈I1 pi xi + i∈If pi xi ≤ b
xi ∈ {0, 1} ∀ i ∈ If
da cui:
P P
max i∈I1 vi + i∈If v i xi
P P
i∈If p i xi ≤ b − i∈I1 pi
xi ∈ {0, 1} ∀ i ∈ If
– p. 9/1
Continua
Possiamo notare che si tratta ancora di un problema di tipo
KN AP SACKP dove è presente una quantità costante
nell’obiettivo ( i∈I1 vi ), dove lo zaino ha ora capacità
P
b − i∈I1 pi e dove l’insieme di oggetti in esame è ora
ristretto ai soli oggetti in If .
– p. 10/1
Procedura di calcolo
P
Passo 1 Se b − i∈I1 pi < 0, il nodo non contiene
soluzioni ammissibili (gli oggetti in I1 hanno già un peso
superiore alla capacità b dello zaino). In tal caso ci si
arresta e si pone
U (S(I0 , I1 )) = −∞
– p. 11/1
Continua
P Altrimenti, si sottraggano successivamente a
Passo 2
b − i∈I1 pi i pesi degli oggetti in If nell’ordine dato
arrestandoci se
Caso A si arriva ad un valore negativo, ovvero esiste
r ∈ {1, . . . , k − 1} tale che
X
b− pi − pi1 − · · · − pir ≥ 0
i∈I1
ma X
b− pi − pi1 − · · · − pir − pir+1 < 0.
i∈I1
xi 1 = xi 2 = · · · = xi r = 1
P Pr
b − i∈I1 pi − j=1 pij
xir+1 =
pir+1
xir+2 = xir+3 = · · · = xik = 0
Caso B:
xi 1 = xi 2 = · · · = xi k = 1
– p. 13/1
Passo 3 Output caso A:
P Pr
X X
r
b− i∈I1 pi − h=1 pih
U (S(I0 , I1 )) = vi + vih + vir+1 × .
i∈I1 h=1
pir+1
X X
r
N = I1 ∪ {i1 , . . . , ir } con f (N ) = vi + vih
i∈I1 h=1
Output caso B:
X X
k
U (S(I0 , I1 )) = vi + vih .
i∈I1 h=1
X X
k
N = I1 ∪ If , con f (N ) = U (S(I0 , I1 )) = vi + vih
i∈I1 h=1
– p. 14/1
Nota bene
Nel caso B il sottinsieme S(I0 , I1 ) verrà sicuramente
cancellato. Infatti in tal caso si ha:
U (S(I0 , I1 )) = f (N ) ≤ LB,
– p. 15/1
Branching
Vediamo ora di descrivere l’operazione di branching.
Dapprima la descriviamo per l’insieme S e poi l’estendiamo
agli altri sottinsiemi generati dall’algoritmo.
– p. 16/1
Continua
La regola di branching prescrive di suddividere S nei due
sottinsiemi
– p. 17/1
Estensione
Quanto visto per l’insieme S può essere esteso a tutti i
sottinsiemi di forma S(I0 , I1 ): dato un tale sottinsieme,
l’oggetto ir+1 che appare nel calcolo dell’upper bound nel
caso A viene aggiunto in I0 in un sottinsieme della
partizione di S(I0 , I1 ) e in I1 nell’altro sottinsieme, ovvero la
partizione di S(I0 , I1 ) sarà data dai seguenti sottinsiemi
– p. 18/1