Parte III Algoritmo di branch-and-bound

Post on 16-Oct-2021

1 views 0 download

Transcript of Parte III Algoritmo di branch-and-bound

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)

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!

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

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?

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*

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

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

Potatura per inammissibilità

SzUB= 27

zLB=13

S0

x1=0

z 0UB= 20

z 0LB=18S1

x1=1

S1=∅

zUB= 27

zLB=18

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

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:

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

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

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

Parte IV: Programmazione dinamica

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

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 .

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

≤∑

=

=

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}

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

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]

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

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)

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:

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)

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:

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.

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.

Parte V: Rafforzamento di formulazioni e algoritmo del

piano di taglio

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.

Separazione

DomandaPossiamo individuare una disequazione valida per conv

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

x2

x*LP

x1

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

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. ■

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?

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

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

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

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

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

++−≥−

−−−

∑∑

∑∑

==

==

…un problema di knapsack

n

n

jjj

n

jj

j

n

jj

w

bawa

wx

}1,0{

1

st

)1(max

11

1

*LP

−−≤

∑∑

==

=

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

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

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

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

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?

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

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

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

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

∈∀≥∑∑

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)

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.

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

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

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

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

Parte VI: Formulazioni con un numero di vincoli non

polinomiale

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)?

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

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}

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.

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.

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

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~

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

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~

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

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~

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}

Esempio

Aggiungiamo il vincolo violato:

12314 ≥+ xx

La nuova soluzione ottima è:

01

33414121

4232

========

ts

ts

xxxxxxxx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

La formulazione “cutset” non è intera

Difatti, la formulazione

01

111

8st

5325229810134min

4535

4534

3534

675756894948453534231312

675756894948453534231312

≥≤

≥+≥+≥+

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

+++++++++++

xx

xxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

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

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

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

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

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

||||

*

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 +≥

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