• Non ci sono risultati.

Divide et Impera

N/A
N/A
Protected

Academic year: 2021

Condividi "Divide et Impera"

Copied!
92
0
0

Testo completo

(1)

Parte III

Algoritmo di branch-and-bound

(2)

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 risolvere

2. Le informazioni che ottengo risolvendo la collezione di problemi mi indicano la sol. ottima di (1)

(3)

Un semplice teoremino

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

Teorema

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

Non ho richiesto che Si ∩ Sj = ∅, ovvero che la decomposizione sia una partizione, ma non ho escluso che possa essere una partizione!

(4)

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

(5)

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?

(6)

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 zkUB sono rispettivamente un lower e un upper bound per zk

Allora

zUB = maxk zkUB è un upper bound per z* zLB = maxk zkLB è un lower bound per z*

(7)

Potatura per ottimalità

S zzUB= 27

LB=13

S0

x1=0

z 0UB= 20 z 0LB=20

S1

x1=1

z 1UB= 25 z 1LB=15 zUB= 25

zLB=20

(8)

Potatura per bound

S zzUB= 27

LB=13

S0

x1=0

z 0UB= 20 z 0LB=18

S1

x1=1

z 1UB= 26 z 1LB=21 zUB= 26

zLB=21

(9)

Potatura per inammissibilità

S zzUB= 27

LB=13

S0

x1=0

z 0UB= 20 z 0LB=18

S1

x1=1

S1=∅

zUB= 27 zLB=18

(10)

Nessuna potatura

S zzUB= 40

LB=0

S0

x1=0

z 0UB= 20 z 0LB=18

S1

x1=1

z 1UB= 37 z 1LB= 0 zUB= 37

zLB=18

(11)

Ricapitolando…

Enumero un insieme di soluzioni “implicitamente”

perché “poto” rami dell’albero per:

1. Inammissibilità 2. Bound

3. Ottimalità

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

L’algoritmo ha il seguente diagramma di flusso:

(12)

Branch-and-Bound

Caso 3: Ottimalità

Se Pi ≠ ∅ e la soluzione ottima xiUB del RL è intera, allora elimina Si.

Se ziUB> zLB allora zLB =ziUB, vai a Test Individua una componente frazionaria k di xiUBe ramifica Si aggiungendo ad L Scount+1 = Si ∩ {xk= 0}

Scount+2 = Si ∩ {xk= 1}

count = count + 2 Caso 2: Bound

Se Pi ≠ ∅, sia ziUB il valore della soluzione ottima xiUBdel RL.

Se ziUB< zLB elimina Si per bound, vai a Test

Inizializzazione L=S, zLB = - count = 0;

Test: L = ∅?

Scegli un problema Si dalla lista

Risolvi il Rilassamento Lineare su Pi

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

(13)

Esempio

Consideriamo il problema di knapsack

max 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 Osservazione

Poiché la f.o. ha coefficienti interi, possiamo scrivere la condizione di potatura per bound (caso 2) come ⎣ziUB⎦ < zLB

(14)

10 8

11 12

4

z 4UB= 25.91

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

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

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

x LB= (1, 1, 0, 0, 0, 0, 1) z 1UB= 26.4

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

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

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

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

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

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

z 5UB= 25

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

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

z 6UB= 26

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

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

z 7UB= 26

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

x LB= (1, 1, 0, 0, 0, 0, 1) z 8UB= 24.91

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

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

z 9UB= 25.4

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

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

z 10UB= ∅

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

x 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= 25

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

z 12UB= 25.27

x 12UB = (1, 0.81, 0, 0, 0, 1, 0) z LB= 25

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

(15)

Parte IV:

Programmazione dinamica

(16)

Esempio

Consideriamo il problema di knapsack:

max 6 x1 + 10 x2 + 12 x3

x1 + 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 x3

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

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

Osservazione

La soluzione x*(2)= (0, 1) è una “sottosoluzione” di x*(1) = (0, 1, 1), ovvero si ottiene da x*(1) semplicemente eliminando la variabile x2

(17)

Programmazione Dinamica

Schema di principio

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

1. Risolve un sottoproblema di S all’ottimo

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

(18)

Notazione

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

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

{ }

m

m

j

j j

m

j

j j

x

