Sunteți pe pagina 1din 7

TEMA 1

METODA BRANCH AND BOUND (B&B)

Branch and bound este o paradigmă de proiectare a algoritmului


pentru probleme de optimizare discrete și combinatorii, precum și
optimizare matematică. Un algoritm branch and bound constă dintr-o
enumerare sistematică a soluțiilor candidate prin intermediul căutării
spațiului de stare: setul de soluții candidate este considerat a forma un
arbore înrădăcinat cu setul complet la rădăcină.
Algoritmul explorează ramurile acestui arbore, care reprezintă
subseturi ale setului de soluții. Înainte de a enumera soluțiile candidate
ale unei ramuri, ramura este verificată în raport cu limitele estimate
superioare și inferioare ale soluției optime și este aruncată dacă nu
poate produce o soluție mai bună decât cea mai bună găsită până acum
de algoritm. Algoritmul depinde de estimarea eficientă a limitelor
inferioare și superioare ale regiunilor / ramurilor din spațiul de
căutare. Dacă nu sunt disponibile limite, algoritmul degenerează către
o căutare exhaustivă.
Metoda a fost propusă pentru prima dată de Ailsa Land și Alison
Doig în timp ce desfășurau cercetări la London School of Economics
sponsorizată de British Petroleum în 1960 pentru programare discretă
și a devenit instrumentul cel mai frecvent utilizat pentru rezolvarea
problemelor de optimizare NP-hard. Numele „branch and bound” a
apărut pentru prima dată în lucrarea lui Little și alții, la problema
vânzătorului călător.

Prezentare generală

Scopul unui algoritm branch and bound este de a găsi o valoare x


care maximizează sau minimizează valoarea unei funcții cu valoare
reală f(x), numită funcție obiectivă, printre unele seturi S de soluții
admisibile sau candidate. Setul S se numește spațiu de căutare sau
regiune fezabilă. Restul acestei secțiuni presupune că se dorește
minimizarea f(x); această presupunere vine fără pierderea generalității,
deoarece se poate găsi valoarea maximă a lui f(x) găsind minimul lui
g(x) = −f(x).

1 din 7 Profesor A.D.


Un algoritm branch and bound funcționează în conformitate cu
două principii:

1. Împarte recursiv spațiul de căutare în spații mai mici, apoi


minimizează f(x) pe aceste spații mai mici; divizarea se numește
ramificare.
2. Ramificarea singură ar însemna o enumerare cu forță brută a
soluțiilor candidate și testarea tuturor. Pentru a îmbunătăți
performanța căutării cu forță brută, un algoritm branch and
bound ține evidența limitelor minime pe care încearcă să le
găsească și le folosește pentru a „tăia” spațiul de căutare,
eliminând soluțiile candidate pe care le poate dovedi că nu vor
conține o soluție optimă.

Transformarea acestor principii într-un algoritm concret pentru o


problemă specifică de optimizare necesită un fel de structură de date
care reprezintă seturi de soluții candidate. O astfel de reprezentare se
numește o instanță a problemei. Indicați setul de soluții candidate ale
unei instanțe I prin SI. Reprezentarea instanței trebuie să vină cu trei
operații:

(1) branch(I) produce două sau mai multe instanțe care reprezintă
fiecare un subset al SI. (De obicei, subseturile sunt disjuncte
pentru a împiedica algoritmul să viziteze aceeași soluție
candidată de două ori, dar acest lucru nu este necesar. Cu toate
acestea, soluția optimă dintre SI trebuie să fie conținută în cel
puțin unul dintre subseturi.)
(2) bound(I) calculează o legătură inferioară a valorii oricărei
soluții candidate în spațiul reprezentat de I, adică bound(I) ≤ f (x)
pentru toți x în SI.
(3) solution(I) determină dacă I reprezintă o singură soluție
candidat. (Opțional, dacă nu, operațiunea poate alege să
returneze o soluție fezabilă din SI.)

Folosind aceste operații, un algoritm B&B efectuează o căutare


recursivă de sus în jos prin arborele instanțelor format de operația de
ramificare (branch).

2 din 7 Profesor A.D.


