Sunteți pe pagina 1din 16

CAPITOLUL II PROGRAMARE COMBINATORIAL

2.1 Elemente introductive


O problem de optimizare (adic o funcie de mai multe variabile care trebuie maximizat sau minimizat cu satisfacerea unui set finit de restricii) are caracter combinatorial dac fiecare variabil poate lua independent un numr de valori numerice apriori cunoscute de exemplu: valori ntregi, nenegative inferioare unui prag dat sau numai valori 0 sau 1. Analiza noastr se va restrnge la acele probleme cuantificabile matematic prin datele amintite: funcia obiectiv, variabilele, restriciile, valori permise variabilelor, deoarece clasa de probleme combinatoriale este cu mult mai larg. Caracteristica unei probleme combinatoriale este c numrul combinaiilor posibile de valori este finit. Aceste combinaii se numesc Soluii ale problemei i mulimea lor se va nota cu . Combinaiile care, n plus, satisfac restriciile problemei, i ele n numr finit, se vor numi Soluii Admisibile i mulimea lor se va nota cu A. Cu aceste notaii, o problem combinatorial se formalizeaz astfel: dat fiind o funcie definit n toate elementele din s se determine x*A cu proprietatea: f(x*) = max f(x) xA La prima vedere o problem de programare liniar este o problem combinatorial deoarece soluia sa optim se poate gsi inspectnd doar mulimea A SAB care este finit. Exist totui o mare deosebire: o soluie bazic nu poate fi construit prin acordarea de valori variabilelor ntruct din start plaja de valori admisibile este infinit. n notaiile de mai sus, A poate fi socotit finit, ns mulimea a combinaiilor posibile de valori date variabilelor este R+n care este infinit. ansa de a da peste un element din A considernd o combinaie de valori sau alta este practic nul. Exemplul tipic de problem combinatorial pe care l avem n vedere n cadrul acestui curs este Problema de Optimizare cu Variabile Bivalente (vezi problema de afectare, problema alegerii proiectelor de investiii). Aici numrul total de combinaii posibile, respectiv numrul de elemente din este 2n unde n este numrul variabilelor. n general o problem combinatorial se rezolv prin Enumerarea Total sau Parial a mulimii a soluiilor sale. Vorbim de enumerare total dac determinarea elementului optimal x*A necesit generarea tuturor combinaiilor posibile de valori date variabilelor deci a tuturor elementelor din . Enumerarea parial reprezint determinarea lui x* prin generarea efectiv a unei pri din partea negenerat fiind recunoscut ca neconinnd elemente optimale. Indiferent de schema de enumerare, o dat generat un element x se efectueaz urmtoarele operaii: 1. Se cerceteaz dac xA; dac NU se trece la generarea altui element din . Dac DA:

