• Non ci sono risultati.

Algoritmo di Branch & Bound

N/A
N/A
Protected

Academic year: 2021

Condividi "Algoritmo di Branch & Bound"

Copied!
25
0
0

Testo completo

(1)

Algoritmo di Branch & Bound

Corso di: Ottimizzazione Combinatoria

“Sapienza” Università di Roma - Dipartimento di Ingegneria Informatica, Automatica e Gestionale

Docente: Renato Bruni

[email protected]

(2)

Vogliamo Risolvere PLI (o PL01)

min cTx

Dato un problema di Programmazione Lineare Intera (o Binaria),

vogliamo trovare numericamente, nell’insieme ammissibile S, l’ottimo x*

P x ∈ S

Come visto, S è spesso espresso come l’insieme di punti interi (o binari) all’interno di un poliedro P (formulazione scelta, S = P ∩ Zn )

x

P (es. Ax ≥ b)

x

Zn (o x ∈ {0,1}n)

min cTx

(3)

Possibili Approcci

Dato che generalmente il numero di punti ammissibili è finito, si potrebbe pensare ad una enumerazione

Ma, per problemi appena realistici questi punti sono un numero enorme:

l’enumerazione completa richiederebbe tempi improponibili, come visto nella prima lezione

Serve eventualmente un altro tipo di enumerazione

P

Attenzione: arrotondando all’intero più vicino una soluzione del problema di PL non ho

nessuna garanzia né di ottimalità né di

ammissibilità (soprattutto per problemi binari)

Oppure si potrebbe pensare di migliorare la formulazione del

problema, o di approssimare per eccesso e per difetto la soluzione fino a far incontrare le due approssimazioni (gap = 0 ottimo)

(4)

Idee di Base del Branch & Bound

Approccio di soluzione basato sull’enumerazione implicita. Idee di base:

Partizionare l’insieme ammissibile in sottoinsiemi

più facili Pi (sottoproblemi)

i Pi = P

Pi

Pj = ∅ i ≠ j

Procurarsi una soluzione ammissibile (ottimo corrente) ad esempio risolvendo il problema su alcuni sottoinsiemi, o tramite un euristica Continuare a risolvere il problema sui restanti sottoinsiemi

scartando quelli dove quanto di meglio potrei ottenere (dato dal lower bound) non è migliore di quanto già ho (ottimo corrente) analizzando gli altri: aggiornando l’ottimo corrente nel caso di soluzioni ammissibili migliori o partizionando ulteriormente i sottoinsiemi non abbastanza facili

(5)

Come Fare Ciò?

Per mettere in pratica queste idee servono delle tecniche per effettuare:

Bounding: tecniche per valutare quanto di meglio potrei ottenere su un sottoinsieme Pi

Branching: tecniche per generare i sottoproblemi Pi

Vogliamo approssimare per difetto la soluzione ottima del

sottoproblema: trovare lower bound cTx* (limitatamente a Pi)

Cerco compromesso tra velocità di calcolo e accuratezza del bound:

tanti più sottoproblemi posso eliminare, tanto più velocizzo la soluzione del problema complessivo

Vogliamo generare sottoproblemi abbastanza facili ma non troppo numerosi

(6)

Bounding 1

Rilassamento Lineare (più usato): elimino i vincoli di interezza del sottoproblema Pi Ho problemi di PL, risolubili facilmente ad es. col simplesso

Il minimo di cTx scegliendo tra tutti i punti (interi o meno) sarà ≤ del minimo della stessa funzione scegliendo solo tra i punti interi

L’accuratezza, cioè la distanza dall’ottimo intero del sottoproblema, dipenderà dalla qualità della formulazione Pi del sottoproblema Si

In alcuni casi fortunati potrei trovare direttamente l’ottimo intero di Si

Si Si

Pi Pi

(7)

Bounding 2

Rilassamento di altri vincoli difficili, ottenendo un sottoproblema più facile con insieme ammissibile più grande

Sono possibili anche altre tecniche per individuare un lower bound:

Aumentando il numero di punti tra cui scegliere, il minimo di cTx non potrà che diminuire o restare uguale

Modifica della funzione obiettivo in modo che la nuova funzione obiettivo sia ≤ cTx sul sottoinsieme Pi (= ci dia un lower bound) ma renda il sottoproblema più facile

(8)

Branching

Binario agli interi più vicini (più usato): se risolvendo il rilassamento lineare trovo una soluzione x che ha componenti non intere (dette frazionarie), ad es. xk con valore vk

