3.4 Metodo di Branch and Bound Consideriamo un generico problema di Ottimizzazione Discreta dove X è la regione ammissibile. (P ) z = max{c(x) : x X} Metodologia generale di enumerazione implicita (Land e Doig 1960) basata sull esplorazione parzialmente implicita della regione ammissibile X. Una parte delle soluzioni ammissibili vengono escluse senza essere considerate esplicitamente. 1) Principio dividi e impera Idea: suddividere in modo ricorsivo la regione ammissibile per ricondurre la risoluzione del problema (P ) alla risoluzione di una sequenza di sottoproblemi più piccoli e più facili. Osservazione: Sia X = X 1... X k una partizione di X in k sottoinsiemi (X i X j = per ogni coppia di indici i j) e z i = max{c(x) : x X i } per 1 i k. Chiaramente z = max 1 i k z k. Partizione ricorsiva della regione ammissibile operazione di branching. 1
La procedura può essere rappresentata mediante l albero di enumerazione/decisionale con nodo radice associato a X e un nodo per ogni X i. Esempi: 1) X {0, 1} 3 (albero binario) 2) X l insieme di tutti i cicli Hamiltoniani di un dato grafo orientato G = (V, A) (albero multiplo) 2) Enumerazione implicita L enumerazione esplicita è troppo onerosa dal punto di vista computazionale anche per istanze di piccole dimensioni, non basta dividere ricorsivamente la regione ammissibile. Idea: sfruttare i limiti superiori ed inferiori (bound primali e duali) sui valori z i, con 1 i k, per evitare di esplorare esplicitamente certe parti della regione ammissibile X. Osservazione: Sia X = X 1... X k una partizione di X e z i = max{c(x) : x X i } per 1 i k. Inoltre siano l i un limite inferiore e u i un limite superiore su z i, ovvero l i z i u i. Allora l = max 1 i k l i è un limite inferiore e u = max 1 i k u i un limite superiore su z, ovvero l z u. 2
Casi in cui i bound primali e duali per l i-esimo sottoproblema possono essere sfruttati nella fase di esplorazione: Se u i = l i, non è necessario esaminare ulteriormente la sottoregione X i visto che abbiamo trovato una soluzione ottima in X i di valore z i = u i = l i. Il nodo corrispondente può essere chiuso criterio di ottimalità. Se il limite superiore u i è inferiore al valore della migliore soluzione ammissibile trovata finora o al più grande limite inferiore l j, non è necessario esaminare la sottoregione X i perché non può contenere una soluzione ammissibile migliore. Il nodo corrispondente può essere chiuso criterio di bounding. Se X i =, il nodo corrispondente può essere chiuso criterio di inammissibilità. Quattro esempi con due sottoproblemi (nodi), compreso uno in cui le regioni ammissibili dei due sottoproblemi devono essere esaminate. Se un sottoproblema non è risolto, si procede in modo ricorsivo generando dei sottoproblemi mediante branching. 3
Metodo di Branch and Bound (per problema di max), basato su tre principali ingredienti: - limiti superiori: metodo efficiente per determinare un limite superiore u su z di buona qualità - regola di branching: procedura per partizionare la regione ammissibile X in sottoregioni più piccole - limiti inferiori: euristica efficiente per cercare una soluzione ammissibile x di valore c( x) elevato, che fornisce un limite inferiore c( x) su z. Si mantiene un limite superiore globale UB ( upper bound ) su z e una lista L dei sottoproblemi attivi con per ciascuno un limite inferiore l i e un limite superiore u i su z i. Inoltre si memorizza e aggiorna la migliore soluzione ammissibile x LB trovata finora e il suo valore LB ( lower bound ). All inizio L = {P } dove (P ) è il problema di partenza. Si determina un limite superiore u risolvendo il rilassamento di (P ) e si pone UB := u. Tramite l euristica (primale) si cerca una soluzione ammissibile migliore possibile, che si memorizza in x LB e il suo valore in LB. Ad ogni iterazione, si estrae un sottoproblema (P i ) da L e si decide se va esaminata la corrispondente sottoregione ammissibile X i effettuando un operazione di branching, o se è applicabile uno dei tre criteri del lucido precedente. Quando viene generato un sottoproblema si determinano anche i limiti superiori e inferiori. I sottoproblemi che non soddisfano alcuno dei tre criteri sono inseriti in L. 4
Metodo generale, basta decidere 1. come scegliere il successivo sottoproblema (nodo) da esaminare 2. come generare i sottoproblemi di un dato sottoproblema (i nodi figlio ) 3. come calcolare le stime per eccesso ( bound superiori ) o per difetto ( bound inferiori ) L efficienza del metodo B&B dipende dall efficacia del criterio di branching e dalla qualità dei bound primali e duali. NB: Il metodo Branch and Bound è applicabile anche ai problemi di ottimizzazione non lineare continua e mista intera. 5
3.4.1 Branch and Bound per i problemi di PLI Consideriamo un PLI: di cui cerchiamo una soluzione ottima x P LI. z P LI = max{c t x : Ax = b, x 0 interi} (1) Risolviamo il rilassamento continuo di (1) ottenendo una soluzione ottima x P L di valore z P L. Ovviamente z P LI = c t x P LI z P L = c t x P L. Se x P L è intera, allora è anche ottima per il PLI. Altrimenti x P L ha almeno una componente frazionaria. Branching Risolvere il rilassamento continuo di (1). Se x P L non è intera, scegliere una componente frazionaria x h e generare i due sottoproblemi: z 1 P LI = max{c t x : Ax = b, x h x h, x 0 intero} z 2 P LI = max{c t x : Ax = b, x h x h + 1, x 0 intero} con sottoregioni X 1 e X 2 di X, esaustive e mutualmente esclusive. Chiaramente z P LI = max{z 1 P LI, z2 P LI }. 6
Procedimento ricorsivo: si risolve il rilassamento continuo di ogni sottoproblema di PLI e, se necessario, si effettua per ciascuno un operazione di branching. Bounding Consideriamo il i-esimo sottoproblema con la sottoregione ammissibile X i. Risolvere il suo rilassamento continuo, sia x P L la soluzione ottima trovata e zi P L il suo valore. Chiaramente, se tutti i coefficienti c i sono interi, ogni soluzione ammissibile del PLI in X i ha un valore zp i L. Nel Branch and Bound si alternano operazioni di branching e bounding, memorizzando e aggiornando la migliore soluzione trovata. Da decidere: 1. come scegliere il successivo sottoproblema (nodo) da esaminare 2. come generare i nodi figlio del nodo scelto (scelta variabile di branching) 3. come determinare le stime per difetto, ovvero quale euristica usare per ottenere i limiti inferiori sul valore ottimo della funzione obiettivo 7
1. Scelta del sottoproblema (nodo) da elaborare per primo prima quelli più profondi (tecnica depth first ): procedimento ricorsivo semplice ma costoso in caso di scelta sbagliata prima quelli più promettenti in termini di bound (tecnica best bound first ): si tende a generare meno nodi ma problemi meno vincolati si aggiorna raramente la migliore soluzione trovata 2. Scelta della variabile frazionaria di branching Non è detto che convenga scegliere una variabile frazionaria con la parte frazionaria più vicina a 0.5. Esempio 1: Risolvere il problema di PLI max 4x 1 x 2 s.v. 4x 1 + 2x 2 19 10x 1 4x 2 25 x 2 9 2 x 1, x 2 Z + con il metodo di Branch and Bound, determinando le soluzioni ottime dei rilassamenti continui per via grafica. Si esegua prima il branching rispetto alla variabile x 1. 8
Esempio 2: Risolvere il problema dello zaino binario max 10x 1 + 12x 2 + 5x 3 + 7x 4 + 9x 5 s.v. 5x 1 + 8x 2 + 6x 3 + 2x 4 + 7x 5 14 x 1,..., x 5 {0, 1} con il metodo di Branch and Bound, determinando le soluzioni ottime dei rilassamenti continui mediante una semplice procedura greedy. 9