2. Se compar f(x) cu valoarea obiectivului f n cel mai bun element din A gsit anterior; dac se mbuntete valoarea obiectivului (n sensul optimului), x se reine ca cel mai bun element din A, gsit. n caz contrar x se abandoneaz i se trece la generarea unui nou element din . Este important de reinut faptul c generarea mulimii sau chiar a unei pri nu nseamn n nici un caz memorarea elementelor generate i aceasta pentru dou motive: sunt foarte multe i apoi nu sunt necesare (exceptnd cel mai bun element din A gsit la un stadiu sau altul al enumerrii). Schema logic din figura 1 formalizeaz rezolvarea problemelor de optimizare combinatorial (P). Ea folosete o locaie xCMB realizat de obicei sub forma unui vector n care se depozitez cel mai bun element din A gsit pn la un anumit moment i o variabil zCMB care reine valoarea obinut n xCMB. n cazul unui obiectiv de maxim, iniial zCMB = - , xCMB = 0. n cuprinsul schemei, punctul delicat l constituie modul de generare efectiv a elementului din , mod care va fi discutat ulterior. Neajunsul evident al enumerrii explicite a tuturor soluiilor problemei (P) rezid n numrul mare al acestora. Generarea unei soluii prin atribuire de valori variabilelor este o operaie practic instantanee pe un calculator (sunt necesare anumite precauii pentru evitarea generrii unei soluii de mai multe ori); chiar i verificarea restriciilor de ctre o combinaie general nu dureaz prea mult i totui, verificarea attor soluii face ca timpul total s depeasc lesne limita rezonabilului. Alte trei clase de probleme formalizabile matematic pentru care numrul de soluii admisibile este foarte mare sunt urmtoarele: a) Problema ordonanrii prelucrrii unor repere pe mai multe utilaje. Se cunosc timpii de prelucrare ai reperelor pe fiecare utilaj n parte, precum i ordinea n care utilajele trebuie parcurse. Problema const n stabilirea ordinii de lansare n fabricaie a reperelor astfel nct timpul total de ateptare al utilajului s fie minim. Este clar c numrul total de soluii este n!, unde n = numrul de repere ce trebuie prelucrate. Ori pentru n = 20 avem: 20!=243.290.200.816.664.000 numr uor de scris dar greu de imaginat ca mrime. b) Problema comis voiajorului. Un comis voiajor trebuie s viziteze n orae c1,,cn. Se cunoate matricea timpilor de deplasare de la un ora la altul, bineneles acolo unde exist legturi directe. Comis voiajorul pleac dintr-un anumit ora, s zicem c1, i trebuie s treac prin fiecare ora, o singur dat, ntorcndu-se n final n oraul de plecare. Problema este ca din cele (n-1)! succesiuni posibile s se aleag acel drum cruia i corespunde timpul total de deplasare minim. c) Nu n ultimul rnd n clasa problemelor de optimizare combinatorial putem include i problemele de programare liniar n numere ntregi (PLI). ntr-adevr, pentru aceast problem i n special pentru cele practice se pot ti de la bun nceput nivelele maxime admise pentru valorile ntregi ce le pot lua variabilele i n consecin numrul combinaiilor posibile de valori acordate acestora este finit.

Figura 1 3

Dup cum am specificat deja, unul din punctele delicate ale oricrei scheme de enumerare l constituie generarea combinaiilor de valori date variabilelor problemei. Acest proces trebuie s satisfac dou condiii: 1. nici o combinaie nu trebuie generat de mai multe ori; 2. nici o combinaie posibil nu trebuie omis.

2.2 Formalizarea problemelor de generare a soluiilor unui program combinatorial


Considerm date: un numr de variabile: x1,,xn i pentru fiecare variabil xi o list (vector) de valori numerice Li a crei lungime depinde de variabila n cauz. Se cere generarea (nu neaprat memorarea) tuturor combinaiilor posibile (pe parcurs vom folosi alternativ i termenul de soluie n locul celui de combinaie)

x = ( x 1 , , x n ) cu x i Li, i = 1, ..., n
respectnd condiiile 1 i 2 de mai sus. Introducem termenul de soluie parial sau pseudosoluie ca fiind un vector = ( x1 , ,x m ) n care 1 m n i x i Li, i = 1,...,m. Relativ la pseudosoluia adoptm urmtoarea terminologie: vom spune c variabilele x1,,xm au fost fixate la valorile x 1 , , x n din listele corespunztoare n timp ce restul variabilelor, adic x m+1 , , x n se vor numi libere. Este clar c dac m=n, adic toate variabilele au fost fixate la diferite valori, pseudosoluia respectiv este chiar o soluie (combinaie). La pseudosoluiile definite mai sus adugm i pseudosoluia vid n care toate variabilele sunt libere. Pentru mai buna nelegere a procedeului de enumerare construim un graf T ale crui noduri sunt pseudosoluiile mai sus definite. O muchie n graful T va lega pseudosoluia = ( x1, ,x m ) de o alta de forma = ( x1, ,x m+1 ) . Se vede c menine valorile variabilelor x1,,xm fixate n i n plus fixeaz variabila urmtoare xm+1. Vom spune c este un succesor al lui n timp ce este un predecesor al lui . Este clar c: 1. O pseudosoluie = ( x1 , ,x m ) va avea succesori numai dac m<n i n acest caz numrul succesorilor va fi egal cu numrul valorilor numerice din lista Lm+1. 2. Pseudosoluiile fr succesori sunt exact soluiile cutate. 3. Orice pseudosoluie are un unic predecesor, excepie fcnd pseudosoluia . 4. Graful T este prin construcie un arbore adic un graf conex i fr cicluri, a crui rdcin este . n consecin exist un unic lan de muchii care unete rdcina de o pseudosoluie dat. Pentru o problem cu dou variabile x1, x2 lund valori din listele L1={0,1}, L2={2,5,6}arborele T este prezentat n figura 2:

