parte iii algoritmo di branch-and-bound
TRANSCRIPT
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