Documente Academic
Documente Profesional
Documente Cultură
Prezentare generală
(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.)
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ă:
Algoritmul B&B
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.
Aplicații B&B