Figura 2

n principiu, generarea combinaiilor se identific cu o explorare a nodurilor grafului T care trebuie s respecte urmtoarele reguli: a) muchie va fi parcurs exact de dou ori: o dat ntr-un sens i a dou oar n sensul opus; b) Exploararea ncepe din rdcina i sfrete tot n . n figura 2, exploararea arborelui este indicat prin sgei nsoite de un numr de ordine. Vom utiliza termenul de pseudosoluie curent (psc) pentru a marca nodul din T n care a ajuns procesul de enumerare. Dac psc este = ( x 1 , , x
m

) un succesor al su (dac exist,

adic n cazul m<n), se va nota = ( x1 , ,x m , x m+1 ) = (, x m+1 ). Un predecesor al psc (n caz c exist, adic dac avem m>0) se va nota cu = ( x1 , ,x m1 ) adic =(, x m ).

2.3 Principiul general Branch and Bound (B-B) de rezolvare a problemelor combinatoriale
Relum problema de optimizare combinatorial (P) constnd n urmtoarele date: - o mulime finit ale crei elemente sunt soluiile problemei (P); - o submulime A zis a soluiilor admisibile; - o funcie numeric f definit n toate soluiile problemei (P). Problema cere aflarea unui x* A cu proprietatea f(x*) = max(f(x)), x A. Metoda B-B este o schem de enumerare parial a crei aplicare reclam satisfacerea prealabil a urmtoarelor condiii: 1. Pentru () submulime nevid S se poate determina relativ uor elementul xs cu proprietatea f(xs)=max(f(x)), xS (1)

2. Exist o regul de ramificare R care aplicat unei submulimi S cu cel puin dou elemete produce o partiie a mulimii S astfel:
5

S-{xs}=S1S2Sp

(SiSj= pentru i j)

(2)

De notat c unele din mulimile Si ar putea fi vide. Definiia 1: Prin ramificarea unei mulimi S neleg aplicarea regulii R asupra lui S i obinerea partiiei (2). Definiia 2: Mrginirea unei mulimi S reprezint determinarea elementului optimal xs cu proprietatea (1). n linii generale principiul B-B se aplic astfel: se determin x adic elementul cu propritatea: f(x)=max(f(x)), x; dac xA atunci n mod evident x*=x STOP n caz contrar ramificm cutnd elementul optimal x* ntr-una din submulimile rezultate prin partiionare.

Vom introduce i aici parametrul zCMB i locaia xCMB descrise n cadrul schemei generale de rezolvare a problemelor combinatoriale. Rolul lui zCMB este acela de a opri procesul de exploatare a unor zone din n care n mod cert nu se afl elementul x* cutat. n orice stadiu al aplicrii metodei mulimii se prezint sub forma unei reuniuni de pri disjuncte: = {xCMB} cu proprietatea c elementul optimal x* nu se gsete n mod cert n . La rndul su submulimea (ct timp este nevid) se prezint sub forma unei reuniuni de submulimi disjuncte: =SSS (4) (3)

obinut printr-un proces de ramificare succesiv nceput prin ramificarea mulimii totale . La start =, xcmb=, =. Derularea metodei B-B impune submulimilor din partiia (4) urmtoarele proprieti: a) Fiecare din ele are cel puin dou elemente; b) Fiecare din ele a fost mrginit; cu alte cuvinte se cunosc elementele xS, xS,, xS care maximizeaz obiectivul f pe S,S,S; c) Nici una din soluiile xS, xS,, xS nu este soluie admisibil; d) Exist inegalitiile stricte: f(xS)>zCMB, f(xS)>zCMB,,f(xS)>zCMB. Cu aceste pregtiri o iteraie a metodei B-B const n: Operaia 1: Dintre S,S,S care compun partiia (L1) se alege acea submulime corespunztoare maximului z = max{f(xS), f(xS),,f(xS)}. Pentru simplitate notm aceast submulime cu S. Ramificm S obinnd partiia: S=S1S2SP