Così elimino una striscia di Pi che però non contiene soluzioni intere:

tagliando in questo modo avrò prima o poi soluzioni intere ai rilassamenti

Pi era un sottoinsieme non abbastanza facile lo partiziono in Pi+1 e Pi+2

Pi+1 = Pi{x: xk

vk

} P

i+1 Pi+2

vk xk

Pi+2 = Pi{x: xk

vk

}

vk vk

Per problemi binari semplicemente fisso la variabile a 0 e a 1

(9)

Assemblando le Parti

Siamo adesso in grado di costruire uno schema complessivo di Branch & Bound per problemi di minimo del tipo descritto

Indichiamo con L la lista dei sottoproblemi Pi da risolvere (problemi aperti);

con xo l’ottimo corrente, con UB (upper bound) il valore cTxo cTx* ;

con LBi e x(Pi) rispettivamente il lower bound trovato per il sottoproblema Pi e la soluzione ad esso corrispondente

x

P

x

Zn (o x ∈ {0,1}n)

min cTx

(10)

Schema del Branch & Bound per min

inizializzazione: L= P0, x° indef., UB= +inf.

x° è l’ottimo x* cercato,STOP L = ∅ ? si

no

scegli Pi

L calcola LBi e x(Pi) con rilass.

Scegli componente fraz. xk per branching

L = L ∪{Pi+1 , Pi+2} si

no x(Pi) intero ?

aggiorna UB:=LBi e x° := x(Pi)

si

LBi < UB ? no

(11)

Ulteriori Aspetti

Scelta del sottoproblema PiL

quello con minimo LB (best bound: più promettenti) LIFO (last in first out)

FIFO (first in first out)

Scelta della variabile di branching xk

variabile più intera

variabile più frazionaria ordine predefinito

Tutte le scelte influenzano l’evoluzione dell’algoritmo, quindi i tempi di calcolo

Purtroppo non esiste una scelta che sia sempre la migliore per tutti i problemi

Precisione numerica nei confronti e tolleranza interi

(12)

Osservazioni

È un algoritmo esatto, cioè garantisce, dato tempo sufficiente e a meno di imprecisioni numeriche (sempre presenti su macchine reali) di trovare l’ottimo se esso esiste

Per problemi di max è tutto speculare: dai ril. lin. ottengo UBi ; l’ottimo corrente è un LB, che inizializzo a –inf ; il confronto è UBi > LB

L’evoluzione dell’algoritmo è rappresentabile come la visita di un albero (detto albero di branching, vedremo in seguito su un esempio)

Implica la risoluzione di un gran numero di rilassamenti lineari, infatti la PLI è più complessa della PL

Se ho formulazioni buone dei vari problemi ho LB migliori: posso allora cercare di migliorare queste formulazioni (detto Branch & Cut)

Se ho una formulazione iniziale così buona (ottima) che la soluzione del primo rilassamento è già intera, ho la soluzione ottima intera senza alcun branching (cioè velocemente)

(13)

Esempio 1

x1 x2

UB0 = 7/2

x(P

0

)

max –x1 + 2x2 -4x1 + 6x2 ≤ 9

x1 + x2 ≤ 4 x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 3/2 x2 = 5/2

P

0

x1 ≥ 2 x1 ≤ 1

P

1

P

2

x1

soluzione frazionaria, non ho ottimo corrente, devo fare branching, ad esempio su x1

3/2

4

vincolo 2 vincolo 1 obiettivo

x(P0)

(14)

Esempio 1

x1 x2

soluzione intera, aggiorno ottimo corrente, no branching

UB2 = 2 max –x1 + 2x2

-4x1 + 6x2 ≤ 9 x1 + x2 ≤ 4 x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 2 x2 = 2

P

2

x1 ≥ 2

x(P

2

)

x(P2)

(15)

Esempio 1

x1 x2

UB1 > valore ottimo corrente, la soluzione è frazionaria, sono

costretto a fare branching

UB1 = 10/3 max –x1 + 2x2

-4x1 + 6x2 ≤ 9 x1 + x2 ≤ 4 x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 1 x2 = 13/6

P

1

x1 ≤ 1

x2 ≥ 3 x2 ≤ 2

P

3

P

4

x2

x(P

1

)

x(P1)

(16)

Esempio 1

x1 x2

problema inammissibile, lo chiudo

max –x1 + 2x2 -4x1 + 6x2 ≤ 9

x1 + x2 ≤ 4

x1 , x2 ≥ 0 x1 , x2 ∈ Z

P

4

