informatica |
Branch-and-Bound
Consideriamo il problema:
min
Sia x* la sua soluzione ottima di valore z* e x° la soluzione ottima del problema di PL ottenuto rilassando il vincolo di integralità di valore z°
Ovviamente z°= cTx° z* = cTx*
Se anche x° è intero allora z° = z* e x* = x°
Altrimenti sia x°i una componente frazionaria di x°. Possono darsi solo due casi (mutuamente esclusivi):
x*i x°i oppure x*i x°i
ovvero la componente i-esima del vettore ottimo x* sarà o al massimo uguale al massimo intero contenuto in x°i , oppure non minore del minimo intero contenente x°i
BRANCH
Il problema originale dà origine a due problemi con regioni di ammissibilità ad intersezione nulla:
z' = min
z'' = min
e avremo z* = min .
Se rilassiamo il vincolo di integralità in questi due problemi e chiamiamo con x' ed x'' i due vettori di variabili ottimi, questi saranno in generale ancora non interi e si dovrà continuare a ramificare ("branch"). Ad ogni ramificazione si generano due nuovi problemi a meno che uno dei due non risulti intero oppure con regione di ammissibilità vuota (problema di PL inammissibile).
I vari problemi generati in questo modo possono memorizzarsi con una struttura dati costituita da un albero binario detto albero di decisione T.
BOUND
Consideriamo il k-esimo nodo dell'albero binario T e indichiamo con xk e zk rispettivamente il vettore ottimo e il valore della soluzione ottima del corrispondente problema di PL ottenuto rilassando il vincolo di integralità.
IN GENERALE SI DEVE DECIDERE:
Vediamo come si presenta un generico algoritmo di Branch-and-Bound
begin
activeset := ;
//0 nodo di T corrispondente al problema originale//
currentbest := Φ ; b :=
//currentbest memorizza il nodo corrispondente alla migliore soluzione disponibile e b il suo valore//
while activeset //insieme vuoto// do
begin
scegli un nodo k di activeset per ramificare ;
activeset := activeset ;
genera i li ki di k , i=1,2,.,nk e calcola i corrispondenti lower bounds zi ;
for i := 1 to nk do
if zi b then chiudi il nodo ki else
if ki fornisce una soluzione completa(§)
then b := zi and currentbest := ki
else activeset := activeset
end
end
(§) si preferisce parlare di soluzione "completa" invece che "intera" per offrire una versione più generica dell'algoritmo
Progetto e proprietà di un algoritmo di Branch-and-Bound
A) Generazione dei li
binaria oppure multipla
con quale ordinamento delle variabili
B) Strategia di esplorazione
Best-first
Depth-first
Altro
C) Stime ("bounds")
tramite rilassamento del vincolo di integralità
con altri rilassamenti (Lagrangiani o surrogati)
D) Inizializzazione: è spesso utile ottenere mediante un metodo euristico una soluzione ammissibile (subottima)
E) Riduzione: prima di iniziare fissare più variabili possibile
F) Arresto anticipato: possibilità di sovrastimare l'errore commesso
GUB BRANCH
Molti modelli contengono vincoli GUB (Generalized Upper Bounding) del tipo Sj=1,.,k xj=1 con xj binarie. Se la soluzione del rilassamento lineare ha alcune variabili x1*,.,xk* frazionarie, la regola di branch standard distingue i due casi xj=0 e xj=1 per un certo indice j. Tuttavia a causa del vincolo GUB il primo caso lascia aperte k-l possibilità, mentre il secondo caso ne permette solo una. Questo porta ad un albero decisionale di B&B sbilanciato.
"GUB branching" corregge questa caratteristica, specificando un ordine delle variabili (che può essere diverso da quello originario, ma che qui per semplicità di scrittura assumiamo sia uguale), e pone
S1 = S
S2 = S
dove r = min . In molti casi tale regola di branch riduce notevolmente il numero di nodi dell'albero decisionale.
Privacy
|
© ePerTutti.com : tutti i diritti riservati
:::::
Condizioni Generali - Invia - Contatta