La vizitarea unei instanțe I, verifică dacă bound(I) este mai mare
decât limita inferioară pentru o altă instanță pe care a vizitat-o deja;
dacă da, pot fi exclus în siguranță din căutare și recursivitatea se
oprește. Acest pas de tăiere este de obicei implementat prin menținerea
unei variabile globale care înregistrează limita inferioară minimă
văzută în toate cazurile examinate până acum.
Metoda Branch și Bound poate fi aplicată la multe probleme, dar
funcționează cel mai bine atunci când avem o estimare clară a
costurilor viitoare. Dacă are doar o estimare slabă, poate consuma prea
multă memorie și prea mult timp pentru a fi util. În unele cazuri, nu
există nici o modalitate de estimare a costurilor viitoare, caz în care o
căutare se numește căutare oarbă. Dacă este posibilă o estimare,
aceasta se numește căutare informată.

 Best-First Search este o variantă oarbă a Branch și Bound în


care se presupune că toate costurile viitoare sunt egale. Când se
găsește o soluție, aceasta este cea mai ieftină, dar o astfel de
căutare este rareori practică.
 Greedy Search este o variantă a Branch și Bound în care toate
costurile anterioare sunt ignorate. Intenția este de a găsi o
soluție cât mai repede posibil. Soluția nu este neapărat optimă.

Problema inițială de programare liniară întreagă mixtă este


următoarea:

Max: 23x1 + 19x2 + 28x3 +14x4+ 44x5.


8 x1 + 7x2 + 11x3 + 6x4+ 19x5 ≤ 25
x1 , x2 ,x3 , x4 , x5 = 0 sau 1

Deoarece această problemă este greu de rezolvat, vom rezolva problema


relaxată, care este următoarea:

Max: 23x1 + 19x2 + 28x3 +14x4+ 44x5.


8 x1 + 7x2 + 11x3 + 6x4+ 19x5 ≤ 25
0 ≤ x1 , x2 ,x3 , x4 , x5 ≤ 1

3 din 7 Profesor A.D.


Setul de soluții fezabile este donat ca R_0, care este prezentat mai jos:

R={x | 8x1 + 7x2 + 11x3 + 6x4+19x5 ≤ 25; 0 ≤ x1 , x2 ,x3 , x4 , x5 ≤ 1}

iar soluția la problema relaxată este următoarea:

x1=x2=1, x3=10/11, x4=x5=0.

Pe baza acestei soluții, pasul următor vom face ramificare pe x_3, iar
noul subset de soluții rezultat este după cum urmează:

R0=R, R1=R0 ∩ {x | x3=0} și R2=R0 ∩ {x | x3=1}

În acest fel, arborele ramificat este după cum urmează:

4 din 7 Profesor A.D.


Este important să ne dăm seama că programele liniare întregi
mixte sunt NP-hard. Aproximativ vorbind, acest lucru înseamnă că
efortul necesar pentru a rezolva un program liniar întreg mixt crește
exponențial odată cu dimensiunea problemei. Deși este puțin probabil
ca algoritmul B&B să fie nevoit să genereze fiecare nod posibil,
necesitatea de a explora chiar și o mică parte din numărul potențial de
noduri pentru o problemă mare poate fi intensivă în resurse.
Între timp, o serie de tehnici pot accelera progresul căutării
algoritmului B&B. Euristicile sunt folosite pentru a găsi soluții fezabile,
care pot îmbunătăți limitele superioare ale soluțiilor de programe
liniare întregi mixte. Tăierea planurilor poate reduce spațiul de căutare
și astfel poate îmbunătăți limitele inferioare ale soluțiilor de programe
liniare întregi mixte. Atunci când se utilizează planuri de tăiere,
algoritmul B&B este numit și algoritm branch and cut (B&C).
Preprocesarea poate reduce dimensiunea problemei și poate îmbunătăți
rezolvarea problemei.

Algoritmul B&B

Metoda Branch and Bound foloseste la rezolvarea problemelor la