x1 ≤ 1 x2 ≥ 3

(17)

Esempio 1

x1 x2

UB3 > valore ottimo corrente, la soluzione è frazionaria, sono

costretto a fare branching

UB3 = 13/4 max –x1 + 2x2

-4x1 + 6x2 ≤ 9 x1 + x2 ≤ 4

x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 3/4 x2 = 2

P

3

x1 ≤ 1

x1 ≥ 1 x1 ≤ 0

P

5

P

6

x1 x2 ≤ 2

x(P

3

)

x(P3)

(18)

Esempio 1

x1 x2

UB6 > valore ottimo corrente, la soluzione è intera, aggiorno ottimo corrente

UB6 = 3 max –x1 + 2x2

-4x1 + 6x2 ≤ 9 x1 + x2 ≤ 4

x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 1 x2 = 2

P

6

x1 ≤ 1 x2 ≤ 2 x1 ≥ 1

x(P

6

)

x(P6)

(19)

Esempio 1

x1 x2

UB5valore ottimo corrente, allora posso chiudere il problema e l’ottimo corrente x(P6) è l’ottimo complessivo

UB5 = 3 max –x1 + 2x2

-4x1 + 6x2 ≤ 9 x1 + x2 ≤ 4

x1 , x2 ≥ 0 x1 , x2 ∈ Z

x1 = 0 x2 = 3/2

P

5

x1 ≤ 1 x2 ≤ 2 x1 ≤ 0

x(P

5

)

x(P5)

(20)

Albero di Branching

L’evoluzione dell’algoritmo in questo esempio 1 si può rappresentare così

P

0

x =(3/2; 5/2) z =7/2

P

1

x =(1; 13/6) z =10/3

P

2

x =(2; 2) z =2

P

3

x =(3/4; 2) z =13/4

P

4

inammissibile

P

5

x =(0; 3/2) z =3

P

6

x =(1; 2) z =3

(21)

Esempio 2





≤ +

≤ +

+

2 2 1

2 1

2 1

2 1

0 0

13 2

2

5 4

4 max

Z x

x x

x x

x x

x x

x1 x2

1 1,25

5 6,5

x1 ≥ 5

4

x1 ≤ 4

x1

B



=

= ˆ 2 ˆ 3

2 1

x

B x LB = 11

A



=

=

3 , ˆ 2

2 , ˆ 4

2 1

x

A x UB0 = 13,4

P

0

P

1

P

2

e disponiamo anche di una soluzione ammissibile B

vincolo 2

vincolo 1 obiettivo

(22)

Esempio 2





≤ +

≤ +

+

2 1

2 1

2 1

2 1

2 1

5

0 0

13 2

2

5 4

4 max

Z x

x

x x

x x

x x

x x

x1 x2

1 1,25

4 5 6,5

LB = 11

C



=

=

5 , ˆ 1

ˆ 5

2 1

x

C x UB

2 = 11

P

2

Chiudo il sottoproblema perché non migliore del LB

(23)

Esempio 2





≤ +

≤ +

+

2 1

2 1

2 1

2 1

2 1

4

0 0

13 2

2

5 4

4 max

Z x

x

x x

x x

x x

x

x LB = 11

D



=

=

25 , ˆ 2

ˆ 4

2 1

x

D x UB

1 = 13

x1 x2

1 1,25

4 5 6,5 2

x2 ≥ 3 x2 ≤ 2 x2

3

vuoto

P

1

P

3

P

4

(24)

Esempio 2









≤ +

≤ +

+

2 2

1

2 1

2 1

2 1

2 1

2 4

0 0

13 2

2

5 4

4 max

Z x

x x

x x

x x

x x

x

x LB = 11

E



=

= ˆ 2 ˆ 4

2 1

x

E x UB3 = 12

x1 x2

1 1,25

4 5 6,5 2

3

aggiorna LB x ottima

x intera

P

3

(25)

Albero di Branching

L’evoluzione dell’algoritmo in questo esempio 2 si può rappresentare così

P

0

x =(4,2; 2,3) z =13,4

P

1

x =(4; 2,25) z =13

P

2

x =(5; 1,5) z =11

P

3

x =(4; 2) z =12

P

4

inammissibile

Riferimenti

Documenti correlati

Ottimizzazione multivariabile lineare con vincoli lineari (Linear Programming, LP) e formulazione standard di un problema LP.. Ottimizzazione multivariabile nonlineare con vincoli

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

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

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-

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

Si riformuli la funzione obiettivo dell’esempio 1.34 usando le matrici di permutazione x