• Non ci sono risultati.

Parte III: Algoritmo di Branch-and-Bound

N/A
N/A
Protected

Academic year: 2021

Condividi "Parte III: Algoritmo di Branch-and-Bound"

Copied!
40
0
0

Testo completo

(1)

Parte III:

Algoritmo di Branch-and-Bound

(2)

Divide et Impera

Sia

z* = max {c

T

x : x S} (1)

un problema di ottimizzazione combinatoria difficile da risolvere.

Domanda: E’ possibile decomporre il problema (1) in una collezione di sottoproblemi tali che

– ogni nuovo sottoproblema sia facile da risolvere, e

– le informazioni ottenute risolvendo la collezione di

sottoproblemi ci guidino nella ricerca della soluzione

ottima di (1)?

(3)

Proposizione: Sia S = S

1

S

2

∪ … ∪ S

K

una decomposizione della regione ammissibile S in K sottoinsiemi, e sia z

h

= max {c

T

x : x S

h

}, per h = 1,…,K. Allora z* = max

h

z

h

.

Osservazione: Non abbiamo richiesto che la decomposizione sia una partizione (ovvero, che S

i

∩ S

j

= ∅ ), ma non abbiamo nemmeno escluso che possa esserlo!

Una tipica rappresentazione dell’approccio divide et impera è tramite un albero di enumerazione.

Divide et Impera

(4)

Un esempio

Se S ⊆ {0,1}

3

, possiamo costruire il seguente albero di enumerazione S

S

0

x

1

=0

S

1

x

1

=1

S

00

x

2

=0

S

01

x

2

=1

S

10

x

2

=0

S

11

x

2

=1

S

000

x

3

=0

S

001

x

3

=1

S

010

x

3

=0

S

011

x

3

=1

S

100

x

3

=0

S

101

x

3

=1

S

110

x

3

=0

S

111

x

3

=1

Le foglie dell’albero corrispondono esattamente ai punti che

andremmo a esaminare se potessimo fare un’enumerazione completa.

(5)

Osservazione: Costruendo in questo modo l’albero di enumerazione stiamo semplicemente enumerando TUTTI gli insiemi ammissibili!!!!

Per la maggior parte dei problemi è impossibile effettuare una enumerazione completa.

Poiché per un problema di ottimizzazione combinatoria conosciamo i bound “primali” e i bound “duali”, l’idea è quella di utilizzare tali bound per enumerare gli insiemi ammissibili in modo più efficace.

Divide et Impera

(6)

Proposizione: Sia S = S

1

S

2

∪ .. ∪ S

K

una decomposizione della regione ammissibile S in K sottoinsiemi, e siano

• z

h

= max {c

T

x : x S

h

},

• z

h LB

un lower bound per z

h

, e

• z

hUB

un upper bound per z

h

per h = 1, …, K. Allora

• z

UB

= max

h

z

hUB

è un upper bound per z

*

, e

• z

LB

= max

h

z

hLB

è un lower bound per z

*

.

Divide et Impera

(7)

Potatura per ottimalità

S

0

z

0UB

= 27 z

0LB

=13

Le informazioni su upper e lower bound per il valore ottimo z* permettono di decidere quali nodi dell’albero ha senso continuare ad esaminare per trovare la soluzione ottima.

Poiché z

1LB

= z

1UB

= 20, sicuramente z

1

= 20. Pertanto, non c’è bisogno di esplorare ulteriormente il nodo S che può essere potato per ottimalità.

S

2

x

1

=1

z

2UB

= 25 z

2LB

= 15

S

1

x

1

= 0

z

1UB

= 20

z

1LB

=20

(8)

Potatura per ottimalità

S

0

z

0UB

= 27 z

0LB

=13

z

LB

= 20

Ad ogni passo teniamo traccia di un lower bound globale z

LB

. Per il nodo S

0

, z

LB

= z

0LB

(alternativamente, z

LB

= - ∞ ).

Per ciascun nodo di ogni livello dell’albero, aggiorniamo il valore di z

LB

se in corrispondenza di quel nodo abbiamo calcolato un lower bound MIGLIORE (ossia maggiore) di quello corrente.