Operaia 2: Mrginim submulimea S1 (n caz c este nevid, altfel vom trece la S2). Trei cazuri sunt posibile relativ la elementul optimal din S1 obinut n urma mrginirii: a) f(xS1) zCMB (indiferent de faptul c xS1 este sau nu n A). Considerm c S1 nu conine soluii admisibile strict mai bune dect cea mai bun gsit pn acum i ca atare S1 se abandoneaz, adic se transfer n zona : (-S1), (S1). Trecem la mrginea lui S2 amd. b) f(xS1)>zcmb i xS1A: n acest caz facem actualizrile: xCMB=xS1, zCMB=f(xS1)

Dou situaii sunt posibile: x* = xCMB b1) z = zCMB =>

STOP

b2) z > zCMB => abandonm S1 i trecem la mrginirea lui S2 amd. c) f(xs1)>zCMB i xS1A Cu excepia cazului extrem cnd S1 are un singur element i prin urmare se abandoneaz, vom include S1 printre mulimile care realizeaz partiia (4) a mulimii . Trecem la mrginirea lui S2 amd. Operaia 3: Mrginirea i toate consideraiile precedente se aplic apoi mulimii S2 apoi lui S3 amd. La sfritul operaiei submulimea S dispare din partiia (4), ea fiind nlocuit cu o reuniune de pri disjuncte ale sale. Reuniunea acestor pri este, de regul, mai mic dect mulimea S nlocuit, diferena fiind abandonat, adic transferat n zona . n consecin cu fiecare iteraie mulimea se micoreaz. Se revine la Operaia 1 n caz c este nevid, altfel STOP. Observaii: 1. Pe parcursul aplicrii procedurii descrise anterior, valorile succesive ale lui z formeaz un ir descresctor n timp ce valorile lui zCMB formeaz un ir cresctor. n orice moment al derulrii algoritmului avem: zCMB f(x*) z 2. Algoritmul se oprete fie atunci cnd z = zCMB (cazul b1), fie cnd = . 3. Dac zCMB = - ( xCMB = ) => (P) nu are soluii admisibile. Altminteri x*= xCMB. 4. Submulimile care realizeaz partiia curent (4) a mulimii se numesc active i ele se nscriu ntr-o list pe msura apariiei lor. Din descrierea algoritmului rezult c dup ramificare o submulime nceteaz a mai fi activ fiind nlocuit cu alte pri ale sale mai mici. 5. Ceea ce s-a prezentat mai nainte constituie esena metodei B-B. Algoritmii de tip B-B specializai n rezolvarea unei probleme combinatoriale concrete vor diferi att prin forma de prezentare specific ct i prin prezena unor teste suplimentare care permit recunoaterea
7

inexistenei elementului optimal x* ntr-o submulime rezultat din ramificare i drept urmare abandonarea acesteia.

2.4 Algoritmul aditiv pentru rezolvarea problemelor de programare liniar bivalent


Programarea bivalent este un mijloc adecvat de modelare pentru multe probleme practice importante cum ar fi cele de afectare, de alegere a proiectelor de investiii, .a.m.d. Considerm problema de programare liniar bivalent n forma: S se determine x*=( x*1, x*2,, x*n) care maximizeaz funcia obiectiv f = (P) cu restriciile
n

j =1

cjxj,

(1) (2) (3)

j =1

aijxj bi ; i=1,..., m

i condiiile explicite xj{0,1}, j=1,...n

Pentru (P) exist 2n combinaii de valori 0 sau 1 atribuite celor n variabile. Aceste combinaii se vor numi soluii ale problemei (P) i mulimea lor se va nota cu . Soluiile care satisfac restriciile (2) se vor numi admisibile i mulimea lor se va nota cu A. pentru valori mici ale lui n problema (P) se rezolv simplu prin enumerare explicit a tuturor soluiilor. Fiecare soluie generat este introdus n restriciile (2) pentru a putea vedea dac este admisibil sau nu. Pe parcursul derulrii procedurii se reine cea mai bun soluie admisibil generat astfel c n final aceasta va fi soluia optim x* cutat. Dei soluiile generate nu trebuie i memorate, excepie fcnd cea mai bun soluie admisibil gsit pe parcurs, enumerarea total nceteaz a mai fi practic atunci cnd numrul n al variabilelor este mare. Se pune n acest caz problema de a gsi x* genernd efectiv numai o parte din mulimea a soluiilor (aceast parte dorindu-se a fi ct mai mic). Urmtorul algoritm rspunde problemei formulate anterior i, deoarece aplicarea lui nu necesit dect adunri si scderi, el se numete algoritmul aditiv. Versiunea original se datoreaz lui Egon Bala (1965) (profesor universitar la Carnegie Mellon University, originar din Cluj, Romania). 2.4.1 Notaii. Terminologie Putem presupune n funcia obiectiv (1) c toi cj 0. n cazul n care un coeficient ck>0 efectum transformarea xk = 1-xk. - Introducem variabilele de abatere s1, s2,, sm aducnd (P) la forma STAS. Spre deosebire de x1,x2,,xn care nu pot lua dect valorile 0 i 1, variabilele s1, s2,, sm sunt supuse numai condiiei de nenegativitate. - Rescriem matriceal problema:
8

