Parte III Algoritmo di branch-and-bound

92
Parte III Algoritmo di branch-and-bound

Transcript of Parte III Algoritmo di branch-and-bound

Page 1: Parte III Algoritmo di branch-and-bound

Parte III Algoritmo di branch-and-bound

Page 2: Parte III Algoritmo di branch-and-bound

Divide et Impera

Sia z* = max {cTx : x ∈ S} (1)un problema di OC difficile da risolvere

Domanda Voglio decomporre il problema (1) in una collezione di

problemi tali che

1. Ogni nuovo problema sia facile da risolvere2. Le informazioni che ottengo risolvendo la collezione

di problemi mi indicano la sol. ottima di (1)

Page 3: Parte III Algoritmo di branch-and-bound

Un semplice teoremino

Sia S = S1 ∪ S2 ∪.. ∪ Sk una decomposizione della regione ammissibile S in k insiemi

TeoremaSe zh = max {cTx : x ∈ Sh} allora z* = maxh zh

AttenzioneNon ho richiesto che Si ∩ Sj = ∅, ovvero che la

decomposizione sia una partizione, ma non ho escluso che possa essere una partizione!

Page 4: Parte III Algoritmo di branch-and-bound

Un esempio

Consideriamo S = {0,1}3

S

S0

x1=0

S1

x1=1

S00

x2=0

S01

x2=1

S10

x2=0

S11

x2=1

S000

x3=0

S001

x3=1

S010

x3=0

S011

x3=1

S100

x3=0

S101

x3=1

S110

x3=0

S111

x3=1

Page 5: Parte III Algoritmo di branch-and-bound

Attenzione…

Stiamo semplicemente enumerando TUTTI gli insiemi ammissibili!!!!

Per un problema di OC conosciamo bound“primali” e “duali”

Domanda

Possiamo utilizzare questi bound per enumerare in modo più efficace?

Page 6: Parte III Algoritmo di branch-and-bound

Altro teoremino

Sia S = S1 ∪ S2 ∪.. ∪ Sk una decomposizione della regione ammissibile S in k insiemi.

Sia zk = max {cTx : x ∈ Sk}

Se zkLB e zk

UB sono rispettivamente un lower e un upper bound per zk

AllorazUB = maxk zk

UB è un upper bound per z*

zLB = maxk zkLB è un lower bound per z*

Page 7: Parte III Algoritmo di branch-and-bound

Potatura per ottimalità

SzUB= 27

zLB=13

S0

x1=0

z 0UB= 20

z 0LB=20S1

x1=1

z 1UB= 25

z 1LB=15

zUB= 25

zLB=20

Page 8: Parte III Algoritmo di branch-and-bound

Potatura per bound

SzUB= 27

zLB=13

S0

x1=0

z 0UB= 20

z 0LB=18S1

x1=1

z 1UB= 26

z 1LB=21

zUB= 26

zLB=21

Page 9: Parte III Algoritmo di branch-and-bound

Potatura per inammissibilità

SzUB= 27

zLB=13

S0

x1=0

z 0UB= 20

z 0LB=18S1

x1=1

S1=∅

zUB= 27

zLB=18

Page 10: Parte III Algoritmo di branch-and-bound

Nessuna potatura

SzUB= 40

zLB=0

S0

x1=0

z 0UB= 20

z 0LB=18S1

x1=1

z 1UB= 37z 1LB= 0

zUB= 37

zLB=18

Page 11: Parte III Algoritmo di branch-and-bound

Ricapitolando…

Enumero un insieme di soluzioni “implicitamente”perché “poto” rami dell’albero per:

1. Inammissibilità2. Bound3. Ottimalità

Indichiamo con L la lista dei sottoproblemi e con Pi la formulazione del sottoproblema Si.

L’algoritmo ha il seguente diagramma di flusso:

Page 12: Parte III Algoritmo di branch-and-bound

Branch-and-Bound

Caso 3: OttimalitàSe Pi ≠ ∅ e la soluzione ottima xi

UBdel RL è intera, allora elimina Si. Se zi

UB > zLB allora zLB =ziUB, vai a Test

Individua una componente frazionaria kdi xi

UB e ramifica Si aggiungendo ad LScount+1 = Si ∩ {xk= 0}Scount+2 = Si ∩ {xk= 1}count = count + 2

Caso 2: BoundSe Pi ≠ ∅, sia zi

UB il valore della soluzione ottima xi

UB del RL. Se zi

UB < zLB elimina Si per bound, vai a Test

InizializzazioneL=S, zLB = - ∞count = 0;

Test: L = ∅?

Scegli un problema Sidalla lista

Risolvi il Rilassamento Lineare su Pi

Caso 1: InammissibilitàSe Pi = ∅ elimina Si per inammissibilità, vai a Test

Page 13: Parte III Algoritmo di branch-and-bound

Esempio

Consideriamo il problema di knapsackmax 9 x1 + 15 x2 + 8 x3 + 6 x4 + 5 x5 + 4 x6 + x7

6 x1 + 11 x2 + 6 x3 + 5 x4 + 5 x5 + 4 x6 + x7 < 19 (1)x ∈ {0,1}7

La soluzione ottima del rilassamento lineare èx 0UB = (1, 1, 1/3, 0, 0, 0, 0) di valore 26.666 (UB)Possiamo anche inizializzare il LB con la soluzione ammissibile xLB = (1, 1, 0, 0, 0, 0, 1) di valore 25