S

2

x

1

=1

z

2UB

= 25 z

2LB

= 15

S

1

x

1

= 0

z

1UB

= 20 z

1LB

=20

= z

LB

(9)

Potatura per bound

S

0

z

0UB

= 27 z

0LB

=13

S

2

x

1

=1

z

2UB

= 26 z

2LB

= 21

S

1

x

1

= 0

z

1UB

= 20 z

1LB

= 18

Poiché z

LB

= 21, la soluzione ottima del problema iniziale ha valore almeno pari a 21. Dal momento che z

1UB

= 20, sicuramente non è possibile ottenere l’ottimo esplorando il nodo S

1

. Pertanto, S

1

può essere potato per bound.

z

LB

= 21

= z

LB

(10)

Potatura per inammissibilità

S

0

z

0UB

= 27 z

0LB

=13

S

2

x

1

=1

S

2

= ∅

S

1

x

1

= 0

z

0UB

= 20 z

0LB

= 18

Poiché il sottoproblema associato al nodo S

2

è inammissibile, non è possibile ottenere l’ottimo esplorando il nodo S

2

. Pertanto S

2

può essere potato per inammissibilità.

= z

LB

z

LB

= 18

(11)

Nessuna potatura

In questo caso non possiamo fare nessuna osservazione che permetta di potare uno dei due nodi in esame e quindi è necessario esplorare sia S

1

che S .

S

0

z

0UB

= 40 z

0LB

=0

S

2

x

1

=1

z

2UB

= 37 z

2LB

= 0

S

1

x

1

= 0

z

1UB

= 20 z

1LB

= 18

= z

LB

z

LB

= 18

(12)

max 4x 1x 2 7x 1 −2x 2 ≤14

x 2 ≤3

2x 1 −2x 2 ≤3 x 1 ≥ 0

x 2 ≥ 0 x ∈Z 2

1 2

3/2

(20/7,3)

(11/5,7/10) 3

x

2

x

1

Esempio

P

(13)

Problema al nodo radice S

0

: Rilassamento lineare di P.

1 2

3/2

x

0UB

=(20/7,3)

(11/5,7/10) 3

x

2

x

1

Valore dell'UB al nodo radice: z

0UB

= 59/7.

Poiché non abbiamo una soluzione ammissibile, fissiamo z

0LB

= - ∞

Esempio

(14)

S

1

=S

0

∩ { x : x

1

x

1

⌋ }

Esempio

z

0LB

= − ∞ = z

LB

S

0

z

0

UB

=59/7

Consideriamo la variabile frazionaria x

1

del vettore x

0UB

e generiamo i sottoproblemi di S

0

applicando la seguente regola di branching:

S

2

=S

0

∩ { x : x

1

x

1

}

S 1 =S 0 ∩ { x : x 1 ≤ ⌊ 20/ 7=2 }

S 2 =S 0 ∩ { x : x 1 ≥  20 / 7  =3 }

(15)

Memorizziamo S

1

e S

2

in una lista di sottoproblemi che devono essere esplorati: L = {S

1

, S

2

}

Scegliamo di analizzare il sottoproblema S

1

.

S

0

S

1

S

2

Esempio

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

S 1 =S 0 ∩ { x : x 1 ≤ 2 } S 2 =S 0 { x : x 1 ≥3 }

(16)

Risolviamo il sottoproblema al nodo S

1

.

max 4x 1x 2 7x 1 −2x 2 ≤ 14

x 2 ≤3

2x 1 −2x 2 ≤ 3 x 1 ≤2

x 1 ≥0 x 2 ≥0

1 2

3 x

2

x

1

Esempio

x

1UB

=(2,1/2)

Valore dell'UB per il sottoproblema S

1

: z

1UB

= 15/2.

(17)

Poiché non possiamo applicare nessun criterio di potatura, il nodo S

1

dovrà essere esplorato.

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2

z

1LB

= − ∞ = z

LB

(18)

Risolviamo il sottoproblema al nodo S

2

.

max 4x 1x 2 7x 1 −2x 2 ≤14

