Modelli e Algoritmi per la Logistica Branch & Bound Prof. Carlo Mannino Prof. Antonio Sassano Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza A.A
Risolvere la PL01 min c x: x S Problema di PL01: LB(P) min c x: x S = z * Calcolare z* è (di solito) difficile Calcolare lower bound è facile: Formulazione (P) + Simplesso LB(P) z° z*z* gap gap nullo x° ottimo per PL01 PL01 Risolto! Risolvere PL01 : trovare x * sol. ottima, z * = c T x * valore ottimo Quasi sempre il gap non è nullo: che fare? LB(P) = min c x: x P x(P) = argmin c x: x P P formulazione: P {0,1} n = S Soluzione ammissibile nota x ° S
Branch & Bound partizione S in S 1,..., S k z * = min {z 1 *... z k * } S1S1 S4S4 S3S3 S5S5 S6S6 S2S2 x1*x1* x2*x2* x3*x3* x4*x4* x6*x6* x5*x5* z i * =z(x i * )= valore ottimo di S 6 non contiene una soluzione migliore di x 1 * Ignora S 6 min c x: x S Problema di PL01: min c x: x S i LB i = LB(P i ) = min c x: x P i x(P i ) = argmin c x: x P i LB i z i * =z(x i * ) P i formulazione: P i {0,1} n = S i Idea: enumerazione implicita
Branch & Bound - Separazione S1S1 S2S2 x1*x1* x2*x2* x° S : z(x°)=UB Soluzione incombente (ad es. euristica) UB upper bound per il problema P formulazione: P {0,1} n = S LB(P) z(x * ) z(x°)=UB S x* x° LB(P) < UB LB(P) z° z*z* gap Idea: P 1 e P 2 create a partire da P. Come? (gap non nullo!) Suddividi S!
Branch & Bound - Separazione Come si decompone un problema P i (branching)? Ipotesi: S i {0,1} n scegli una componente k (frazionaria) di x ( P i ) scelta di k variabile più vicina ad essere intera variabile più frazionaria ordine predefinito Risolvi il rilassamento: min c x: x P i Supponiamo che : LB ( P )< UB e che x ( P i ) S i S ( gap 0 e soluzione del rilassamento FRAZIONARIA ) Partiziona P i in (P i0, P i1 )
B&B – Aggiornamento Incombente x° S : z(x°)=UB Soluzione incombente (ad es. euristica) UB upper bound per il problema Supponiamo che : x ( P i ) S i S (soluzione del rilassamento INTERA) S1S1 S4S4 S3S3 S5S5 S6S6 S2S2 x1*x1* x2*x2* x3*x3* x4*x4* x6*x6* x5*x5* Ottima? No (è ottima per S i ma non per S )... Ma se z( P i )= c T x( P i ) < z ( x° ) Ho trovato una soluzione migliore dellincombente !! Aggiorno incombente x° : = x( P i ) P i formulazione di S i Risolvi il rilassamento: min c x: x P i
Branch & Bound inizializzazione: L = P, x°, UB x° ottima si L = ? no scegli P i L calcola LB i =z(P i ) = c T x(P i ) LB i UB ? si UB:=LB i e x° : = x ( P i ) si decomponi P i in P i1... P ik L = L {P i1... P ik } no x ( P i ) S ? no L =lista dei sottoproblemi (formulazioni) da risolvere (problemi aperti)
Branch & Bound calcolo LB i : Rilassamento Lineare Posso scegliere una buona formulazione P i per S i per ottenere un miglior LB i (Branch and Cut) Come si sceglie il problema P i L ? : problema con minimo LB (best bound) LIFO (ultimo problema nella lista) FIFO (primo problema nella lista)
Esempio { 1,2,3,4 } soluzione del rilassamento: LB = 10,4 UB = 14
Esempio UB = 14
Esempio UB = 14 { 1,2,3,4 } LB = 11,5 LB 14 =UB
Esempio UB = 14 { 1,2,3,4 } LB 14 = UB LB = 13,6 LB = 12 x intera aggiorna UB ottima Costi interi: z * intero
Esempio x1x1 x2x2 1 1,25 6,5 5 x x 1 4 x1x1 B LB = 11 A UB = 13,4
Esempio x1x1 x2x2 1 1,25 6,5 45 LB = 11 C UB = 11
Esempio LB = 11 D UB = 13 x1x1 x2x2 1 1,25 6, x 2 3 x 2 2 x2x2 3 P =
Esempio LB = 11 E UB = 12 x1x1 x2x2 1 1,25 6, aggiorna LB x ottima x intera
Lower Bound = Certificato di Qualità min c x: x S Problema di PL01: 1. Se LB(P) = c x P ¡Ã c x°, x° soluzione ottima PL01 risolto LB(P) = min c x: x P x P = argmin c x: x P P formulazione: P {0,1} n = S Quasi sempre 1. o 2. non sono verificati: che fare? OSS: S è piccolo più facile verificare 1. o 2. x° S: soluzione incombente (nota) 2. Se x P {0,1} n x P S soluzione ottima PL01 risolto Idea: applica tecnica del divide et impera