OsservazionePoiché la f.o. ha coefficienti interi, possiamo scrivere la condizionedi potatura per bound (caso 2) come ⎣zi

UB⎦ < zLB

Page 14: Parte III Algoritmo di branch-and-bound

10

8

1211

4

z 4UB= 25.91x 4UB = (1, 0.727, 0, 1, 0, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 0UB= 26.66 x 0UB = (1, 1, 0.33, 0, 0, 0, 0)z LB= 25x LB= (1, 1, 0, 0, 0, 0, 1)

z 1UB= 26.4 x 1UB = (1, 1, 0, 0.4, 0, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1) z 2UB= 26.654

x 2UB = (1, 0.636, 1, 0, 0, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)z 3UB= 26

x 3UB = (1, 1, 0, 0, 0.4, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 5UB= 25x 5UB = (1, 0, 1 , 1, 0.4, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 6UB= 26x 6UB = (0.33, 1, 1, 0, 0, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 7UB= 26x 7UB = (1, 1, 0, 0, 0, 0.5, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1) z 8UB= 24.91

x 8UB = (1, 0.727, 0, 0, 1, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 9UB= 25.4x 9UB = (0, 1, 1, 0.4, 0, 0, 0)z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 10UB= ∅

x 10UB = (1, 1, 1, 0, 0, 0, 0)

z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

0

1

3

7

2

5

9

6

Esempio

z 11UB= 25

x11UB = (1, 1, 0, 0, 0, 0, 1)

z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1)

z 12UB= 25.27

x 12UB = (1, 0.81, 0, 0, 0, 1, 0)

z LB = 25x LB = (1, 1, 0, 0, 0, 0, 1) N.B. In rosso le variabili fissate

Page 15: Parte III Algoritmo di branch-and-bound

Parte IV: Programmazione dinamica

Page 16: Parte III Algoritmo di branch-and-bound

Esempio

Consideriamo il problema di knapsack:

max 6 x1 + 10 x2 + 12 x3x1 + 2x2 + 3 x3 < 5 (1)x ∈ {0,1}3

La soluzione ottima è x*(1) = (0, 1, 1), di valore 22. Consideriamo il problema che si ottiene eliminando l’oggetto 2 e

diminuendo il rhs del corrispondente ingombro:

max 6 x1 + 12 x3x1 + 3 x3 < 5 – 2 = 3 (2)x ∈ {0,1}2

La soluzione ottima è x*(2)=(0, 1), di valore 12.

OsservazioneLa soluzione x*(2)= (0, 1) è una “sottosoluzione” di x*(1) = (0, 1, 1), ovvero si

ottiene da x*(1) semplicemente eliminando la variabile x2

Page 17: Parte III Algoritmo di branch-and-bound

Programmazione Dinamica

Schema di principioDato un problema di OC, S, la Programmazione Dinamica (PD):

1. Risolve un sottoproblema di S all’ottimo2. Iterativamente “estende” la soluzione ad S

Proprietà fondamentale (optimal substructure)

Sia KP (N, b) un problema di knapsack con soluzione ottima x*.

Consideriamo il problema di knapsack KP(N \ r, b - ar) che si ottiene da KP eliminando un qualsiasi oggetto r e diminuendo la capacità dello zaino della quantità ar.

La soluzione ottima di KP(r, b - ar) è costituita da x*\xr .

Page 18: Parte III Algoritmo di branch-and-bound

Notazione

Siano m e d due interi tali che 1 ≤ m ≤ n, 0 ≤ d ≤ bSia KP (m, d) il problema di knapsack:

KP (m, d) è un sottoproblema di KP, avente soluzione ottima di valore zm(d).

{ }m

m

jjj

m

jjj

x

dxa

xc

1,0

max

1

1

≤∑

=

=

Page 19: Parte III Algoritmo di branch-and-bound

Programmazione dinamica

Con questo formalismo, il valore della soluzione ottima di KP vale zn(b).

Calcolo di zn(b)

1. Calcolo zm(d) per m = {1, …, n}2. Per ogni m, calcolo zm(d) per d = {0, …, b}

Osservazionezm(d) si calcola in modo ricorsivo se conosco i valori zm-1(d) per d = {0, …, b}

Page 20: Parte III Algoritmo di branch-and-bound

Formula ricorsiva

Condizione iniziale di ricorsione

( )⎩⎨⎧

≥<

=11

11

0adpercadper

dz

Questa condizione implica:

Se z1(d) = 0 ⇒ x1 = 0

Se z1(d) = c1 ⇒ x1 = 1

Page 21: Parte III Algoritmo di branch-and-bound

Formula ricorsiva

Formula di ricorsione

{ }⎩⎨⎧

≥<

+−=

−−

m

m

mmmm

mm ad

adcadzdz

dzdz

se se

)(),(max)(

)(11

1

La formula implica:

Se zm(d) = zm-1(d) ⇒ xm = 0 [l’oggetto m NON è stato scelto]

Se zm(d) = zm-1(d-am) + cm⇒ xm = 1 [l’oggetto m Èstato scelto]

Page 22: Parte III Algoritmo di branch-and-bound

Esempio

max 6 x1 + 10 x2 + 12 x3

x1 + 2x2 + 3 x3 < 5 (KP)x ∈ {0,1}3

Calcoliamo la formula di ricorsione per m = 1z1(0) = 0 ⇒ x1= 0z1(1) = 6 ⇒ x1 = 1z1(2) = 6 ⇒ x1 = 1z1(3) = 6 ⇒ x1 = 1z1(4) = 6 ⇒ x1 = 1z1(5) = 6 ⇒ x1 = 1

Page 23: Parte III Algoritmo di branch-and-bound

Esempio

Rappresentiamo questi valori in una tabella di dimensione n × b, in cui ogni elemento contiene zm(d).Il simbolo * nella soluzione indica che la variabile non è stata ancora fissata

dm 0 1 2 3 4 5

1

(0,*,*)

0(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6

2 z2(0) z2(1) z2(2) z2(3) z2(4) z2(5)

3 z3(0) z3(1) z3(2) z3(3) z3(4) z3(5)

Page 24: Parte III Algoritmo di branch-and-bound

Esempio

Calcoliamo ora z2(d):

Per d = {0, 1}z2(0) = z1(0) = 0 ⇒ x2= 0z2(1) = z1(1) = 6 ⇒ x2= 0

Per d = {2, 3, 4, 5}z2(2) = max {z1(2), z1(0) + c2} = max{6, 10} = 10 ⇒x2 = 1 z2(3) = max {z1(3), z1(1) + c2} = max{6, 16} = 16 ⇒x2 = 1 z2(4) = max {z1(4), z1(2) + c2} = max{6, 16} = 16 ⇒x2 = 1 z2(5) = max {z1(5), z1(3) + c2} = max{6, 16} = 16 ⇒x2 = 1

Riportando questi valori in tabella si ha:

Page 25: Parte III Algoritmo di branch-and-bound

Esempio

dm 0 1 2 3 4 5

1

(0,*,*)

0(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6

2

(0,0,*)

0(1,0,*)

6(0,1,*)

10(1,1,*)

16(1,1,*)

16(1,1,*)

16

3 z3(0) z3(1) z3(2) z3(3) z3(4) z3(5)

Page 26: Parte III Algoritmo di branch-and-bound

Esempio

Calcoliamo ora z3(d):Per d = {0, 1, 2}z3(0) = z2(0) ⇒ x3 = 0 z3(1) = z2(1) ⇒ x3 = 0 z3(2) = z2(2) ⇒ x3 = 0

Per d = {3, 4, 5}z3(3) = max {z2(3), z2(0) + c3} = max{16, 12} = 16 ⇒x3 = 0z3(4) = max {z2(4), z2(1) + c3} = max{16, 18} = 18 ⇒x3 = 1z3(5) = max {z2(5), z2(2) + c3} = max{16, 22} = 22 ⇒x3 = 1

Riportando questi valori in tabella si ha:

Page 27: Parte III Algoritmo di branch-and-bound

Esempio

dm 0 1 2 3 4 5

1

(0,*,*)

0(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6(1,*,*)

6

2

(0,0,*)

0(1,0,*)

6(0,1,*)

10(1,1,*)

16(1,1,*)

16(1,1,*)

16

3

(0,0,0)

0(1,0,0)

6(0,1,0)

10(1,1,0)

16(1,0,1)

18(0,1,1)

22

Pertanto, la soluzione ottima è x* = (0, 1, 1) di valore 22.

Page 28: Parte III Algoritmo di branch-and-bound

Algoritmo e complessità

(b)z

max;(d)z

;c)ab(zmax

(d);zmax

)c)a(dz(d)(z

bad

(d)z(d)z

1a0d

n2m

;c(d)z bad

0;(d)z 1a0 d

n

m

mm1m

1m

mm1m1m

m

1mm

m

111

11

return

else

then

if

tofor

tofor

tofor

tofor

tofor

c)a,b, KP(n,-DP

=+−=

=+−>

==

−==

===−=

−−

ˆ

OsservazioneLa complessità dell’algoritmo è O(nb), ovvero dipende dall’intero b (dimensione dello zaino). In questo caso si dice che l’algoritmo ha complessità pseudo polinomiale.

Page 29: Parte III Algoritmo di branch-and-bound

Parte V: Rafforzamento di formulazioni e algoritmo del

piano di taglio

Page 30: Parte III Algoritmo di branch-and-bound

Rafforzamento di formulazioni

Il problema di knapsackmax 5x1 + 2x2

3x1 + 4x2 < 6 x ∈ {0,1}2 ha come rilassamento lineare

max 5x1 + 2x2

3x1 + 4x2 < 6

x1 > 0

x2 > 0

x1 < 1

x2 < 1Indichiamo con x*

LP la soluzione ottima del rilassamento.

Page 31: Parte III Algoritmo di branch-and-bound

Separazione

DomandaPossiamo individuare una disequazione valida per conv

(F) che “separa” x*LP da conv (F) ?

x2

x*LP

x1

Page 32: Parte III Algoritmo di branch-and-bound

Minimal cover

Consideriamo l’insiemeX = {Σj=1, …, n aj xj < b, x ∈ {0,1}n}

DefinizioneUn insieme C ⊆ N è un cover se e solo se

Σj ∈C aj > b.

Un cover è minimale se, comunque preso j ∈ C, l’insieme C \ { j } NON è un cover

OsservazioneUn cover ha associato un vettore caratteristico non

ammissibile per X

Page 33: Parte III Algoritmo di branch-and-bound

Disequazioni cover

TeoremaSe C ⊆ N è un cover, la disequazione

Σj ∈C xj < |C| - 1 (*)è valida per conv (X ).DimostrazioneDimostriamo che se xR ∈ {0,1}n non soddisfa il vincolo (*) allora xR

∉ X.Se xR è tale che Σj ∈c xj > |C| - 1, allora |R ∩ C|= |C|, quindi C ⊆ R.

Pertanto:

Σj ∈N ajxjR = Σj ∈R aj > Σj ∈C aj > b

ovvero xR ∉ X. ■

Page 34: Parte III Algoritmo di branch-and-bound

Esempio

Consideriamo il problema di knapsackmax 15 x1 + 9 x2 + 8 x3 + 6 x4 + 5 x5 + 4 x6 + x7

11 x1 + 6 x2 + 6 x3 + 5 x4 + 5 x5 + 4 x6 + x7 < 19x ∈ [0,1]7

x*LP = (1, 1, 1/3, 0, 0, 0, 0)

Una disequazione cover violata da x*LP è la disequazione

x1 + x2 + x3 < 2

Come si individua una disequazione di tipo cover violata da x*

LP?

Page 35: Parte III Algoritmo di branch-and-bound

Problema di separazione

DomandaDato un poliedro P, formulazione di un problema di PL-{0,1}, esiste una disequazione di tipo cover che separa x*

LP da conv (X)?

Risposta a) SI la disequazione esiste e fornisce anche il cover

associato Cb) NO non esiste

Un algoritmo A che risponde (correttamente) alla domanda con una delle due risposte possibili a) o b), si chiama ORACOLO DI SEPARAZIONE

Page 36: Parte III Algoritmo di branch-and-bound

Oracolo di separazione

Riscriviamo la disequazione

come

La disequazione è violata da x*LP se e solo se:

Quindi, posso massimizzare la violazione definendo

Un algoritmo per SEP è un oracolo di separazione

⎭⎬⎫

⎩⎨⎧

−= ∑∈

knapsack di vincolodelcover un è ,)1(max *LP CxSEP

Cjj

∑∈

>−+Cj

jx 0)1(1 *LP

∑∈

−≤Cj

j Cx 1 ∑∈

≤−+Cj

j Cx 0 ||1

Page 37: Parte III Algoritmo di branch-and-bound

Difatti…

Sia z*SEP il valore della soluzione ottima y*

SEP di

Se 1 + z*SEP > 0 allora esiste una disequazione cover

violata associata a y*SEP

Se 1 + z*SEP < 0 allora NON esiste una disequazione

cover violata

⎭⎬⎫

⎩⎨⎧

−= ∑∈

knapsack di vincolodelcover un è ),1(max *LP CxSEP

Cjj

Page 38: Parte III Algoritmo di branch-and-bound

Formulazione del problema di separazione

Variabili decisionaliyj = 1 se l’indice j è nel coveryj = 0 altrimentiFunzione obiettivo

Vincoli

j

n

jj yx )1(max

1

*LP −∑

=

n

j

n

jj

y

bya

}1,0{

11

+≥∑=

OsservazioneI coefficienti in funzione obiettivosono < 0, quindi il problema nonammette una soluzione banale

Proprietà del cover

Page 39: Parte III Algoritmo di branch-and-bound

Trasformazione …

Ponendo wj = 1 – yj il problema di separazione diventa

ovvero …

n

n

jjj

n

jj

j

n

jj

n

jj

w

bawa

wxx

}1,0{

1

st

)1()1(max

11

1

*LP

1

*LP

++−≥−

−−−

∑∑

∑∑

==

==

Page 40: Parte III Algoritmo di branch-and-bound

…un problema di knapsack

n

n

jjj

n

jj

j

n

jj

w

bawa

wx

}1,0{

1

st

)1(max

11

1

*LP

−−≤

∑∑

==

=

Page 41: Parte III Algoritmo di branch-and-bound

Esempio

max 15 x1 + 9 x2 + 8 x3 + 6 x4 + 5 x5 + 4 x6 + x7

11 x1 + 6 x2 + 6 x3 + 5 x4 + 5 x5 + 4 x6 + x7 < 19x ∈ {0,1}7

x*LP = (1, 1, 1/3, 0, 0, 0, 0)

Problema di separazionemax (1 – 1) w1 + (1 – 1) w2 + (1 - 1/3) w3 + w 4 +

w5 + w6 + w7

11 w1 + 6 w2 + 6 w3 + 5 w4 + 5 w5 + 4 w6 + w7 <38 – 19 – 1 = 18

w ∈ {0,1}7

Page 42: Parte III Algoritmo di branch-and-bound

Separazione

Problema di separazionemax 2/3 w3 + w 4 + w5 + w6 + w711 w1 + 6 w2 + 6 w3 + 5 w4 + 5 w5 + 4 w6 + w7 <

18w ∈ {0,1}7

Soluzione ottimaw* = (0, 0, 0, 1, 1, 1, 1) di valore 4

Riportiamola nello spazio delle y:

y* = (1, 1, 1, 0, 0, 0, 0) di valore -2/3, ovvero < 1

Page 43: Parte III Algoritmo di branch-and-bound

Pertanto…

1. Il valore di 1 + z*SEP è > 1, ovvero esiste una

disequazione cover violata

2. La disequazione è scritta in corrispondenza agli indici che hanno valore 1 in y*, ovvero

y* = (1, 1, 1, 0, 0, 0, 0) corrisponde a x1 + x2 + x3 < 2

Page 44: Parte III Algoritmo di branch-and-bound

Ricapitolando

Algoritmo del piano di taglio (CUT)

Dato il rilassamento lineare di un problema di knapsack

1. Calcola la soluzione ottima x*LP

2. Se x*LP ∈{0, 1}n STOP altrimenti vai a 3.

3. Definisci il problema di separazione 4. Risolvo il problema di separazione 5. Se esiste una disequazione cover violata la

aggiungo alla formulazione corrente e torno al punto 1, altrimenti STOP

Page 45: Parte III Algoritmo di branch-and-bound

Osservazioni

L’algoritmo del piano di taglio può arrestarsi senza aver trovato la soluzione ottima intera. Che cosa si fa in questo caso?

Algoritmo di Cut-and-branch

Il problema di separazione è un problema di knapsackavente la stessa dimensione del problema originario.Perché non risolvere all’ottimo direttamente il problema

originario?Cosa succede se si risolve euristicamente il problema di

separazione?

Page 46: Parte III Algoritmo di branch-and-bound

Cut-and-branch

Caso 3: OttimalitàSe Pi ≠ ∅ e la soluzione ottima xi

UBdel RL è intera, allora elimina Si. Se zi

UB > zLB allora zLB =ziUB, vai a Test

Individua una componente frazionaria kdi xi

UB e ramifica Si aggiungendo ad LScount+1 = Si ∩ {xk= 0}Scount+2 = Si ∩ {xk= 1}count = count + 2

Caso 2: BoundSe Pi ≠ ∅, sia zi

UB il valore della soluzione ottima xi

UB del RL. Se zi

UB < zLB elimina Si per bound, vai a Test

InizializzazionezLB = - ∞; count = 0;Calcola P, formulazione di S, applicando CUT L=P

Test: L = ∅?

Scegli un problema Sidalla lista

Risolvi il Rilassamento Lineare su Pi

Caso 1: InammissibilitàSe Pi = ∅ elimina Si per inammissibilità, vai a Test

Page 47: Parte III Algoritmo di branch-and-bound

Pianificazione degli investimenti

DatiI = {1, 2, …, n} insieme di investimenti attivabili su un orizzonte

temporale T = {1, 2, …, t} di t periodiAd ogni investimento i è associato un indice di redditività ci

Ogni investimento i genera un flusso di cassa ai = (ai1, ai2, …, ait)(> 0 introiti, < 0 esborsi) per ogni periodo j ∈ T

Per ogni periodo j ∈ T esiste un budget bj che limita gli esborsi (flussi di cassa negativi).

TrovareL’insieme di investimenti I*⊆I che massimizza la redditività con il

vincolo che la somma dei flussi di cassa degli investimenti attivati sia in ogni periodo non superiore al budget bj

Page 48: Parte III Algoritmo di branch-and-bound

Esempio

Investimento 1

Investimento 2

Investimento 3

Periodo 1b1 = -4

Periodo 2b2 = -5

Periodo 3b3 = -1

a11=2

a21=3

a31=-6

a12=-10

a22=-3

a32=2

a13=-2

a23=5

a33=-3

Page 49: Parte III Algoritmo di branch-and-bound

Esempio

Nell’esempio precedente, se vengono attivati tutti e tre i progetti il vincolo di budget nel periodo 2 NON èrispettato.

FormulazioneVariabili decisionali

xj = 1 se il progetto i è attivato xj = 0 altrimenti

nIi

jiij

Iiii

x

Tjbxa

xc

}1,0{

max

∈∀≥∑∑

Page 50: Parte III Algoritmo di branch-and-bound

Rilassamento lineare

Si vuole migliorare la formulazione

Consideriamo un singolo vincolo di budget e il problema di Knapsack associato (att. al cambio di segno)

10

max

≤≤≥x

bAxxcT

10

max

≤≤−≤−

xbxa

xc

jTj

T

(KPj)

Page 51: Parte III Algoritmo di branch-and-bound

Rafforzamento

L’insieme delle soluzioni del problema di pianificazione è costituito dall’intersezione degli insiemi delle soluzioni dei singoli problemi di knapsack (KPj)

Pertantoè possibile allora rafforzare ciascun problema

KPj, ad esempio con disequazioni cover, per ottenere un rafforzamento della formulazione di pianificazione.

Page 52: Parte III Algoritmo di branch-and-bound

Esempio

Consideriamo il seguente problema di pianificazione:

I = {1, 2, 3, 4, 5}T = {1, 2, 3}c = (3, 7, 3, 5, 7) Redditivitàb = (-2, 0, -5) Budgeta1 = (-4, 1, -2) Flusso di Cassa I1a2 = (2, -4, 1) Flusso di Cassa I2a3 = (1, 3, -5) Flusso di Cassa I3a4 = (1, -3, -2) Flusso di Cassa I4a5 = (-3, 4, 1) Flusso di Cassa I5

Page 53: Parte III Algoritmo di branch-and-bound

Esempio

Il rilassamento lineare si scrive (att. al cambio di segno sul vincolo di budget)

105252

043342324

75373max

54321

54321

54321

54321

≤≤≤−++−

≤−+−+−≤+−−−

++++

xxxxxx

xxxxxxxxxx

xxxxx

(PL)

La soluzione ottima di (PL) è:

09.23

196.074.0167.0 *****54321

=

=====

z

xxxxx

Page 54: Parte III Algoritmo di branch-and-bound

Esempio

Consideriamo a questo punto il primo vincolo di budget:

102324

75373max

54321

54321

≤≤≤+−−−

++++

xxxxxx

xxxxx(KP1)

Effettuiamo un cambio di variabili per ottenere tutti coefficienti positivi nel vincolo di knapsack:

J -= {2, 3, 4} ⇒ yi= 1 – xi per ogni i ∈ J -.

Si ottiene:

6324 54321 ≤++++ xyyyx

Page 55: Parte III Algoritmo di branch-and-bound

Esempio

Dobbiamo vedere se esiste una cover violata rispetto alla soluzione:

Risolvendo il problema di separazione (slide 40) si individua lacover violata x1 + x5 < 1, che si può aggiungere direttamente alla formulazione, essendo già nelle variabili x.

OsservazioneSe la cover contiene variabili y, bisogna effettuare il cambio di

variabile yh = 1-xh prima di aggiungere la disequazione alla formulazione

La nuova soluzione ottima del RL (peraltro intera) è

104.096.01

26.074.0101167.0**

***

54

321

==−=

=−==−==

xy

yyx

22

1;1;1;1;0*

***3

*2

*1 54

=

=====

z

xxxxx

Page 56: Parte III Algoritmo di branch-and-bound

Parte VI: Formulazioni con un numero di vincoli non

polinomiale

Page 57: Parte III Algoritmo di branch-and-bound

Metodo del Simplesso Dinamico Primale

Il metodo del simplesso può essere usato per risolvere un problema di OC qualora sia nota una rappresentazione del tipo Ax < b (rappresentazione esterna) dell’involucro convesso dei suoi insiemi ammissibili conv (S).

DomandaAbbiamo realmente bisogno di una rappresentazione

esterna di conv (S)?

Page 58: Parte III Algoritmo di branch-and-bound

Problema del cammino minimo

Sia G = (V, E) un grafo non orientato.Dati

Coppia di nodi s, t ∈ V

luv ∈ R+ ∀ uv ∈ E lunghezza dell’arco uv

ProblemaDeterminare un st-cammino di lunghezza totale minima

Variabili decisionalixij = 1 se l’arco ij appartiene al cammino stxij = 0 altrimenti

Page 59: Parte III Algoritmo di branch-and-bound

st-tagli

Un st-taglio è una partizione (X, V-X) dei vertici di G tale che s ∈ X e t ∈ V-X.

L’insieme K di spigoli con un estremo in X e l’altro in V-X si dicono spigoli del taglio. Si dice peso del taglio la somma dei pesi sugli spigoli in K

Esempio

s t

1 2 3

4

56 X = {s, 1, 4, 5} V-X = {2, 3, 6, t}

K = {12, 34, 46, 56}

Page 60: Parte III Algoritmo di branch-and-bound

Formulazione

E

Kuvuv

Euvuvuv

x

tagliost

Kx

xl

}1,0{

un a entecorrispond

insieme1

min

∀≥∑∑

• Ciascun vincolo esprime la condizione che almeno uno spigolo di ogni st-taglio deve appartenere al cammino da s a t.

Page 61: Parte III Algoritmo di branch-and-bound

Osservazioni

• Il numero dei vincoli è esponenziale rispetto alla cardinalità di E.

• Sebbene la matrice dei coefficienti non sia TUM, il rilassamento lineare (PL) di (P) fornisce la soluzione ottima del problema intero.

In pratica, il numero di vincoli rende impossibile “scrivere”le matrici del metodo del simplesso.

Page 62: Parte III Algoritmo di branch-and-bound

Simplesso Dinamico Primale

Idea

Il simplesso dinamico primale acquisisce le informazioni sulla struttura del poliedro attraverso un oracolo di separazione.

Oracolo di separazione

Dato x* ∈ Rn restituisce una disequazione aTi x ≤ bi del

sistema Ax ≤ b violata da x* oppure conclude che tutte

le disequazioni del sistema Ax ≤ b sono soddisfatte da

x*

x

Page 63: Parte III Algoritmo di branch-and-bound

Algoritmo

Supponiamo di voler risolvere il problema

(P)

10

max

≤≤≤x

bAxxcT

dove A è una matrice (m × n) e b ∈Rm.

Sia D una sottomatrice di A con q << m righe e ncolonne. Definiamo il sottoproblema iniziale:

( )

10

max

≤≤≤x

dDxxcTP~

Page 64: Parte III Algoritmo di branch-and-bound

Algoritmo

(P) è

inammissibile

Risolvere il problema ( )P~

È ammissibile?no

si

= soluzione ottima di ( )P~x

Esiste un vincolo violato?

no soluzione ottima di (P)

x

Si aggiunge il vincolo violato atx ≤ b0 a ( )P~

si

Page 65: Parte III Algoritmo di branch-and-bound

Esempio

s t

2 3

1 43

2

1

1

1

1

1

1

Trovare l’st-cammino di lunghezza minima.

Partiamo dalla formulazione:

Euvxxx

xxxxxxxxxx

uv

tt

ss

ttss

∈∀≤≤≥+

≥++++++++

101

123min

43

21

343414231221

( )P~

Page 66: Parte III Algoritmo di branch-and-bound

Esempio

La soluzione ottima:

01

3341423121

42

========

ts

ts

xxxxxxxx

Oracolo di separazione

Associamo il peso ad ogni arco uv ∈ E e cerchiamo l’st-taglio di peso minimo.

Se il peso di tale taglio è < 1 allora il vincolo relativo èviolato da .

Se il peso di K* è ≥ 1 allora non ci sono disequazioniviolate.

uvx

x

Page 67: Parte III Algoritmo di branch-and-bound

Esempio

s t

2 3

1 40

1

0

0

0

0

1

0

X = {s, 2}

K* = {s1, 12, 23}

Aggiungiamo al problema ( ) il vincolo

e risolviamo di nuovo.

123121 ≥++ xxxs

P~

Page 68: Parte III Algoritmo di branch-and-bound

Esempio

La nuova soluzione ottima è:

01

33414231

4122

========

ts

ts

xxxxxxxx

s t

2 3

1 40

1

0

0

0

1

1

0

X = {s, 1, 2}

K* = {14, 23}

Page 69: Parte III Algoritmo di branch-and-bound

Esempio

Aggiungiamo il vincolo violato:

12314 ≥+ xx

La nuova soluzione ottima è:

01

33414121

4232

========

ts

ts

xxxxxxxx

Page 70: Parte III Algoritmo di branch-and-bound

Esempio

s t

2 3

1 40

1

0

0

1

0

1

0

X = {s, 2, 3}

K* = {s1, 12, 34, 3t}

Aggiungiamo il vincolo violato:

1334121 ≥+++ ts xxxx

Page 71: Parte III Algoritmo di branch-and-bound

Esempio

La nuova soluzione ottima è:

01

43414121

3232

========

ts

ts

xxxxxxxx

s t

2 3

1 40

1

0

0

1

0

0

1

Non esistono st-tagli di peso <1, STOP

Page 72: Parte III Algoritmo di branch-and-bound

Il minimo albero ricoprente

DatiG (V, E) grafo connesso, ce > 0costo associato ad ogni

spigolo e ∈ E

ProblemaTrovare un albero ricoprente di costo minimo

Algoritmi combinatori notiPrim e Kruskal

Page 73: Parte III Algoritmo di branch-and-bound

Formulazione

0

)2( 1||2 t.c., ogniper 1||

(1) 1st

min

altrimenti 0ric. alberoall' appartiene spigolo lo se 1

)(

−≤≤⊆−≤

−=

⎩⎨⎧

∑∑

x

nSVSSx

nx

xc

ijx

SEij ij

Eij ij

Eij ijij

ij

Page 74: Parte III Algoritmo di branch-and-bound

Osservazioni

1. I bound x < 1 sono implicati dai vincoli (2)2. La matrice dei vincoli non è TUM

Difatti, consideriamo un grafo con 5 nodi e i seguenti vincoli di tipo (2):

ad essi corrisponde la matrice

che ha determinante -2 e, quindi, non è TUM.

Nonostante la matrice dei coefficienti non sia TUM, il rilassamento lineare fornisce una soluzione intera. Tuttavia,il numero dei vincoli cresce esponenzialmente con il numero dei nodi del grafo.

33

2

344523

154512

2312

≤++≤++

≤+

xxxxxx

xxx12 x23 x45

1 1 0

1 0 1

0 1 1

Page 75: Parte III Algoritmo di branch-and-bound

Esempio

2

1

3

4

8 9

6

75

2 2

5

10

4

13

8

9

25

3

01

8st

5325229810134min

675756894948453534231312

675756894948453534231312

≥≤

=+++++++++++

+++++++++++

xx

xxxxxxxxxxxx

xxxxxxxxxxxx

Page 76: Parte III Algoritmo di branch-and-bound

Soluzione n. 1

Valore della soluzione: 22Gli archi verdi di maggiore spessore corrispondono a variabili poste a 1

2

1

3

4

8 9

6

75

2 2

5

10

4

13

8

9

25

3

Page 77: Parte III Algoritmo di branch-and-bound

Separazione

DomandaEsiste un vincolo della famiglia

violato dalla soluzione ottima corrente? SIAd esempio, x48+x49+x89 < 2 che viene aggiunto alla formulazione

corrente

1||2 che tale, ogniper 1||)(

−≤≤−≤∑ ∈nSSSx

SEij ij

01

28

st5325229810134min

894948

675756894948453534231312

675756894948453534231312

≥≤

≤++=+++++++++++

+++++++++++

xx

xxxxxxxxxxxxxxx

xxxxxxxxxxxx

Page 78: Parte III Algoritmo di branch-and-bound

Soluzione n. 2

Valore della soluzione: 22Gli archi verdi di maggiore spessore corrispondono a variabili poste a 1

2

1

3

4

8 9

6

75

2 2

5

10

4

13

8

9

25

3

Page 79: Parte III Algoritmo di branch-and-bound

Separazione

DomandaEsiste un vincolo della famiglia

violato dalla soluzione ottima corrente? SIAd esempio, x56+x57+x67 < 2che viene aggiunto alla formulazione corrente

01

22

8st

5325229810134min

675756

894948

675756894948453534231312

675756894948453534231312

≥≤

≤++≤++

=+++++++++++

+++++++++++

xx

xxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

1||2 che tale, ogniper 1||)(

−≤≤−≤∑ ∈nSSSx

SEij ij

Page 80: Parte III Algoritmo di branch-and-bound

Soluzione n.3

Valore della soluzione: 25Gli archi verdi di maggiore spessore corrispondono a variabili poste a 1

2

1

3

4

8 9

6

75

2

5

10

4

13

8

9

25

3

Page 81: Parte III Algoritmo di branch-and-bound

Separazione

DomandaEsiste un vincolo della famiglia

violato dalla soluzione ottima corrente? SIAd esempio, x12+x13+x23 < 2che viene aggiunto alla formulazione corrente

01

222

8st

5325229810134min

231312

675756

894948

675756894948453534231312

675756894948453534231312

≥≤

≤++≤++≤++

=+++++++++++

+++++++++++

xx

xxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

1||2 che tale, ogniper 1||)(

−≤≤−≤∑ ∈nSSSx

SEij ij

Page 82: Parte III Algoritmo di branch-and-bound

Soluzione n.4

Valore della soluzione: 30Gli archi verdi di maggiore spessore corrispondono a variabili poste a 1

2

1

3

4

8 9

6

75

2

5

10

4

13

8

9

25

3

Page 83: Parte III Algoritmo di branch-and-bound

Separazione

DomandaEsiste un vincolo della famiglia

violato dalla soluzione ottima corrente? NO

La soluzione trovata è ottima per il rilassamento ed èanche INTERA, ovvero ottima per PL-{0,1}

1||2 che tale, ogniper 1||)(

−≤≤−≤∑ ∈nSSSx

SEij ij

Page 84: Parte III Algoritmo di branch-and-bound

Formulazione “cutset”

0

1

1||1 che tale, ogniper 1stmin

altrimenti 0ric. alberoall' appartiene spigolo lo se 1

)(,

−=

−≤≤≥

⎩⎨⎧

∑∑

∂∈∈

x

nx

nSSx

xc

ijx

Eij ij

SjSi ij

T

ij

Page 85: Parte III Algoritmo di branch-and-bound

La formulazione “cutset” non è intera

Difatti, la formulazione

01

111

8st

5325229810134min

4535

4534

3534

675756894948453534231312

675756894948453534231312

≥≤

≥+≥+≥+

=+++++++++++

+++++++++++

xx

xxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

Page 86: Parte III Algoritmo di branch-and-bound

Soluzione frazionaria

1 1

0.5

11

0.5

0.5

1

1

ammette la seguente soluzione ottima, di valore 28.5

che NON ha tagli violati !!!!

0.5

Page 87: Parte III Algoritmo di branch-and-bound

Problema di separazione

Qual è il problema che consente di separare i vincoli

“subtour elimination constraints”?

Variabili decisionalizj = 1 se j ∈ Szj = 0 altrimenti

1||2 che tale, ogniper 1||)(

−≤≤−≤∑ ∈nSSSx

SEij ij

Page 88: Parte III Algoritmo di branch-and-bound

Problema di separazione

Un vincolo subtour è violato dalla soluzione x*LPse e solo se esiste un S tale che

ovvero se

1||)(

* −>−∑ ∈Sx

SEij ij

{ }{ }

{ }

1max

||max*

1,0

)(*

−>−

=−

∑ ∑∑

∈ ∈∈

∈⊂

Eij Vj jjiijz

SEij ijVS

zzzx

Sx

Page 89: Parte III Algoritmo di branch-and-bound

Osservazioni

1. Il problema

ha soluzione ottima di valore 0 con z = 0.Per ovviare a ciò si deve fissare zk=1, per k = 1,…,|V|. In questo modo si risponde alla domanda se esiste un vincolo di tipo subtour violato che contiene il vertice k.

2. Il problema non è un problema di PL-{0,1}. Si deve effettuare una linearizzazione.

{ }{ }

1max *

1,0−>−∑ ∑∈ ∈∈ Eij Vj jjiijz

zzzx

Page 90: Parte III Algoritmo di branch-and-bound

Linearizzazione

Introduciamo la variabile wij = zi zj

Il problema diventa

{ } { }

Eij

wz

z

zzwzwzw

zwx

EVk

jiij

jij

iij

Eij Vjjijij

∈∈

=

−≥−−≤−≤−

−∑ ∑∈ ∈

ogniper

1,0,1,0

1

100

st

max

||||

*

Page 91: Parte III Algoritmo di branch-and-bound

Linearizzazione

I vincoli possono essere eliminati in quantoi coefficienti delle wij in f.o. sono >0 ovvero,

che implica che il vincolo è sempre soddisfatto in quanto

Eliminando questi vincoli osserviamo anche che la matrice dei coefficienti è TUM. Pertanto, può essere rimossa

anche la stipula di interezza. In conclusione è “facile” il problema di separazione dei

subtour elimination constraint.

1−≥−− jiij zzw

{ } ,min jiij zzw =

{ } 1 ,min -zzzz jiji +≥

Page 92: Parte III Algoritmo di branch-and-bound

Esempio

10,101

00000000000000000000

0000

st

11111111max

1

868767

757557

656556

989889

949449

848448

545445

535335

434334

323223

313113

212112

9876554321

4948575635231312

≤≤≤≤=

≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−≤−

≤−≤−≤−≤−

−−−−−−−−−−⋅+⋅+⋅+⋅+⋅+⋅+⋅+⋅

zwz

zwzwzwzwzwzwzwzwzwzwzwzwzwzwzwzwzwzwzwzw

zwzwzwzw

zzzzzzzzzzwwwwwwww

Consideriamo la sol. n. 3 del problema precedente e scriviamo ilproblema di separazione:

La soluzione ottima del problema vale 0 ed ha le seguenti variabili diverse da 0

Esse descrivono il subtour constraintx12+x13+x23 < 2

1;1;1;1;1;1 321231312 ====== zzzwww