x 2 ≤3

2x 1 −2x 2 ≤3 x 1 ≤2

x 1 ≥3 x 1 ≥0 x 2 ≥0

Esempio

1 2

3 x

2

x

1

3

Il sottoproblema al nodo S

2

è inammissibile!

(19)

Il nodo S

2

può essere chiuso per inammissibilità.

Esploriamo il nodo S

1

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2

z

1LB

= − ∞ = z

LB

(20)

Esempio

S 3 =S 1 ∩ { x : x 2 ≤ 0 } S 4 =S 1 { x : x 2 ≥1 }

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2

z

1LB

= − ∞ = z

LB

S

3

S

4

Memorizziamo S

3

e S

4

nella lista di sottoproblemi che devono essere esplorati: L = {S

3

, S

4

}

Scegliamo di analizzare il sottoproblema S

3

.

(21)

Risolviamo il sottoproblema al nodo S

3

.

max 4x 1x 2 7x 1 −2x 2 ≤14 2x 1 −2x 2 ≤3

x 1 ≤2 x 2 ≤ 0 x 1 ≥0 x 2 ≥0

1 2

3 x

2

x

1

Esempio

x

3UB

=(3/2,0)

Valore dell'UB per il sottoproblema S

3

: z

3UB

= 6.

(22)

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2

z

1LB

= − ∞ = z

LB

S

3

S

4

z

3UB

=6

z

3LB

= − ∞ = z

LB

Poiché in questo momento non possiamo applicare nessun

criterio di potatura, il nodo S

3

dovrà essere esplorato.

(23)

max 4x 1x 2 7x 1 −2x 2 ≤14

x 2 ≤3

2x 1 −2x 2 ≤3 x 1 ≤2

x 2 ≥1 x 1 ,x 2 ≥0

1 2

3 x

2

x

1

1

Esempio

Risolviamo il sottoproblema al nodo S

4

.

x

4UB

=(2,1)

Valore dell'UB per il sottoproblema S

4

: z

4UB

= 7.

Osserviamo che la soluzione trovata è intera! Possiamo

aggiornare il valore del lower bound globale!

(24)

Il nodo S

4

può essere chiuso per ottimalità.

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2 z

1LB

= − ∞

S

3

S

4

z

3UB

=6

z

3LB

= − ∞ z

4UB

=7

z

4LB

= 7 = z

LB

(25)

In seguito all'aggiornamento del valore del lower bound possiamo chiudere anche il nodo S

3

per bound. Infatti: z

3UB

= 6 < z

4LB

.

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2 z

1LB

= − ∞

S

3

S

4

z

3UB

=6

z

3LB

= − ∞ z

4UB

=7

z

4LB

= 7 = z

LB

(26)

Poiché non ci sono altri nodi da esplorare nella lista L, l'algoritmo di Branch & Bound termina con la soluzione ottima intera x* = (2, 1) di valore z* = 7.

Esempio

S

0

S

1

S

2

z

0LB

= − ∞ = z

LB

z

0UB

=59/7

z

1UB

=15/2 z

1LB

= − ∞

S

3

S

4

z

3UB

=6

z

3LB

= − ∞ z

4UB

=7

z

4LB

= 7 = z

LB

(27)

Procedura di Branch-and-Bound

Tramite l’albero di enumerazione, enumeriamo un insieme di soluzioni

“implicitamente” perché alcuni rami dell’albero vengono potati per:

– ottimalità, oppure – bound, oppure – inammissibilità.

Nella procedura di Branch & Bound è importante

• Scegliere la strategia per il calcolo del bound duale.

• Scegliere la variabile su cui applicare la procedura di branching.

• Scegliere la strategia di esplorazione dell'albero di enumerazione.

(28)

Procedura di Branch-and-Bound

Scelta della strategia per il calcolo del bound duale:

EFFICIENZA vs QUALITA' DEL BOUND

Scelta della variabile su cui fare branching:

VARIABILE “PIU' FRAZIONARIA”

(nell'insieme di variabili frazionarie C si sceglie di fare branching sulla variabile jC in corrispondenza di arg max

j∈C

min{f

j

, 1 – f

j

,}, con f

j

= x

j

-  x

j

 )