S se determine x*=( x*1, x*2,, x*n) care maximizeaz funcia obiectiv f = cx cu restriciile Ax + s = b i condiiile explicite xj{0,1}, j =1,...n, si 0, i = 1,...m Notm cu N={1,2,,n} indicii variabilelor, M={1,2,,m} indicii restriciilor modelului. Pentru fiecare soluie x fie I(x) = { jN xj = 1}. Pentru soluia n care xj = 0, jN vom prefera notaia . Este clar c I() = . Construim un graf G ale crui noduri sunt cele 2n soluii ale problemei (P). n G exist un arc orientat de la nodul x la nodul y numai dac I(x)I(y) i I(y) are exact un element n plus.

Pentru n=3 graful se prezint ca n figura 3. Toate soluiile x pentru care muimiile I(x) au acelai numr de elemente au fost reprezentate la acelai nivel. n principiu soluiile problemei (P) vor fi examinate astfel: se va ncepe cu soluia n care xj=0, () jN pentru motivul c ea realizeaz maximul funciei obiectiv pe ntreg (pentru c cj0, jN); odat examinat o soluie x urmtoarea soluie care se genereaz se deduce din x acordnd valoarea 1 unei variabile xj care n x are valoarea 0.

Figura 3 Dat fiind corespondea biunivoc ntre soluiile problemei (P) i nodurile grafului G, trecerea de la x la y echivaleaz cu o deplasare de la nodul x la nodul y de-a lungul arcului care le unete. Dezvoltnd analogia putem spune c derularea algoritmului ce va fi prezentat se identific cu o deplasare n graful G, deplasare care satisface urmtoarele cerine: 1. ncepe din nodul corespunztor soluiei ;
9

2. o muchie a grafului G poate fi parcurs n sensul orientrii sale cel mult o dat. Dac acest lucru se ntmpl la un moment dat, ntr-o faz ulterioar a derulrii algoritmului are loc n mod necesar i deplasarea n sens invers; 3. deplasarea se ncheie n nodul de plecare . Notm cu T subgraful nodurilor i al muchiilor pe care s-a fcut deplasarea. Condiiile n care loc aceast deplasare fac ca T s fie un arbore (un graf convex i fr cicluri) cu rdcina . Relativ la dou noduri x i y din T ntre care exist un arc (aceasta nseamn c x i y sunt soluii efectiv generate, y obinndu-se din x dnd valoarea 1 unei variabile cu valoarea 0 n x), vom spune c y este un succesor al lui x n timp ce x este un predecesor al lui y. T fiind un arbore, orice nod exceptnd rdcina are un singur predecesor i poate avea mai muli succesori sau nici unul. Bineneles c arborele T nu exist de la nceput. La start el se reduce la rdcina i apoi, pe msur ce algoritmul nainteaz, ctig noi noduri corespunztoare deplasrilor care au loc n graful G. O dat ajuni ntr-un nod x, numai 2 micri sunt permise: - o micare nainte, ctre un succesor y al lui x. Dac aceast naintare este recomandat de algoritm i se execut, atunci y i arcul (x, y) devin elemente ale arborelui T. - o micare napoi ctre unicul predecesor z al lui x n arborele T. Dac aceast manevr este executat, nodul x devine nod terminal al arborelui T (adic fr succesori). Vom spune c x devine un nod mort. Nodurile lui T care nu sunt declarate moarte sunt noduri vii.

