Ramură și legătură

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Branch and bound este o tehnică generală pentru rezolvarea problemelor de optimizare combinatorie (adică probleme cu spațiul de soluție finită) și se bazează pe descompunerea problemei inițiale în subprobleme mai simple de rezolvat.

Această metodă a fost propusă pentru prima dată de AH Land și AG Doig în 1960 pentru a rezolva probleme de programare liniară întregi.

Algoritmii ramificați și legați sunt numiți algoritmi de enumerare implicită deoarece se comportă exact ca un algoritm de enumerare - adică „încearcă” toate soluțiile posibile până când găsesc cea optimă (sau corectă) - dar aruncă unele dintre ele, demonstrând a priori -optimitate.

Descriere [1]

Să presupunem că avem o problemă unde z este funcția obiectivă a problemei, în timp ce este regiunea eligibilă. Cea mai bună soluție optimă va fi in timp ce reprezintă cea mai cunoscută soluție fezabilă. Să descompunem problema în subprobleme K: totalitatea pe care o reprezentați , de exemplu, poate fi subdivizat în subseturi K astfel încât:

De preferință, subregiunile ar trebui să fie partiționate astfel încât:

Acest proces de ramificare (ramificare) poate fi reprezentat de un arbore de decizie ( arbore de decizie a ramurilor), în care fiecare nod reprezintă subproblema în timp ce fiecare arc al relației descendente.

Branch and Bound.png

Rezolva problema este deci echivalent cu rezolvarea totalității propriei sale subprobleme generate:

O subproblemă poate fi considerat rezolvat dacă apare cel puțin unul dintre următoarele cazuri:

  1. Soluția optimă de ;
  2. Dovedește că este gol (adică este inadmisibil);
  3. Dovedește că (soluția la subproblemă este mai proastă decât cea mai cunoscută).

Dacă nu pot rezolva un nod, trebuie să îl descompun în alte subprobleme. De asemenea, pentru fiecare subproblemă , este posibil să se determine o limită inferioară a soluției pentru a urma o strategie de navigare în arbore mai eficientă.

Dacă verific asta Pot exclude acel nod, deoarece cea mai bună soluție pe care sper să o obțin este mai proastă decât soluția fezabilă a problemei inițiale. Pentru a obține o limită inferioară a Trebuie să găsesc o relaxare a problemei astfel încât:

  1. ;
  2. ;

Problema relaxată poate fi rezolvată într-un mod mai simplu decât problema inițială, așa că pot găsi soluția optimă care reprezintă limita inferioară a problemei inițiale. Relaxarea trebuie, de asemenea, aleasă astfel încât să fie cât mai aproape posibil ( strânsă ) de problema inițială, în unele cazuri este suficientă o relaxare continuă (ușor de rezolvat prin algoritmul simplex ), în alte cazuri poate fi convenabil să folosiți alte relaxări, cum ar fi ca surogat de relaxare sau relaxare lagrangiană .

Exemplu

Scopul este de a găsi întreaga soluție optimă pentru problema rucsacului atribuit:

Deoarece fiecare variabilă are un cost și o greutate , primul pas este să ordonați variabilele în funcție de criteriul: .

În acest caz, variabilele sunt deja sortate din , apoi pot trece la determinarea unei soluții întregi optime curente la care corespunde o valoare optimă a funcției obiective.

O posibilă soluție excelent întreg este care corespunde unei valori optime a funcției obiective .

Conform acestor ipoteze, constrângerea este respectată, dar nu este pe deplin optimizată, de fapt obțin inegalitatea . Prin urmare, trebuie căutate soluții astfel încât constrângerea capacității să poată fi saturată.

Apoi este plasat , adică care corespunde valorii optime . Soluția totuși nu este întreg, așa că generez două subprobleme corespunzătoare componentei non-întregi, adică :

care corespunde excelentului (mai bun decât excelentul anterior). În acest caz, întrucât valoarea optimă este mai bună și soluția este întreagă, mă pot închide și actualizați soluția și curentul excelent respectiv cu valorile de Și tocmai găsit.

care corespunde excelentului (mai rău decât excelentul anterior). De vreme ce soluția este întreg dar , Pot închide fără a actualiza niciun parametru.

Neavând alte subprobleme deschise, rezultă soluția optimă întreagă și valoarea optimă a funcției obiective Și .

Aplicații

Această abordare a fost utilizată pentru unele probleme NP-hard , de exemplu

Poate fi folosit și ca bază pentru diferiți algoritmi euristici . De exemplu, este posibil să opriți ramificarea atunci când diferența dintre soluția găsită și limita inferioară devine mai mică decât un anumit prag. Acest lucru este util atunci când soluția găsită este „suficient de bună” pentru scopurile noastre, cu avantajul de a reduce semnificativ timpul de calcul.

Notă

  1. ^ S. Martello, "Algoritmi ramificați și legați: strategii de explorare și relaxare", în Metode de optimizare a deciziilor (editat de G. Di Pillo) , Milano, Masson, 1994.
Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă de matematică