Scelta della strategia di esplorazione dell'albero di enumerazione

VISITA IN PROFONDITA' (genera rapidamente una soluzione ammissibile, facile riottimizzazione)

VISITA DEL NODO CON MAX z

UB

(minimizza il numero di sottoproblemi

analizzati)

(29)

Procedura di Branch-and-Bound

Siano

L = lista dei sottoproblemi che devono essere risolti

P

i

= formulazione del sottoproblema associato al nodo S

i

.

L’algoritmo di Branch-and-Bound ha il seguente diagramma di

flusso

(30)

Inizializzazione

L=S, z

LB

= - ∞; x* void;

count = 0;

Test: L = ∅ ?

Scegli un problema S

i

dalla lista

Risolvi il Rilassamento Lineare RL

i

su P

i

Caso 2: Bound

P

i

≠ ∅ , z

iUB

valore della soluzione ottima x

iUB

di RL

i

. Se z

iUB

< z

LB

elimina S

i

per bound, vai a Test

Caso 3: Ottimalità

Se P

i

≠ ∅ e x

iUB

è una soluzione ottima intera di Rl

i

elimina S

i

per ottimalità.

Se z

iLB

> z

LB

allora z

LB

=z

iLB,

vai a Test Individua una componente frazionaria k di x

iUB

e ramifica S

i

aggiungendo ad L S

count+1

= S

i

∩ {x

k

= 0}

S

count+2

= S

i

∩ { x

k

= 1}

count = count + 2

Caso 1: Inammissibilità Se P

i

= ∅ elimina S

i

per inammissibilità, vai a Test

Branch-and-Bound

(31)

Esempio

Consideriamo il problema di knapsack

max 30 x

1

+ 36 x

2

+ 15 x

3

+ 11 x

4

+ 5 x

5

+ 3 x

6

9 x

1

+ 12 x

2

+ 6 x

3

+ 5 x

4

+ 3 x

5

+ 2 x

6

< 17 (1) x ∈ {0,1}

6

La soluzione ottima del Knapsack continuo è

x

0UB

= (1, 2/3, 0, 0, 0, 0) di valore 54 (z

0UB

)

Inizializziamo il valore del lower bound uguale al valore di una soluzione ammissibile del problema

x

0LB

= (1, 0, 0, 0, 0, 0) di valore 30 (z

0LB

) z

LB

= 30

Osservazione: Poiché la funzione obiettivo ha coefficienti interi,

possiamo scrivere la condizione di potatura per bound (caso 2)

come  z

iUB

 < z

LB

.

(32)

S

0

S

1

S

2

z1UB = 49.4 z1LB = 45

x2 = 0 x2 = 1

zLB = 45

z0UB = 54

z0LB = 30 = zLB

z2UB = 52.6 z2LB = 36

S

3

S

4

x4 = 0 x4 = 1

z3UB = 48.33 z3LB = 45

z4UB = 48.5

z4LB = 41

S

5

S

6

x1 = 0 x1 = 1

z5UB = 48.5

z5LB = 36

inammissibilità ×

S

7

S

8

x5 = 0 x5 = 1

S

7

z7UB = 48 z7LB = 48

×

zLB = 48

OPT .

z8UB = 47.5 z8LB = 35

bound.

×

z9UBx

S

= 463 = 09 x

S

3 = 110

z9LB = 46

bound .

×

z10UB = 36

z10LB = 36

bound.

×

zx113

S

UB =011 = 47

S

x312 =1 z11LB = 47

OPT .

× inammissibilità ×

Esercizio 1

(33)

Algoritmo di programmazione

dinamica

(34)

Programmazione Dinamica

Schema di principio: Dato un problema di OC, P, la Programmazione Dinamica (PD):

– Risolve un sottoproblema di P all’ottimo.

– Iterativamente “estende” la soluzione a P.

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 – a

r

) che si ottiene da KP eliminando un qualsiasi oggetto r e diminuendo la capacità dello zaino della quantità a

r

.

.