care domeniul în care se caută soluţia este foarte mare şi nu se cunoaşte
un alt algoritm care să conducă mai rapid la rezultat. Problemele care
pot fi abordate prin această metodă pot fi modelate într-un mod
asemănator celui folosit la metoda Backtracking. Se pleacă de la o
configuraţie iniţială şi se reţine şirul de operaţii prin care aceasta este
transformată într-o configuraţie finală dacă aceasta este dată, în alte
cazuri se cere configuraţia finală ştiind că trebuie să verifice anumite
condiţii de optim.
Diferenţa dintre cele două metode constă în faptul că metoda
Backtracking la fiecare etapă selectează un singur succesor după care
se face verificarea condiţiilor de continuare, iar metoda Branch and
Bound generează la fiecare pas toate configuraţiile posibile (toţi
succesorii) care rezultă din cea curentă şi le stochează într-o listă. Se
alege apoi un element din listă după un criteriu ce depinde de problemă
şi se reia procesul de expandare.

5 din 7 Profesor A.D.


Alegerea optimă a unui element din această listă pentru
expandare se face cu ajutorul unei funcţii f=g+h în care g este o funcţie
care măsoară lungimea drumului parcurs de la configuraţia iniţială
până la nodul curent iar h este o funcţie (euristică) care estimează
efortul necesar pană se ajunge la soluţie şi este specifică fiecărei
probleme. Alegerea funcţiei h este foarte importantă din punct de vedere
a vitezei de execuţie a programului.
Se lucrează cu două liste: lista open în care se reţin
configuraţiile neexpandate încă şi lista close care le memorează pe cele
expandate. Soluţia se construieşte folosind un arbore care se parcurge
pe baza legăturii tată.

Algoritmul:
I. înregistrarea corespunzătoare configuraţiei iniţiale este încărcată în
open cu g=0 şi f=h;
II. atât timp cât nu s-a selectat spre expandare nodul corespunzător
configuraţiei finale şi lista open este nevidă, se execută următoarele:
(1) se selectează din lista open nodul t cu f minim;
(2) se expandează acest nod obţinând o listă liniară simplu înlănţuită
cu succesorii săi;
(3) pentru fiecare succesor din această listă se execută:
(a) se ataşează noul g, obţinut ca sumă între valoarea lui g a
configuraţiei t şi costul expandării (de obicei 1);
(b) se testează dacă acest succesor aparţine listei open sau close
şi în caz afirmativ, se verifică dacă valoarea lui g este mai
mică decât cea a configuraţiei găsite în listă:
i. în caz afirmativ, nodul găsit este direcţionat către actualul
părinte (prin fixarea legăturii tată) şi se ataşează noul g,
iar dacă acest nod se găseşte în close, este trecut în open;
ii. în caz că acest nod nu se găseşte în open sau close, este
introdus în lista open;
iii. dacă s-a selectat pentru expandare nodul corespunzător
configuraţiei finale atunci se trasează folosind o
procedură recursivă drumul de la configuraţia iniţială la
cea finală utilizând legătura 'tată';
III. dacă ciclul se încheie deoarece lista open este vidă înseamnă că
problema nu are soluţie.

6 din 7 Profesor A.D.


Remarcă:

Algoritmul se poate implementa folosind o singură listă iar diferenţierea


dintre nodurile expandate şi cele neexpandate se va face după un câmp
special. Apare însă dezavantajul că operaţiile de căutare se fac într-o
listă mai lungă. Acest dezavantaj se poate elimina folosind o structură
specială numită tabelă hash. În unele cazuri se poate folosi un arbore
binar.

Aplicații B&B

Această abordare este utilizată pentru o serie de probleme NP-hard:


1) Programare întregi;
2) Programare neliniară;
3) Problema vânzătorului călător (TSP);
4) Problemă de atribuire quadratică (QAP);
5) Problemă de satisfacție maximă (MAX-SAT);
6) Cea mai apropiată căutare a vecinilor (de Keinosuke Fukunaga);
7) Programare magazin Flow;
8) Problema stocului tăiat;
9) Analiza zgomotului fals (FNA);
10)Filogenetica computațională;
11)Setează inversiunea;
12)Estimarea parametrilor;
13)0/1 problema rucsacului;
14)Selecția caracteristicilor în învățarea automată;
15)Predicție structurată în viziunea computerizată.

7 din 7 Profesor A.D.

S-ar putea să vă placă și