Figura 4 Formarea arborelui T n graful soluiilor unei probleme cu 3 variabile. Legend: elementele arborelui T
10

graful suport G ntoarcerile i noile intenii de naintare Prin urmare, un nod poate fi vizitat de mai multe ori dar o dat declarat mort prin el nu se mai trece. Arborele T nu cuprinde n mod necesar toate nodurile lui G dect n cazul unei enumerri complete. 2.4.2 Prezentarea algoritmului Iniializm o variabil zCMB i o locaie xCMB (sub forma unui vector cu n componente) care rein, n orice moment al derulrii algoritmului, maximul valorii funciei obiectiv pe mulimea soluiilor admisibile efective generate pn n acel moment, respectiv soluia admisibil care realizeaz acest maxim. S presupunem c n procesul de examinare a nodurilor grafului G am ajuns pentru prima dat n nodul corespunztor unei soluii x. Fie (x) mulimea format din x i toi descendenii lui x n G. Altfel spus: (x) = {y yi = xi = 1, () iI(x)}. Deoarece cj0, () jN este clar c f(x) = max(f(y)), y(x). Sunt posibile dou cazuri: 1. f(x) = ci zCMB
iI(x)

n aceast situaie este inutil s mai inspectm soluiile din (x), deoarece nici una (i n particular cele admisibile) nu ofer funciei f o valoare maxim mai bun dect cea oferit de ce mai bun soluie admisibil gsit pn acum. n termenii grafului G este inutil s ne deplasm din x ctre oricare din descendenii si. n consecin nodul x se declar MORT (se abandoneaz) i ne ntoarcem n unicul predecesor al lui x n arborele T. 2. f(x) > zCMB Avem de examinat dou situaii: 2.1 xA. Acest lucru poate fi probat calculnd S(x)=b-Ax; dac S(x)0 xA; actualizm: xCMB = x, zCMB = f(x). Nodul x se declar MORT; ne ntoarcem n unicul predecesor al lui x n arborele T. 2.2 x A (echivalent cu S(x)0). Pentru moment nu avem nici un motiv s credem c elementul optimal x* nu s-ar afla printre descendenii lui x n G, adic n (x). Deoarece xA, x*, dac ar fi n (x), ar diferi de x prin cel puin o valoare 1 corespunztoare unei variabile care n x are valoarea 0 (corespunztoare unei variabile xj cu jN-I(x)). Vom ncerca s dm peste x* n mod progresiv, examinnd mai nti succesorii direci ai lui x, apoi succesorii direci ai acestora .a.m.d. Se impune deci schimbarea n 1 a valorii unei variabile xk care are n x valoarea 0. n termenii grafului G, schimbarea din 0 n 1 a valorii variabilei xk corespunde unei deplasri din x ctre un succesor al su, pe direcia k. Dar cum alegem direcia de deplasare k? Vom stabili mai nti mulimea R(x)N a direciilor recomandabile de deplasare din soluia x. Pentru aceasta identificm direciile nerecomandabile de deplasare din x, care sunt de mai multe tipuri:
11

1. direciile i corespunztoare variabilelor xi cu valorea 1 n x. Acestea formeaz mulimea I(x). 2. direciile jN anterior examinate. Acestea formeaz mulimea J(x). Deoarece suntem pentru prima dat n nodul x, J(x) = . 3. direciile j neexaminate ( jN-I(x) J(x))care conduc la valori ale obiectivului f ce nu depesc zCMB: f(x) + cj zCMB. Mulimea lor se va nota K(x). 4. direciile j diferite de cele descrise anterior care conduc la soluii y neadmisibile ca i x dar mai proaste dect x n sensul c pentru toi iM pentru care si(x)<0 avem si(y)si(x). Pentru a caracteriza o asemenea direcie j s observm c soluia y corespunztoare se obine din soluia x acordnd valorea 1 variabilei xj. Prin urmare, s(y)=s(x)-Aj unde s-a notat cu Aj coloana j a matricii A. Rezult de aici c si(y)si(x) aij0. Deci direciile j din categoria 4 se caracterizez prin aij0 pentru toi acei iM pentru care si(x)<0. Mulimea lor se va nota cu L(x). n final obinem: R(x)=N-I(x)J(x)K(x)L(x) Dac R(x)= nodul x se declar MORT i ne ntoarcem n predecesorul lui x n arborele T. Dac R(x) vom aplica un nou test care (dac nu este verificat) arat c (x) nu conine nici o soluie admisibil a lui (P). Aceasta nu nseamn c dac testul este trecut atunci (x)A (testul este numai necesar, nu i suficient)! Pentru formularea testului sunt necesare cteva pregtiri: Evalum ecartul S(y)=b-Ay pentru y variind n (x): si(y) = bi - aijyj = bi jN