La soluzione ottima di KP(r, b–a

r

) si ottiene da x

*

semplicemente

eliminando la variabile x

r

.

(35)

Esempio

Consideriamo il seguente problema di knapsack:

max 6 x

1

+ 10 x

2

+ 12 x

3

x

1

+ 2x

2

+ 3 x

3

< 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 la capacità b del corrispondente ingombro a

2

:

max 6 x

1

+ 12 x

3

x

1

+ 3 x

3

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

2

.

(36)

Notazione

Siano r e d due interi tali che 1 ≤ r ≤ n, 0 ≤ d ≤ b.

Sia KP (r, d) il problema di knapsack:

max Σ p

j

x

j

Σ a

j

x

j

< d

x ∈ {0, 1}

r

KP (r, d) è un sottoproblema di KP, avente soluzione ottima di valore z

r

(d).

j = 1 r

r

j = 1

(37)

Programmazione dinamica

Con questo formalismo, il valore della soluzione ottima di KP vale z

n

(b).

Calcolo di z

n

(b):

1. Calcolo z

r

(d) per r = {1, …, n}.

2. Per ogni r, calcolo z

r

(d) per d = {0, …, b}.

Osservazione:

z

r

(d) si calcola in modo ricorsivo se conosco i valori z

r - 1

(d)

per d = {0, …, b}.

(38)

Formula ricorsiva

z 1d= { p 0 1 per per d≥a d<a 1 1 }

Condizione iniziale di ricorsione:

Questa condizione implica:

Se z

1

(d) = 0 x

1

= 0

Se z

1

(d) = p

1

x

1

= 1

(39)

Formula ricorsiva

Formula di ricorsione:

La formula implica

Se z

r

(d) = z

r-1

(d) x

r

= 0 [l’oggetto r NON è stato scelto]

Se z

r

(d) = z

r-1

(d–a

r

)+c

r

x

r

= 1 [l’oggetto r E’ stato scelto]

z

r

(d) =

z

r–1

(d) se d < a

r

max{z

r–1

(d), z

r–1

(d–a

r

)+p

r

} se d > a

r

(40)

Algoritmo e complessità

DP-KP n, b, a, c  for d = 0 to a

1

− 1

z

1

d =0;

for d=a

1

to b z

1

d =p

1

;

for m=2 to n

for d= 0 to a

m

−1 z

m

d =z

m−1

d 

for d=a

m

to b

if  z

m−1

d >z

m−1

d−a

m

+p

m

then max =z

m−1

d ;

else max =z

m−1

  b−a

m

+p

m

; z

m

d =max;

return z

n

b 

Osservazione: La complessità dell’algoritmo è O(nb). Poiché dipende dall’intero b

si dice che l’algoritmo ha complessità pseudo polinomiale.

Riferimenti

Documenti correlati

In this paper we consider the use of the evolutionary Particle Swarm Optimization (PSO) algorithm, where the choice of the parameters is inspired by [4], in order to avoid

A running example of LSD-first RadixSort is given in Figure 6.4: the red digits (characters) are the ones that are going to be sorted in the current phase, whereas the green digits

A running example of LSD-first RadixSort is given in Figure 5.5: the red digits (characters) are the ones that are going to be sorted in the.. current phase, whereas the green

Suppose that we solve the continuous relaxation of a STSP with a limited number of subtour elimination constraints, and let x ∗ R ∈ [0, 1] |E| be an optimal solution.. Then the

• operazione di bound: valutazione ottimistica della funzione obiettivo per le soluzioni rappresentate da ciascun nodo (bound ), per evitare lo sviluppo completo di sotto-

Si formuli un modello di PLI per risolvere il problema di scegliere gli investimenti da effettuare in modo da massimizzare il ritorno totale (gli investimenti possono essere scelti

Al contrario dei bound primali , trovare upper (lower) bound di buona qualità per problemi di massimo (minimo) è tipicamente difficile1. Buoni bound duali si ottengono

Poiché per un problema di ottimizzazione combinatoria conosciamo i bound “primali” e i bound “duali”, l’idea è quella di utilizzare tali bound per enumerare gli