d x

a

x c

1 , 0 max

1

1

∑ ≤

=

=

(19)

Programmazione dinamica

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

Calcolo di z

n

(b)

1. Calcolo zm(d) per m = {1, …, n}

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

Osservazione

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

(20)

Formula ricorsiva Condizione iniziale di ricorsione

( ) ⎩ ⎨ ⎧

= <

1 1

1 1

0

a d

per c

a d

d per z

Questa condizione implica:

Se z

1

(d) = 0 ⇒ x

1

= 0

Se z

1

(d) = c

1

⇒ x

1

= 1

(21)

Formula ricorsiva Formula di ricorsione

{ }

⎩ ⎨

<

+

= −

m m m

m m

m

m

m

d a

a d

c a

d z

d z

d d z

z se

se )

( ),

( max

) ) (

(

1 1

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]

(22)

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 = 1 z1(0) = 0 ⇒ x1= 0

z1(1) = 6 ⇒ x1 = 1 z1(2) = 6 ⇒ x1 = 1 z1(3) = 6 ⇒ x1 = 1 z1(4) = 6 ⇒ x1 = 1 z1(5) = 6 ⇒ x1 = 1

(23)

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

d

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

(24)

Esempio

Calcoliamo ora z2(d):

Per d = {0, 1}

z2(0) = z1(0) = 0 ⇒ x2= 0 z2(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:

(25)

Esempio

d

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

(26)

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 = 0 z3(4) = max {z2(4), z2(1) + c3} = max{16, 18} = 18 ⇒x3 = 1 z3(5) = max {z2(5), z2(2) + c3} = max{16, 22} = 22 ⇒x3 = 1 Riportando questi valori in tabella si ha:

(27)

Esempio

d

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

(28)

Algoritmo e complessità

(b) z

max;

(d) z

; c ) a b ( z max

(d);

z max

) c ) a (d z

(d) (z

b a

d

(d) z

(d) z

1 a

0 d

n 2

m

; c (d) z

b a

d

0;

(d) z 1 a 0

d

n m

m m

1 m

1 m

m m

1 m 1

m m

1 m m

m

1 1

1

1 1

return else then if

to for

to for

to for

to for

to for

c) a, b, KP(n, -

DP

=

+

=

=

+

>

=

=

=

=

=

=

=

=

ˆ

Osservazione

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

(29)

Parte V:

Rafforzamento di formulazioni e algoritmo del

piano di taglio

(30)

Rafforzamento di formulazioni

Il problema di knapsack max 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 < 1

Indichiamo con x*LP la soluzione ottima del rilassamento.

(31)

Separazione

Domanda

Possiamo individuare una disequazione valida per conv (F) che “separa” x*LP da conv (F) ?

x2

x*LP

x1

(32)

Minimal cover

Consideriamo l’insieme

X = {

Σ

j=1, …, n aj xj < b, x ∈ {0,1}n} Definizione

Un 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

Osservazione

Un cover ha associato un vettore caratteristico non ammissibile per X

(33)

Disequazioni cover

Teorema

Se C ⊆ N è un cover, la disequazione

Σj ∈C xj < |C| - 1 (*) è valida per conv (X ).

Dimostrazione

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

(34)

Esempio

Consideriamo il problema di knapsack

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 < 19 x ∈ [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?

(35)

Problema di separazione

Domanda

Dato 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 C

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

(36)

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

vincolo del

cover un

è ,

) 1 (

max xLP* C SEP

C j

j

>

− +

C j

x j 1) 0 (

1 LP*

C j

j C

x 1

− +

C j

j C

x | | 0 1

(37)

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

vincolo del

cover un

è ),

1 (

max xLP* C SEP

C j

j

(38)

Formulazione del problema di separazione

Variabili decisionali

yj = 1 se l’indice j è nel cover yj = 0 altrimenti

Funzione obiettivo

Vincoli

j n

j

j

y

x 1 ) (

max

1

*

LP

=

n j n

j

j

y

b y

a

} 1 , 0 {

1

1

+

=

Osservazione

I coefficienti in funzione obiettivo sono < 0, quindi il problema non ammette una soluzione banale

Proprietà del cover

(39)

Trasformazione …

Ponendo wj = 1 – yj il problema di separazione diventa

ovvero …

n

n

j

j j

n

j

j

j n

j

j n

j

j

w

b a

w a

w x

x

} 1 , 0 {

1 st

) 1 (

) 1 (

max

1 1

1

* LP 1

* LP

+ +

=

=

=

=

(40)

…un problema di knapsack

n n j

j j

n j

j

j n

j

j

w

b a

w a

w x

} 1 , 0 {

1 st

) 1

( max

1 1

1

* LP

=

=

=

(41)

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 < 19 x ∈ {0,1}7

x*LP = (1, 1, 1/3, 0, 0, 0, 0) Problema di separazione

max (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

(42)

Separazione

Problema di separazione

max 2/3 w3 + w 4 + w5 + w6 + w7

11 w1 + 6 w2 + 6 w3 + 5 w4 + 5 w5 + 4 w6 + w7 <

18

w ∈ {0,1}7

Soluzione ottima

w* = (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

(43)

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

(44)

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

(45)

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 knapsack avente 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?

(46)

Cut-and-branch

Caso 3: Ottimalità

Se Pi ≠ ∅ e la soluzione ottima xiUB del RL è intera, allora elimina Si.

Se ziUB> zLB allora zLB =ziUB, vai a Test Individua una componente frazionaria k di xiUBe ramifica Si aggiungendo ad L Scount+1 = Si ∩ {xk= 0}

Scount+2 = Si ∩ {xk= 1}

count = count + 2 Caso 2: Bound

Se Pi ≠ ∅, sia ziUB il valore della soluzione ottima xiUBdel RL.

Se ziUB< zLB elimina Si per bound, vai a Test

Inizializzazione

zLB= - ∞; count = 0;

Calcola P, formulazione di S, applicando CUT

L=P

Test: L = ∅?

Scegli un problema Si dalla lista

Risolvi il Rilassamento Lineare su Pi

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

(47)

Pianificazione degli investimenti

Dati

I = {1, 2, …, n} insieme di investimenti attivabili su un orizzonte temporale T = {1, 2, …, t} di t periodi

Ad 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).

Trovare

L’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

(48)

Esempio

Investimento 1

Investimento 2

Investimento 3

Periodo 1 b1 = -4

Periodo 2 b2 = -5

Periodo 3 b3 = -1 a11=2

a21=3

a31=-6

a12=-10

a22=-3

a32=2

a13=-2

a23=5

a33=-3

(49)

Esempio

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

rispettato.

Formulazione

Variabili decisionali

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

n I

i

j i

ij I i

i i

x

T j

b x

a

x c

} 1 , 0 { max

∑ ≥

(50)

Rilassamento lineare

Si vuole migliorare la formulazione

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

1 0

max

x

b Ax

x c

T

1 0

max

x

b x

a

x c

j T

j T

(KP

j

)

(51)

Rafforzamento

L’insieme delle soluzioni del problema di

pianificazione è costituito dall’intersezione degli insiemi delle soluzioni dei singoli

problemi di knapsack (KP

j

) Pertanto

è possibile allora rafforzare ciascun problema

KP

j

, ad esempio con disequazioni cover, per

ottenere un rafforzamento della formulazione

di pianificazione.

(52)

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

a1 = (-4, 1, -2) Flusso di Cassa I1 a2 = (2, -4, 1) Flusso di Cassa I2 a3 = (1, 3, -5) Flusso di Cassa I3 a4 = (1, -3, -2) Flusso di Cassa I4 a5 = (-3, 4, 1) Flusso di Cassa I5

(53)

Esempio

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

1 0

5 2

5 2

0 4

3 3

4

2 3

2 4

7 5

3 7

3 max

5 4

3 2

1

5 4

3 2

1

5 4

3 2

1

5 4

3 2

1

− +

+

− +

− +

≤ +

+ +

+ +

x

x x

x x

x

x x

x x

x

x x

x x

x

x x

x x

x

(PL)

La soluzione ottima di (PL) è:

09 . 23

1 96

. 0 74

. 0 1

67 .

0

* * * *

*

5 4

3 2

1

=

=

=

=

=

= z

x x

x x

x

(54)

Esempio

Consideriamo a questo punto il primo vincolo di budget:

1 0

2 3

2 4

7 5

3 7

3 max

5 4

3 2

1

5 4

3 2

1

≤ +

+ +

+ +

x

x x

x x

x

x x

x x

x

(KP

1

)

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

J

-

= {2, 3, 4} ⇒ y

i

= 1 – x

i

per ogni i ∈ J

-.

Si ottiene:

6 3

2

4 x

1

+ y

2

+ y

3

+ y

4

+ x

5

(55)

Esempio

Dobbiamo vedere se esiste una cover violata rispetto alla soluzione:

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

Osservazione

Se 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) è

1 04

. 0 96

. 0 1

26 . 0 74

. 0 1 0

1 1 67

. 0

*

*

*

*

*

5 4

3 2

1

=

=

=

=

=

=

=

=

x y

y y

x

22

1

; 1

; 1

; 1

; 0

*

*

*

* 3

* 2

*

1 4 5

=

=

=

=

=

= z

x x

x x

x

(56)

Parte VI:

Formulazioni con un numero di vincoli non

polinomiale

(57)

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

Domanda

Abbiamo realmente bisogno di una rappresentazione esterna di conv (S)?

(58)

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 Problema

Determinare un st-cammino di lunghezza totale minima Variabili decisionali

xij = 1 se l’arco ij appartiene al cammino st xij = 0 altrimenti

(59)

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

5

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

(60)

Formulazione

E K uv

uv E uv

uv uv

x

taglio st

K x

x l

} 1 , 0 {

un a

ente corrispond

insieme 1

min

∑ ≥

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

(61)

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.

(62)

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

(63)

Algoritmo

Supponiamo di voler risolvere il problema (P)

1 0

max

x

b Ax

x c

T

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

R

m.

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

( )

1 0

max

x

d Dx

x

c

T

P ~

(64)

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

(65)

Esempio

s t

2 3

1 4

3

2

1 1

1 1

1

1

Trovare l’st-cammino di lunghezza minima.

Partiamo dalla formulazione:

E uv

x x x

x x

x x

x x

x x

x x

uv t t

s s

t t

s s

+ + ≥

+ +

+ +

+ +

+

1 0

1

1 2

3 min

4 3

2 1

3 4

34 14

23 12

2 1

( ) P ~

(66)

Esempio

La soluzione ottima:

0 1

3 34

14 23

12 1

4 2

=

=

=

=

=

=

=

=

t s

t s

x x

x x

x x

x x

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 disequazioni violate.

x

uv

x

(67)

Esempio

s t

2 3

1 4

0

1

0 0

0 0

1

0

X = {s, 2}

K* = {s1, 12, 23}

Aggiungiamo al problema ( ) il vincolo e risolviamo di nuovo.

23

1

12

1

+ x + x

x

s

P ~

(68)

Esempio

La nuova soluzione ottima è:

0 1

3 34

14 23

1

4 12

2

=

=

=

=

=

=

=

=

t s

t s

x x

x x

x

x x

x

s t

2 3

1 4

0

1

0 0

0 1

1

0

X = {s, 1, 2}

K* = {14, 23}

Riferimenti

Documenti correlati

[r]

Policrate, tiranno di Samo, avendo chiesto a Pitagora quanti alunni avesse, ebbe questa risposta: &#34;Meta' studia la matematica, la quarta parte studia i fenomeni della natura e

Il problema consiste nello spedire un flusso di 12 unità dal nodo s al nodo t in modo da massimizzare il profitto con profitti (nero) e capacità (rosso) associati agli archi

Il problema consiste nello spedire un flusso di 12 unità dal nodo s al nodo t in modo da massimizzare il profitto con profitti (nero) e capacità (rosso) associati agli archi

[r]

Da allora, i monaci del tempio si alternano per spostare i dischi dal piolo originario in un altro piolo, seguendo le rigide re- gole di Brahma: i dischi vanno maneg- giati uno

Da allora, i monaci del tempio si alternano per spostare i dischi dal piolo originario in un altro piolo, seguendo le rigide re- gole di Brahma: i dischi vanno maneg- giati uno

Esercizio 7.14 In quanti modi `e possibile assegnare a 10 bambini venti caramelle alla menta e dieci all’anice in modo che ogni bambino riceva esattamente tre caramelle.. Esercizio