iR ( x )

aijyj -

jR ( x )

aijyj = si(x) -

jR ( x )

aijyj .

1 dac aij<0 si(y) va fi maxim dac fiecrei variabile yj, jR(x) i atribuim valoarea yj= 0 dac aij0 Rezult c:
y ( x )

max si(y) = si(x)-

jR ( x )

(aij)- .

a, dac a < 0 Reamintim c pentru un numr real a s-a notat cu (a)- = 0, dac a 0 , (a)- fiind partea negativ a numrului a. Este clar c dac i M este un indice pentru care si(x)<0 i (aij)- > si(x) atunci si(y)<0, ()y(x) altfel spus nu conine soluii admisibile. Cu aceste pregtiri, suntem n msur s formulm testul anunat: TEST: Pentru indicii iM pentru care si(x)<0 considerm inegalitatea (aij)- si(x).
jR ( x )

12

Dac cel puin una din aceste inegaliti nu este adecvat atunci nodul x se declar MORT i se revine la predecesorul su n arborele T. n cazul n care testul T este verificat i R(x) are cel puin dou elemente direcia de deplasare k (adic variabila xk a crei valoare se schimb din 0 n 1) se determin astfel: Fie jR(x). Atribuind lui xj valoarea 1 obinem din x o nou soluie y pentru care: si(y) = si(x) - aij, () iM Dac si(y) 0, () iM atunci y va fi o soluie admisibil. Altfel, numrul negativ si(x)-aij reprezint o msur a nesatisfacerii restriciei i de ctre noua soluie y. Introducem o msur a nesatisfacerii tuturor restriciilor de ctre y prin formula: v j( x ) =

iM

(si(x) - aij)-

Este clar c ntotdeauna vj(x)0 i c vj(x)=0 dac i numai dac yA. Este normal atunci s alegem ca direcie de deplasare indicele k R(x) pentru care avem: vk(x) = max [vj(x)], jR(x)

n cazul n care c maximul din aceast formul nu este unic are prioritate indicele k pentru care coeficientul ck este cel mai mare. O dat aleas direcia de deplasare k transferm indicele k din R(x) n J(x): k este o direcie examinat i la rentoarcerea n nodul x ntr-o faz ulterioar nu trebuie s ne mai deplasm pe aceast direcie. n continuare trecem la examinarea soluiei y dedus din x prin atribuirea xk = 1. Arborele T se completeaz cu nodul y i cu arcul (x, y). Astfel pentru y, nodul x apare n arborele T ca predecesor. Examinarea nodului y se face dup aceleai instruciuni folosite la examinarea nodului x. Din descrierea algoritmului a rezultat c un nod poate fi vizitat de mai multe ori. La fiecare revenire n nodul x este necesar s actualizm lista K(x) deoarece este posibil ca ntre timp zCMB s fi crescut. ntr-adevr pentru un indice j, anterior recomandabil, pentru care inegalitatea f(x) + xj > (zCMB)vechi era adecvat, este posibil ca f(x) + xj (zCMB)nou deoarece (zCMB)nou>(zCMB)vechi. Prin urmare indicele j nu mai este recomandabil n momentul n care se pune problema deplasrii din x ctre un nou succesor diferit de toi cei deja examinai. Recapitulnd la fiecare revenire n nodul x mulimile de direcii nerecomandabile J(x) i K(x) au tendina de cretere. Avnd n vedere c I(x) i L(x) nu se modific, la fiecare revenire n x, R(x) descrete cu cel puin un element. n mod clar rezult c dup un numr finit de asemenea reveniri R(x) devine vid i nodul x (mpreun cu toi descendenii si examinai i neexaminai) este abandonat. Procesul se ncheie n momentul n care s-a revenit n rdcina a arborelui T din care s-a plecat i mulimea R() actualizat a devenit vid. n acel moment toate soluiile din au fost testate fie explicit (adic efectiv generate) fie implicit. Dac, n final, zCMB = - atunci (P) nu are soluii admisibile A = . n caz contrar, x*=xCMB. Schema logic a algoritmului expus folosete pe lng variabilele xCMB, zCMB i variabilele: - x cu semnificaia de nod curent (n care a ajuns procesul de enumerare); - y succesorul lui x rezultat dup alegerea direciei de deplasare din x; - z predecesorul lui x din arborele T.
13

14

Exemplu numeric
S se rezolve problema de programare bivalent: -x1+3x2-5x3-x4+4x5 -2 2x1-6x2+3x3+2x4-2x5 0 x2-2x3+x4+x5 -1 (max)f = -5x1-7x2-10x3-3x4-x5 xj{0,1}; j=1,,5 Rezolvare: Punem n eviden matricea A a coeficienilor sistemului de restricii. n partea dreapt vor fi nscrise succesiv ecarturile diferitelor soluii testate. A1 -1 2 0 A2 3 -6 1 A3 -5 3 -2 A4 -1 2 1 A5 -4 -2 1 S(x1) -2 0 -1 S(x2) 3 -3 1 S(x3) 8 0 1

Iniializare: xCMB = , zCMB = - Soluia curent: x1 = = (0,0,0,0,0) Iteraia 1: f(x1)=0 > zCMB S(x1) nu are componentele 0 x1A I(x1)=, J(x1)=, L(x1)={2,5}, K(x1)=, R(x1)={1,3,4} Aplicm testul de admisibilitate (T): S1(x1) = -2<0 (a1j)-= -1-5-1=-7<-2;
jR ( x1 )

S3(x ) = -1<0

jR ( x1 )

(a1j)- = 0-2+0=-2.

Testul (T) este trecut. Deoarece avem 3 direcii recomandabile, calculm vj(x1), jR(x1): v1(x1)= (Si(x1)-a1j)- = (-2-(-1))- + (0-2)- + (-1-0)- = -1-2-1 = -4
iM

v3(x1)= (-2-(-5))- + (0-3)- + (-1-(-2))- = 0-3+0 = -3 v4(x1)= (-2-(-1))- + (0-2)- + (-1-1)- = -1-2-2 = -5 Maximul valorilor calculate este v3(x1) Atribuim x3 = 1 i obinem soluia x2 = (0,0,1,0,0) Transferm indicele 3 n J(x1): J(x1)={3}. Iteraia 2: f(x2) = f(x1)+c3=-10>zcmb S(x2)=S(x1)-A3 nu are componentele 0 x2 A. I(x2)={3}, J(x2)=, L(x2)={1,4}, K(x2)=, R(x2)={2,5} Testul (T) este trecut (-8<-3)
15

Calculm v2(x2) = 0; v5(x2) = -2; maximul este v2(x2) modificm x2=1 i obinem soluia x3 = (0,1,1,0,0) Transferm indicele 2 n J(x2): J(x2)={2} Iteraia 3: f(x3)= f(x2)+c2=-10-7 = -17 S(x3)=S(x2)-A20 => x3A. Actualizm xCMB = x3, zCMB = -17 Ne ntoarcem n predecesorul lui x3, soluia x2. Iteraia 4: Suntem n nodul x2 pentru a doua oar. Actualizm K(x2) = R(x2) = {5} Testul (T) nu este trecut (-2 nu este decat -3). Ne ntoarcem n predecesorul x1 Iteraia 5: Actualizm K(x1) = R(x1) = {1,4} Testul (T) nu este trecut. STOP deoarece suntem n rdcina arborelui T. Soluia optim a problemei este x* = (0,1,1,0,0), f(x*) = -17 Arborele T generat de-a lungul rezolvrii:

Legend: Inteniile de deplasare O parte din muchiile grafului G (care are 25=32 de noduri) i anume cele care corespund direciilor recomandabile. n exemplul considerat, din cele 32 de soluii ale problemei au fost efectiv generate numai trei. Observaii: Anterior a fost prezentat versiunea original a algoritmul aditiv, care ntre timp a primit o serie de perfecionri sub forma unor teste suplimentare. Prin aceste teste se reduce numrul soluiilor efectiv generate crescnd n schimb efortul de calcul.
16

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