C A P I T O L U L   III

 

 

PROBLEME DE OPTIMIZARE DE DIMENSIUNI MARI

 

 

§1. Problema dimensiunii în rezolvarea efectivã a problemelor de optimizare practice

 

            Principala cauzã generatoare de dificultãþi în rezolvarea problemelor de optimizare reale este dimensiunea: o asemenea problemã este pur ºi simplu "prea mare". În programarea matematicã, mãrimea unei probleme este o chestiune relativã, depinzând de mulþi parametri cum ar fi:

·      numãrul de variabile ºi numãrul de restricþii;

·      complexitatea expresiilor funcþiei obiectiv ºi a restricþiilor;

·      performanþele echipamentului de calcul: hardware ºi software.

 

Utilizarea modelelor matematice în studiul unor situaþii reale - în special din domeniul economic - a condus la programe matematice care suprasolicitã ºi cele mai puternice calculatoare.Din fericire, marea majoritate a problemelor de optimizare "mari" au o "structurã specialã" care, în programarea liniarã de exemplu, înseamnã:

 

·      densitate micã a constantelor numerice nenule;

·      gruparea elementelor nenule în blocuri aºezate "pe diagonalã";

·      numãr foarte mare de variabile ºi relativ puþine restricþii sau invers, multe restricþii ºi puþine variabile.

 

Trebuie spus cã dacã un program liniar mare nu are o structurã specialã, sarcina colectãrii datelor este practic aproape imposibil de realizat; astfel pentru un program cu 104 restricþii ºi 106 variabile, matricea coeficienþilor ar avea 1010 intrãri ºi în cazul unei densitãþi de 100% ar necesita 1010 date numerice de adunat, sortat ºi prelucrat!!

            Pentru programele neliniare, complexitatea ºi structura specialã se caracterizeazã mult mai greu.

 

            §2. Clasificarea metodelor de rezolvare a programelor liniare mari

 

            În principiu metodele de rezolvare a programelor mari se împart în douã categorii:

 

·      metode directe: acestea specializeazã o procedurã generalã adaptând-o la specificul unei anumite clase de probleme de optimizare.

            Exemplul tipic îl constituie algoritmul simplex; este ºtiut cã principala problemã de calcul care apare în aplicarea lui o constituie modul de manipulare a inversei bazei curente. În cazul unei "structuri speciale" este posibil ca dimensiunea acestei matrici sã se reducã semnificativ.

            Sã considerãm cazul unui program liniar cu variabile superior mãrginite:

 

 

Abordarea "clasicã" presupunea transformarea condiþiilor de limitare superioarã în egalitãþi:

 

 

Rezulta un program cu m+n restricþii ºi 2n variabile, ale cãrui baze erau matrici de ordinul m+n.

              Totuºi forma particularã a restricþiilor de limitare superioarã a putut fi exploatatã eficient într-o specializare a algoritmului simplex în care inversa bazei curente are dimensiunea egalã cu numãrul m al restricþiilor propriu zise.

 

·      metode indirecte, bazate pe descompunerea problemei mari în subprobleme mai mici, interconectate. Subproblemele pot fi rezolvate independent (ºi dacã este posibil chiar simultan) dar faptul cã ele interacþioneazã implicã existenþa unui mecanism (problemã) de coordonare. Astfel, rezolvarea problemei originale mari se face "la douã nivele":

 

·      la primul nivel - inferior - se rezolvã subproblemele; rezultatele sunt "comunicate":

·      la al doilea nivel - superior - care "analizeazã" aceste rezultate ºi transmite nivelului inferior noi parametri.

              La nivelul unu are loc o reluare a calculelor (reoptimizare); noile rezultate sunt                                                                                                                trimise nivelului superior care le analizeazã º.a.m.d.

 

Important este faptul cã acest proces iterativ este convergent în sensul cã într-un numãr finit de paºi (º dialoguri între cele douã nivele), nivelul coordonator "anunþã" gãsirea soluþiei optime.

 

              §3. Descompunere în programarea liniarã. Principiu

 

             Considerãm un program liniar în formã standard:

 

             în care:

          T º matrice m´n;

          x º coloana celor n variabile;

          t º coloana celor m termeni liberi;

          c º linia celor n coeficienþi din funcþia obiectiv.

 

Pentru moment, nu vom face nici o ipotezã asupra "mãrimii" programului (P) sau asupra structurii sale. ªtim cã (P) poate fi rezolvat "dintr-o datã" cu ajutorul algoritmului simplex. Ne propunem sã arãtãm cum poate fi rezolvat (P) prin descompunerea sa în mai multe subprobleme mai mici, intercorelate.

          Vom împãrþi sistemul Tx=t al restricþiilor în douã blocuri (partiþionarea este deocamdatã arbitrarã):

 


·      blocul Ax=b cu m1 < m restricþii;

·      blocul Mx=d cu m2 =m - m1 restricþii

 

          Considerãm mulþimea soluþiilor admisibile ale sistemului liniar Ax=b:

 

A  ={x Î Rn | Ax = b , x ³ 0}

 

Este bine cunoscut faptul cã A  este o mulþime convexã ºi chiar poliedralã (adicã o intersecþie finitã de semispaþii din Rn). Ea are un numãr finit de vârfuri v1,v2,...,vs care se identificã cu soluþiile admisibile de bazã ale sistemului Ax = b.

          Pentru simplitatea expunerii, vom presupune în continuare cã  mulþimea A  este mãrginitã (aceastã ipotezã este îndeplinitã în mai toate cazurile practice).

          Un rezultat clasic al analizei convexe aratã cã orice punct al mulþimii poliedrale ºi mãrginite A  se scrie ca o combinaþie convexã a vârfurilor ei:

 

unde:

 ºi

Înlocuind   în blocul Mx = d ºi în funcþia obiectiv f = cx obþinem:

Cu notaþiile:

 

programul (P) se scrie echivalent:

 

în care variabilele sunt scalarii

 

Dacã  este o soluþie optimã a programului (PM) atunci este o soluþie optimã a programului original (P).

          Programul (PM) se numeºte program coordonator (master program) ºi are urmãtoarele proprietãþi:

 

·      are mai puþine restricþii decât (P): doar 1+m2 faþã  de m1 + m2 ;

·      are în general un numãr foarte mare de variabile, câte una pentru fiecare vârf al mulþimii A  ºi, dupã cum se ºtie numãrul acestor vârfuri estte de obicei "impresionant";

·      rezolvarea programului (PM) necesitã - cel puþin la prima vedere - cunoaºterea vârfurilor v1,v2,...,vs fãrã de care nu se pot evalua colanele Qk ºi scalarii . Or, cunoaºterea aprioricã a vârfurilor v1,v2,...,vs este o sarcinã extrem de grea ºi practic imposibil de fãcut în mai toate cazurile!

 

          Din fericire, rezolvarea programului (PM)  nu necesitã cunoaºterea aprioricã a vârfurilor v1,v2,...,vs. Dupã cum vom vedea în secþiunea 5, pe parcursul aplicãrii algoritmului simplex acestui program, vârfurile mulþimii A  absolut necesare în optimizare vor fi generate (calculate) "la cerere" prin rezolvarea unor programe liniare de forma:

 

 

în care u este un vector linie ale cãrui componente se stabilesc ºi se modificã în funcþie de stadiul rezolvãrii programului (PM).

 

          În esenþã, rezolvarea programului original (P) s-a redus la:

 

·      rezolvarea programului coordonator (PM);

ºi la:

·      rezolvarea mai multor probleme de forma P(u)

toate de dimensiuni mai mici decât cele ale programului (P); vezi figura 3.1

 

 

 

 

 

 

 

 

 

 


Figura 3.1

 

          Cele de mai sus constituie esenþa principiului de descompunere Dantzig - Wolfe. El poate fi folosit atunci când programul (P) are un numãr foarte mare de restricþii. Descompunerea devine ºi mai atractivã în cazul în care submatricea A are o structurã diagonalã

 

 

 

 

 

 

 

 


Figura 3.2

 

în care A1,A2,...,Ap sunt matrici de diferite dimensiuni.Pentru simplificarea expunerii sã presupunem cã A are doar douã blocuri A1 ºi A2. Elementele constitutive ale programului (P) pot fi partiþionate astfel:

 

 


                                          A                                                      b

                                         M 

 

 

 

 

Figura 3.3

 

                 Programul (P) are deci forma:

 

                Û             

 

Se observã uºor cã în aceastã situaþie, problema P(u) “se sparge” în douã subprobleme independente (care pot fi rezolvate simultan!):

 

                     

 

 

Schema de rezolvare “la douã nivele” a programului (P) din figura 3.1 devine:

 

 


       Nivel 2

 

 

 

 

 

 

 

 

       Nivel 1

 

Figura 3.4

 

 

§4. O interpretare economicã a principiului de descompunere

 

            Sã considerãm o economie cu mai mulþi agenþi. Fiecare agent opereazã un numãr de activitãþi de pe urma cãrora obþine un venit. Operarea activitãþilor implicã utilizarea unor resurse disponibile în cantitãþi limitate. Fireºte, obiectivul fiecãrui agent este maximizarea venitului propriu.

            Este clar cã dacã fiecare agent ar deþine controlul asupra tuturor resurselor necesare lui atunci maximizarea venitului la scara întregii economii s-ar reduce la maximizarea venitului fiecãrui agent în parte.

            În realitate lucrurile stau altfel.

Fiecare agent deþine controlul asupra anumitor resurse: capacitãþi proprii de producþie, forþa de muncã angajatã, resurse financiare proprii, unele materii prime utilizate în exclusivitate.Acestea vor fi numite resurse specifice.

            Pe lângã resursele specifice, fiecare agent utilizeazã ºi alte resurse care nu sunt la dispoziþia sa exclusivã; aceste resurse sunt procurate de pe piaþã, la concurenþã cu ceilalþi agenþi, datoritã faptului cã sunt disponibile în cantitãþi limitate. Acestea vor fi denumite resurse comune.

            În acest context, problema principialã care se pune este de a stabili cum vor fi repartizate resursele comune între agenþi astfel încât, la scara întregii economii, venitul sã fie maxim.

            Într-o economie centralizatã, repartizarea resurselor comune este fãcutã de stat care indicã fiecãrui agent ce ºi cât sã producã.

            Ne propunem sã arãtãm cum se face repartizarea comune într-o economie descentralizatã în care autoritatea centralã nu mai deþine controlul asupra acþiunilor agenþilor.

 

            Ne vom situa în cazul ideal al unei economii liniare, caracterizate prin urmãtoarele ipoteze:

·      pentru fiecare activitate, consumurile de resurse ºi venitul sunt direct proporþionale cu nivelul la care este operatã activitatea;

·      nivelul de operare al unei activitãþi poate fi reprezentat de orice numãr real nenegativ;

·      veniturile agenþilor nu se condiþioneazã reciproc ºi sunt egale cu suma veniturilor activitãþilor fiecãruia. Venitul la scara întregii economii este suma veniturilor agenþilor.

 

                 Pentru simplitatea expunerii vom presupune cã în economia studiatã existã numai doi agenþi.

Introducem notaþiile:

 

                 x1, x2 º vectorii (coloanã) nivelelor de operare ale activitãþilor celor doi agenþi;

                 b1 , b2 º vectorii (coloanã) cantitãþîlor disponibile din resursele specifice;

                 A1, A2 º matricile consumurlor unitare de resurse specifice;

                 M1, M2 º matricile consumurilor unitare din resursele comune;

                 d º vectorul (coloanã) cantitãþilor disponibile de resurse comune;

                 c1, c2 º vectorii (linie) veniturilor unitare corespunzãtoare celor doi agenþi.

 

Evident, nivelele de operare ale activitãþilor agenþilor sunt condiþionate de disponibilele de resurse specifice:

                                                      A1x1 £ b1                A2x2 £ b2                                               (4.1)

ºi în plus:

                                                          x1 ³ 0                    x2 ³ 0                                                 (4.2)

 

Vectorii  x1, x2 care satisfac relaþiile 4.1 - 4.2 se vor numi programe posibile de activitate.

                 Un cuplu de programe posibile (x1, x2) devine realizabil numai dacã necesarul de resurse comune se încadreazã în disponibilul dat adicã:

 

                                                    M1x1 + M2x2 £ d                                                                    (4.3)

 

Venitul total pe economie are expresia:

 

                                                         f = c1x1 +c2x2                                                                    (4.4)

 

 Reunind (4.1 - 4.4) obþinem programul liniar:

 

                                                                                                    (4.5)

 

care modeleazã problema repartizãrii resurselor comune în vederea maximizãrii venitului pe întreaga economie.

                 Observãm cã matricea programului (4.5) are structura bloc diagonalã cu restricþii de cuplare, identicã cu structura pe care s-a prezentat, în secþiunea precedentã, principiul de descompunere Dantzig - Wolfe.

 

                 Din punct de vedere formal, problema repartizãrii resurselor comune într-o economie descentralizatã înseamnã rezolvarea programului (P) în condiþiile în care nici agenþii nici autoritatea centralã nu au informaþii complete asupra acestuia. Astfel:

 

                 agentul 1 controleazã (cunoaºte)  b1, A1, M1, c1;

                 agentul 2 controleazã (cunoaºte)  b2, A2, M2, c2;

                 autoritatea centralã controleazã (cunoaºte) d.

 

Maximizarea venitului fiecãrui agent, þinând seama numai de resursele sale specifice, revine formal la rezolvarea programelor:

 

                      

dar nu rezolvã problema repartizãrii resurselor comune deoarece, dacã ºi  sunt soluþiile optime ale programelor din (4.6), este posibil ca:

 £ d

 

                 În continuare vom arãta  - în principiu - cum poate fi rezolvat programul (P) din (4.5) în situaþia în care nici autoritatea centralã ºi nici agenþii nu deþin informaþii complete asupra programului!

                 Vom presupune cã:

 

·      între autoritatea centralã ºi agenþi existã o cooperare în  sensul unui schimb de informaþii privind "intenþiile"de acþiune;

·      autoritatea centralã îºi asumã rolul de arbitru în urmãtorul sens: ea "anunþã" un sistem de preþuri pe resursele comune iar agenþii iau aceste peþuri ca date ºi îºi diminueazã veniturile cu valoarea resurselor comune solicitate.Fie u vectorul (linie) al acestor preþuri.Atunci:

·      agentul 1, pentru susþinerea unui program posibil x1 (posibil º A1x1 £ b1, x1 ³ 0),va trebui sã "plãteascã" valoarea uM1x1 astfel cã venitul sãu "net" va fi:

 

 

·      analog, venitul agentului 2, rezultat din programul posibil x2 (A2x2 £ b2, x2 ³ 0), va fi:

 

Maximizarea acestor venituri nete înseamnã rezolvarea programelor modificate:

 

                  

 

Agenþii comunicã autoritãþii centrale propunerile optimale  ºi . În principiu,autoritatea centrala analizeazã oportunitatea luãrii în considerare a acestor propuneri pentru maximizarea venitului pe economie ºi poate decide modificarea sistemului de preþuri, mãrind preþurile resurselor comune "intens" solicitate.

                 Noile preþuri sunt comunicate agenþilor; aceºtia vor cãuta noi soluþii care sã le maximizeze veniturile nete "corectate". Evident, prin creºterea  preþurilor la anumite resurse comune, cererile "excesive" din aceste resurse vor fi "temperate". Formal, cele spuse înseamnã reluarea programelor P1(u), P2(u) cu u modificat!

                 Important este cã într-un numãr finit de asemenea  "dialoguri º schimburi de informaþii" între agenþi ºi autoritatea centralã, vor rezulta soluþiile  ºi  care maximizeazã venitul total pe economie. În general,  ºi nu coincid cu una sau alta dintre propunerile agenþilor ( propuneri fãcute în cadrul dialogului sus amintit) ci sunt combinaþii convexe ale acestora. Tot odatã va rezulta ºi un sistem u* de preþuri pe resursele comune în raport cu care  ºi maximizeazã veniturile nete individuale ale agenþilor! Spuunem cã tripletul (,,u*) reprezintã un echilibru pentru economia (liniarã) consideratã.

 

                 Dialogul dintre autoritatea centralã ºi agenþi poate fi reprezentat astfel:

 

Nivel 2

                       Propuneri de programe

                       de activitate

 

 

 

 

 

 


Nivel 1

 

Figura 4.1

 

Comparând aceastã schemã cu cea din figura 3.4 se constatã cã cele spuse mai sus constituie o interpretare economicã a principiului de descompunere Dantzig - Wolfe.

 

§5. Algoritmul de descompunere Dantzig - Wolfe

 

            În aceastã secþiune vom arãta cum se rezolvã efectiv programul principal (PM) din secþiunea 3.

            Sã admitem pentru moment cã am cunoaºte toate constantele programului (PM). Vom aplica acestui program versiunea revizuitã a algoritmului simplex.

            Sã presupunem cunoscutã o bazã admisibilã B; în raport cu aceastã bazã partiþionãm vectorul l al variabilelor:

 

unde lB este vectorul variabilelor bazice iar lS al celor nebazice.

Soluþia  asociatã bazei B va avea forma:

B fiind presupusã admisibilã, . Fie:

         

 

vectorul multiplicatorilor simplex asociaþi bazei B (gB este vectorul format din coeficienþii gk ai variabilelor bazice lk din lB)

Valoarea funcþiei obiectiv f în soluþia de bazã  este:

Elementele numerice B-1, ºi p sunt reunite în urmãtorul tabel simplex redus:

 

 

 

 

 

 

 

 

 

 

 

 

 

lB

 

B-1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f

 

p

 

 

 

Tabelul 5.1

 

Din necesitãþi care vor deveni evidente imediat, partiþionãm p astfel:  p = (p0,u)

p0 fiind prima componentã din p iar u reunind pe celelalte.

            Testarea optimalitãþii soluþiei  necesitã calcularea costurilor reduse:

 

 

Dupã cum este bine ºtiut, dacã  atunci  este o soluþie optimã a programului (PM). Pentru a vedea dacã se întâmplã acest lucru evaluãm:

 

 

Se observã cã este valoarea maximã a funcþiei liniare  pe vârfurile mulþimii poliedrale mãrginite A .

            Conform teoremei centrale a programãrii liniare [9] , evaluarea acestui maxim nu necesitã cunoaºtera aprioricã a vârfurilor v1,...,vs; este suficient sã se rezolve programul liniar:

 

 

Fie v* o soluþie optimã a programului P(u) ºi  valoarea funcþiei obiectiv  în v*.  v* este unul din vârfurile mulþimii A  ºi putem scrie:

 

astfel cã:

           

Dacã   ( în fapt !) atunci soluþia  este optimã.

            Dacã  se calculeazã  Q* = Mv* ,  ºi se introduce în baza curentã coloana .

Dupã evaluarea coloanei   se determinã coloana care pãrãseºte baza actualã ºi se pivoteazã tabelul simplex redus curent, intrându-se într-o nouã iteraþie.

 

            Din descrierea fãcutã rezultã clar cã ameliorarea soluþiei admisibile de bazã  - presupusã datã - nu a necesitat cunoaºterea de la început a tuturor vârfurilor mulþimii  A ; vârful necesar în procesul de optimizare s-a obþinut rezolvând un program liniar de forma P(u) cu un vector u adecvat.

 

            În ceeace priveºte obþinerea unei soluþii de bazã iniþiale  pentru programul (PM), aceasta se poate obþine în maniera uzualã. Se pleacã de la o bazã unitarã ale cãrei coloane corespund:

·      (unele) unor (eventuale) variabile de abatere existente în blocul Mx = d;

·      (altele) unor variabile artificiale introduse în anumite ecuaþii ale blocului  Mx = d ºi/sau în ecuaþia de convexitate .

În cazul în care au fost efectiv folosite variabile artificiale, într-o primã fazã se va minimiza suma w a acestora. Coloanele care vor intra în bazã se vor genera dupã schema generalã de mai sus, funcþia f fiind înlocuitã cu funcþia w care se minimizeazã!!

 

Exemplu 5.1 Se considerã o economie liniarã descentralizatã cu doi agenþi, fiecare oprând câte o activitate. Fie x1 ºi x2 nivelele de operare ale celor douã activitãþi. Resursele specifice controlate de cãtre cei doi agenþi limiteazã nivelele activitãþilor dupã cum urmeazã:

 

x1 £ 4   ,   x2 £ 3

 

Susþinerea activitãþilor necesitã douã resurse comune R1 ºi R2 al cãror disponibil este limitat ºi controlat de o "autoritate centralã". La un nivel de operare egal cu unitatea, vectorii consumurilor din resursele R1 ºi R2 sunt:  pentru prima activitate ºi  pentru a doua. Vectorul cantitãþilor disponibile din resursele R1 ºi R2 este . În fine, veniturile unitare sunt de 7 u.m. (unitãþi monetare) în prima activitate ºi de 6 u.m. în a doua.

 

            Fiecare agent cautã sã obþinã un venit cât mai mare, dar ei nu deþin controlul asupra resurselor comune. Pe de altã parte, economia fiind descentralizatã, autoritatea centralã nu poate impune agenþilor nivelele la care sã opereze activitãþile proprii.

            Obiectivul urmãrit este maximizarea venitului total pe economie.

 

Formal, problema constã în rezolvarea programului liniar:

 

 

în situaþia încare nici agenþii, nici autoritatea centralã nu deþin "informaþii complete" asupra programului (P).

            Dupã cum am vãzut, rezolvarea este posibilã prin cooperarea dintre agenþi ºi autoritatea centralã, pe baza algoritmului de descompunere Dantzig - Wolfe.

 

Partiþionãm sistemul restricþiilor în douã blocuri:

 

 

 

Principiul de descompunere propune rezolvarea programului:

 

 

în care:

 

unde v1,...,vs sunt vârfurile mulþimii poliedrale:

 

A  = 

 

Este evidentã mãrginirea mulþimii A .

 

O datã obþinutã soluþia optimã  a programului propus, soluþia optimã a programului original (P) va rezulta din formula:

 

 

Aplicãm algoritmul simplex revizuit formei standard:

 

 

Variabilele de abatere y1 , y2 aratã ce cantitãþi din resursele comune R1 , R2 rãmân nefolosite.

 

            Programul (PM) are trei restricþii ºi se vede uºor cã matricea sa conþine coloanele unitare  ºi  corespunzãtoare variabilelor y1 , y2. Pentru o bazã unitarã de start ne-ar trebui ºi     coloana  care nu este tot aºa de "vizibilã". Am putea introduce o variabilã artificialã în restricþia de convexitate , dar putem proceda, mai simplu, ºi astfel:

Se observã cã vectorul nul  este unul din vârfurile v1,...,vs ale mulþimii A  (nu întotdeauna este aºa!); putem presupune cã v1 =.Atunci Q1 = Mv1 =  ºi .

În concluzie, matricea programului (PM) conþine coloana unitarã .

            Astfel, pentru (PM) dispunem de baza unitarã corespunzãtoare varibilelor l1, y1 ºi y2. Toate aceste variabile au coeficienþi nuli în funcþia obiectiv  aºa cã :

. În consecinþã, vectorul multiplicatorilor simplex asociaþi bazei unitare indicate este:

       

 

din care rezultã  p0  =  0  ,  u = [0,0]. Vectorul valorilor variabilelor bazice are componentele:

 

 

Valoarea funcþiei obiectiv este:

 

 

Toate aceste elemente formeazã tabelul simplex redus de start:

                                                                                                   

 

l1

1

1

0

0

(T1)

y1

9

0

1

0

 

y2

7

0

0

1

 

f

0

0

0

0

 

Tabelul 5.2

Considerarea vârfului v1 =  sugereazã cã, la iniþierea dialogului între agenþi ºi autoritatea centralã, se pleacã de la situaþia în care cele douã activitãþi nu sunt operate: x1 = 0 , x2 = 0.

y1 = 9 , y2 = 7 aratã cã resursele R1 ºi R2 nu sunt deocamdatã solicitate.

 

            Am vãzut în secþiunea 4 cã vectorul u are semnificaþia de sistem de preþuri pe resursele comune.Aceste preþuri sunt “anunþate” de cãtre autoritatea centralã agenþilor, care la rândul lor,  îºi vor maximiza veniturile “plãtind” pentru resursele comune solicitate. “Propunerile” de programe de activitate sunt “comunicate” de agenþi autoritãþii centrale. Aceasta preia  propunerile ºi încearcã, pe baza lor ºi a propunerilor “mai vechi”, sã construiascã o “mixturã” care sã se încadreze în disponibilul limitat de resurse comune ºi sã conducã la un venit total cât mai mare.

 

            Iteraþia 1 Autoritatea centralã anunþã sistemul de preþuri  u = (0,0) , altfel spus “oferã” resursele comune “pe gratis”.

            Agenþii rezolvã programul:

 

 

cu soluþia optimã evidentã:   

 

pe care o trimit “ca propunere de program de activitate” autoritãþii centrale. Deoarece:

 

 

soluþia din tabelul (T1) nu este optimã; baza curentã trebuie schimbatã prin introducerea unei noi coloane din matricea programului (PM). Aceastã coloanã se genereazã astfel:

 

Vectorul - notat în teoria premergãtoare cu v* - este un alt vârf al mulþimii A , sã zicem v2. Calculãm:

 

 

Coloana care intrã în bazã va fi: .

 

Calculele uzuale ale unei iteraþii din algoritmul simplex revizuit sunt indicate mai jos


 

Tabelul 5.3

 

          Iteraþia 2  Autoritatea centralã anunþã noul sistem de preþuri: u = (46/17 , 0).

Dupã cum se vede, resursa R2 este încã oferitã “pe gratis”, deoarece y2 = 20/17 aratã cã “mixtura”:

 

 

nu utilizeazã integral aceastã resursã.

 

Calculãm vectorul veniturilor unitare “nete”:

 

 

Agenþii vor avea de rezolvat programul:

 

 

a cãrui soluþie optimã este:

 

( La “preþurile actuale” agentul 1 are un venit net pozitiv; el îºi poate permite sã procure resursele R1 ºi R2 în cantitãþile necesare pentru operarea activitãþii sale la nivelul maxim posibil 4. Pentru agentul 2, resursa R1 este "prea scumpã": oricât de mic ar fi nivelul de operare al activitãþii proprii, “costul” resurselor R1 ºi R2 depãºeºte venitul sãu “brut” astfel cã, pentru agentul 2, decizia va fi “sã nu facã nimic”.)

          Deoarece :

 

soluþia din tabelul (T2) adicã “mixtura”  descrisã mai sus, nu este optimã.

 

Noua propunere a agenþilor  este un alt vârf, sã zicem v3, al mulþimii A , vârf care va produce coloana ce “îmbunãtãþeºte” baza curentã:

 

 

Intrã în bazã coloana:


Pivotãm tabelul curent (T2):

Tabelul 5.4

 

          Iteraþia 3  Noul sistem de preþuri pe resursele comune anunþat de autoritatea centralã va fi:

 

u = (5/4 , 9/4)

 

Veniturile unitare “nete” ale agenþilor devin:

 

 

Astfel, funcþia obiectiv a programului P(u = (5/4 , 9/4)) este constantã:  ºi în consecinþã valoarea ei maximã va fi . Deoarece  soluþia din tabelul (T3) este soluþia optimã a programului (PM). Soluþia optimã a programului original (P) este “mixtura convexã” a celor trei “propuneri” v1,v2,v3:

 

 

iar venitul maxim total are valoarea (max)f = 27.

 

            § 6. Metoda generãrii de coloane pentru problema croirii

 

            Dupã cum am vãzut, principiul de descompunere Dantzig - Wolfe rezolvã un program liniar cu multe restricþii înlocuindu-l cu un altul - numit program principal - cu mai puþine restricþii dar cu foarte multe coloane (variabile) care nu sunt disponibile de la început! În orice fazã a rezolvãrii programului principal, un numãr relativ mic de coloane sunt cunoscute, coloanele necesare îmbunãtãþirii soluþiilor intermediare fiind generate la "cerere".

 

            Scopul acestei secþiuni este acela de a arãta cum se aplicã tehnica generãrii de coloane în rezolvarea altor probleme de optimizare similare cum este de exemplu problema croirii introdusã în capitolul II, §2. În continuare vom vedea cã aceastã tehnicã necesitã luarea în considerare a unei probleme de optimizare foarte simple ca structurã dar deosebit de importantã în optimizarea combinatorialã - problema rucsacului. Pentru aceastã subproblemã, în secþiunea urmãtoare, va fi prezentatã o metodã specificã de rezolvare bazatã pe programarea dinamicã.

 

            6.1 Problema croirii unidimensionale. Enunþ ºi model matematic

 

Un numãr de m repere cu lungimile l1,l2,...,lm trebuiesc croite din suporþi cu lungimea comunã L în cantitãþile b1,b2,...,bm .Obiectivul constã în satisfacerea cererilor cu un consum minim de suporþi.

 

Presupunem  cã  L ºi  l1 ,l2 ,..., lm  sunt  exprimate  prin  numere  întregi , pozitive  ºi  cã           L > l1 >l2 >..>lm. Am numit reþetã de croire o modalitate de tãiere a unui suport în repere cu lungimile cerute. Formal, o reþetã de croire se identificã cu un vector a = (a1,a2,...,am) cu componente numere întregi nenegative în care ai reprezintã numãrul reperelor cu lungimea li rezultate din tãierea suportului. Suma lungimilor reperelor astfel obþinute nu depãºeºte lungimea suportului, astfel cã:

 

Numãrul acestor reþete este finit ºi ordonându-le într-un fel oarecare, de exemplu lexicografic,obþinem lista:

 

 

(pentru nevoi ulterioare reþetele vor fi scrise în coloanã). Dacã notãm cu xj numãrul de suporþi tãiaþi dupã reþeta aj ( xj se mai numeºte ºi multiplicitatea reþetei aj) modelul matematic al problemei de croire este:

 

 

Deoarece pritre reþetele a1,a2,...,an se numãrã ºi reþetele unitare:

 

(1,0,0,...,0)  ,  (0,1,0,...,0) , ..., (0,0,0,...,1)

 

problema (P) are soluþii admisibile (cu componente) întregi ºi chiar soluþie optimã.

 

În cazul - frecvent întâlnit în practicã - în care ne limitãm la utilizarea numai a aºa numitelor reþete maximale - adicã  a acelor reþete a = (a1,a2,...,am) pentru care restul:

 

 

este mai mic decât lungimea celui mai mic reper - problema de croire se formalizeazã astfel:

 

 

unde A1 , A2 , ..., AN  este (sub)lista reþetelor maximale, iar y1,y2,...,yN  sunt multiplicitãþile acestora.

Observaþie: Dacã în modelul (P) toate restricþiile erau egalitãþi (aceasta însemnând croirea reperelor "exact" în cantitãþile cerute) în noul model (P') nu mai putem impune aceeaºi condiþie deoarece,prin restrângerea modalitãþilor de croire a unui suport, este posibil ca sistemul  sã nu aibe soluþii întregi nenegative! Iatã de ce, pentru a asigura compatibilitatea noului model suntem nevoiþi sã admitem cã anumite repere pot fi croite "în exces".

            Programele întregi (P) ºi (P') sunt în esenþã echivalente în sensul cã au acelaºi optim întreg iar soluþia optimã a programului (P) utilizeazã cu prioritate reþete maximale; în conssecinþã, în cele ce urmeazã vom studia programul "mai general" (P).

 

            Exemplul 6.1 Considerãm cazul croirii a trei repere cu lungimile l1 = 11, l2 =7 , l3 =4 din suporþi cu lungimea L = 19. În urmãtorul tabel sunt indicate toate reþetele de croire ºi sunt puse în evidenþã reþetele maximale.

 

Reþeta

a1 º A1

a2 º A2

a3

a4

a5 º A3

a6

a7 º A4

a8

a9

a10

a11ºA5

a12

a13

a14

l1 = 11

1

1

1

1

0

0

0

0

0

0

0

0

0

0

l2 = 7

1

0

0

0

2

2

1

1

1

1

0

0

0

0

l3 = 4

0

2

1

0

1

0

3

2

1

0

4

3

2

1

Rest

1

0

4

8

1

5

0

4

8

12

3

7

11

15

 

Tabelul 6.1

 

Pentru cererile b1 =12 , b2 =18 , b3 =30 :

 

·      luarea în considerare a tuturor reþetelor de croire - maximale ºi nemaximale - conduce la modelul:

 

 

·      având în vedere numai reþetele maximale obþinem modelul:

 

 

            Ca orice problemã de programare în numere întregi ,(P) este foarte greu de rezolvat. În marea majoritate a aplicaþiilor practice vom fi fericiþi sã obþinem - în timp util ºi cu un efort computaþional rezonabil - o soluþie "bunã" nu neapãrat optimalã. Aºa cum s-a indicat în capitolul I,§1,o asemenea soluþie s-ar putea obþine rotunjind convenabil soluþia optimã a problemei relaxate (PL) dedusã din (P) prin eliminarea cerinþei ca variabilele sã ia numai valori întregi. Aceastã tacticã conduce la rezultate foarte bune în special în cazurile în care cererile b1,b2,...,bm sunt mari; într-adevãr în aceste cazuri, componentele soluþiei optime fracþionare vor fi suficient de mari astfel cã pierderile datorate rotunjirii vor fi mici ºi nesemnificative.

 

            În continuare ne vom ocupa de rezolvarea relaxatei (PL) a problemei de croire (P):

 

 

Dificultatea rezolvãrii acestei probleme rezidã în numãrul foarte mare de coloane (reþete) pe care le poate avea (mai cu seamã în situaþile reale) ºi care - în cazul rezolvãrii "obiºnuite" - ar trebui mai întâi generate. Vom vedea în continuare cum se poate evita acest impediment.

 

            6.2 Teoria metodei generãrii de coloane

 

Vom aplica problemei (PL) versiunea revizuitã a algoritmului simplex.. La start, se poate pleca cu baza formatã din cele m  reþete unitare:

  cu tabelul redus:

 

e1

b1

1

 

 

 

e2

b2

 

1

 

 

M

M

 

 

O

 

em

bm

 

 

 

1

f

Sbi

1

1

K

1

 

Tabelul 6.2

 

Cel mai bine este sã se plece cu baza formatã din cele m reþete unicat:

 

 în care:

 

  ,   , … ,

 

ºi cu tabelul simplex redus:

 

K1

b1/r1

1/r1

 

 

 

K2

b2/r2

 

1/r2

 

 

M

M

 

 

O

 

Km

bm/rm

 

 

 

1/rm

f

Sbi/ri

1/r1

1/r2

 

1/rm

 

Tabelul 6.3

 

Fie B baza admisibilã curentã,  soluþia asociatã bazei B. Presupunem disponibil tabelul simplex corespunzãtor; vezi tabelul 6.4

 

Reamintim cã:

 

Dupã cum se ºtie, soluþia va fi optimã dacã, pentru toate coloanele avem:

 

 

Pentru a testa îndeplinirea condiþiei de mai sus este suficient sã calculãm:

 

 

ºi cum fiecare aj este o soluþie cu componente întregi nenegative a inecuaþiei  va fi suficient sã rezolvãm programul auxiliar:

 

 

Dacã maximul funcþiei obiectiv din  R(p)  este £ 1 este clar cã  pentru toþi j = 1,…,n ºi soluþia  asociatã bazei B este optimã.

Dacã maximul din R(p) este > 1 atunci soluþia optimã a* a programului R(p) este o reþetã, fie ea ak , din lista  a tuturor reþetelor, cu proprietatea:

.

 

Introducem în baza curentã coloana ak urmând instrucþiunile algoritmului simplex revzuit. Obþinem o nouã bazã admisibilã B’, o nouã soluþie a problemei (PL) în general mai bunã decât soluþia veche  ºi un nou tabel simplex redus în care aopare un nou vector p’ de multiplicatori simplex.Pentru a testa optimalitatea noii soliuþii rezolvãm programul R(p’) etc.

Procesul iterativ se încheie într-un numãr finit de paºi cu gãsirea soluþiei optime a problemei (PL).

 

 

 

 

 

 

 

 

 

 

 

 


Tabelul 6.4

 

 

            6.3 Rezumatul procedurii Generare de Coloane pentru rezolvarea relaxatei   problemei de croire 

 

            Start Se pleacã cu baza formatã din reþetele unicat(6.1) ºi cu tabelul simplex redus 6.3. Fie B baza curentã ºi p = cB× B-1  vectorul multiplicatorilor simplex corespunzãtori.

Conþinutul unei iteraþii:

 

            Pasul 1     Se rezolvã problema auxiliarã:

 

 

(vezi secþiunea urmãtoare în ceeace priveºte modul algoritmic de rezolvare al problemei R(p) .

 

            Pasul 2 Dacã maximul funcþiei obiectiv din R(p) este £ 1 stop: soluþia curentã a problemei (PL) este optimã. Altminteri:

 

            Pasul 3 Fie a* soluþia optimã a problemei R(p) . Se introduce în baza curentã B coloana a* (reindexatã eventual cu numãrul de ordine al iteraþiei) urmând instrucþiunile algoritmului simplex revizuit. Se revine la pasul 1 în cadrul unei noi iteraþii.

 

            Exemplul 6.2 Vom rezolva relaxata (PL) a problemei de croire (P) din exemplul 6.1 (sfãtuim cititorul sã ignore faptul cã am generat deja toate reþetele de croire ale problemei...De altfel, diferitele reþete folosite de algoritm vor avea o notare diferitã de cea din tabelul 6.1)

 

            Start. Plecãm cu baza formatã din reþetele unicat:

 

 

 este o matrice diagonalã a cãrei inversã este :. Soluþia asociatã bazei B = [K1,K2,K3]:

 

(celelalte reþete - pe cqre de fapt nu le ºtim - nu se folosesc).

Multiplicatorii simplex asociaþi bazei [K1,K2,K3]sunt:

 

 

Valoarea funcþiei obiectiv în soluþia construitã este: `f =p×b = 1×12 + ×18 + ×30 = 28×

Tabelul simplex redus de start:

 

K1

12

1

0

0

K2

9

0

1/2

0

K3

15/2

0

0

1/4

f

57/2

1

1/2

1/4

 

Tabelul 6.5

 

            Iteraþia 1 Se rezolvã problema :

 

 

Prin simplã inspecþie (în cazul de faþã) sau aplicând un algoritm adecvat dacã numãrul reperelor este mare (vezi secþiunea urmãtoare) se gãseºte (max)r = 3/2 > 1 ºi soluþia optimã a* = (1,1,0) care este o reþetã maximalã. Renotãm a* : A1 = (1,1,0)T ºi introducem A1 în baza curentã:

 

 

 

A1

®

1

1

0

 

 

 

 

 

 

 

 

 

K1

12

1

0

0

1

º pivot

 

A1

12

1

0

0

 

K2

9

0

1/2

0

1/2

 

Þ

K2

3

-1/2

1/2

0

 

K3

15/2

0

0

1/4

0

 

 

K3

15/2

0

0

1/4

 

f

57/2

1

1/2

1/4

1/2

=(max)r-1

 

f

45/2

1/2

1/2

1/4

 

 

                             Tabelul6.6a                                                              Tabelul 6.6b

 

            Iteraþia 2 Rezolvãm problema:

 

 

al cãrei optim , (max)r = 5/4 > 1 , se atinge  pe reþeta maximalã a* =  (0,2,1)T ,renotatã A2. Introducem A2 în baza curentã:

 

 

 

 

 

A2

®

0

2

1

 

 

 

 

 

 

 

 

 

A1

12

1

0

0

0

 

 

A1

12

1

0

0

 

K2

3

-1/2

1/2

0

1

º pivot

Þ

A2

3

-1/2

1/2

0

 

K3

15/2

0

0

1/4

1/4

 

 

K3

27/4

1/8

-1/8

1/4

 

f

45/2

1/2

1/2

1/4

1/4

=(max)r-1

 

f

87/4

5/8

3/8

1/4

 

 

                             Tabelul6.7a                                                              Tabelul 6.7b

 

            Iteraþia 3 Acum se rezolvã problema:

 

 

Se gãseºte (max)r = 9/8 > 1 ºi soluþia optimã a* =  (1,0,2)T ,renotatã A3. Introducem A3 în baza curentã:

 

 

A3

®

1

0

2

 

 

 

 

 

 

 

 

 

Line Callout 3 (Border and Accent Bar): coloana B-1×A3A1

12

1

0

0

1

 

 

A1

6/5

4/5

1/5

-2/5

 

A2

3

-1/2

1/2

0

-1/2

 

Þ

A2

42/5

-2/5

2/5

1/5

 

K3

27/4

1/8

-1/8

1/4

5/8

º pivot

 

A3

54/5

1/5

-1/5

2/5

 

f

87/8

5/8

3/8

1/4

1/8

=(max)r-1

 

f

102/5

3/5

2/5

1/5

 

 

                             Tabelul6.8a                                                              Tabelul 6.8b

 

            Iteraþia 4 Rezolvãm problema:

 

 

De aceastã datã (max)r = 1 astfel cã soluþia curentã,înscrisã în tabelul 6.  , este optimã.

 

În concluzie, soluþia optimã fracþionarã a problemei de croire date utilizeazã:

 

·      reþeta maximalã A1 = (1,1,0)T cu multiplicitatea ;

·      reþeta maximalã A2 = (0,2,1)T cu multiplicitatea ;

·      reþeta maximalã A3 = (1,0,2)T cu multiplicitatea .

Numãrul suporþilor "consumaþi" este : .

Observaþie: Reîntorcându-ne la problema de croire generalã (P) ºi la relaxata acesteia se constatã imediat cã optimul întreg  este cel puþin egal cu rotunjirea superioarã a optimului fracþionar!

În cazul de faþã rezultã cã soluþia optimã întreagã va utiliza cel puþin suporþi.

Sã vedem acum cum se determinã o soluþie "bunã" pentru problema de croire studiatã.

 

            Etapa 1 Se rotunjesc inferior  multiplicitãþile reþetelor din soluþia optimã a problemei relaxate (PL):

 

 

            Etapa 2 Se determinã cantitãþile de repere ce pot fi croite cu reþetele din soluþia optimã fracþionarã dar cu multiplicitãþile rotunjite inferior:

 

            Etapa 3 Se determinã cantitãþile de repere care mai sunt de croit:

 

 

            Etapa 4 Pentru "cererea rezidualã"  b' se aplicã urmãtoarea euristicã, numitã FFD (First Fit Decreasing):

 

·      se determinã prima reþetã în sens lexicografic care "încape" în b';

·      se actualizeazã b' prin extragerea reþetei gãsite ºi se reia pasul precedent.

 

În cazul nostru prima reþetã cuprinsã în b' este (1,1,0)T = A1.Actualizãm cererea rezidualã:

 

 

Au mai rãmas douã repere cu lungimea l3 = 4 a cãror croire necesitã consumarea unui suport .

 

            Recapitulând, o soluþie "bunã" pentru croirea cantitãþilor de repere cerute ar fi urmãtoarea:

·      se foloseºte reþeta A1 = (1,1,0) de 1 + 1 = 2 ori;

·      se foloseºte reþeta A2 = (0,2,1) de  8 ori;

·      se foloseºte reþeta A3 = (1,0,2) de  10 ori;

·      se mai taie dintr-un suport douã repere cu lungimea l3 = 4 adicã se foloseºte reþa nemaximalã (0,0,2) .

În total se consumã 2 + 8 + 10 + 1 =21 suporþi ºi în baza unei observaþii anterioare soluþia construitã este chiar optimã!

 

          Concluzii finale

 

1.    În soluþia optimã a problemei relaxate se utilizeazã numai reþete maximale;

2.    Dupã aplicarea euristicii FFD asupra cererii reziduale, pot apare ºi câteva reþete nemaximale - de regulã una singurã;

3.    Numeroasele experimente numerice au arãtat cã optimul întreg al problemei de croire unidimensionale este de regulã egal cu rotunjirea întreagã superioarã a optimului fracþionar ºi numai în rare cazuri este mai mare decât aceasta cu exact o unitate!

 

            §7  Programare dinamicã

 

În aceastã secþiune ne vom opri asupra problemei :

 

 

în care    sunt întregi pozitivi.

În secþiunea precedentã, (R) a apãrut ca subproblemã în rezolvarea relaxatei problemei de croire unidimensionale prin metoda generaãrii de coloane. Este clar cã eficacitatea metodei amintite depinde de performanþele algoritmilor utilizaþi pentru rezolvarea problemei (R).

 

            (R) este un progam liniar în numere întregi foarte simplu, având o singurã restricþie. În literatura de specialitate este cunoscutã sub numele de problema rucsacului datoritã urmãtoarei interpretãri:

            ai este numãrul pieselor de echipament de greutate li  ºi utilitate pi  care trebuie luate într-o excursie într- un rucsac ce suportã o greutate maximã L. Întrebare: ce piese de echipament trebuie alese ºi în câte exemplare vor fi acestea introduse în rucsac astfel încât utilitatea încãrcãturii sã fie maximã?

 

            Fireºte, (R) poate fi rezolvatã prin metodele specifice programãrii în numere întregi (plane de secþiune, Branch & Bound etc). Faptul cã (R) are o singurã restricþie permite abordarea ei prin programare dinamicã. Mai precis, pentru fiecare k = 1,…,m ºi fiecare întreg l =0,1,…,L considerãm problema:

 

 

al cãrei optim îl notãm cu rk(l). Este clar cã  R = Rm(l) ºi cãaximul funcþiei obiectiv din R este rm(L).

            Observãm cã, pentru k fixat rk este o funcþie de o singurã variabilã ale cãrei valori admisibile sunt 0,1,…,L.

            Funcþiile r1 , r2 , … , rm-1 , rm  pot fi determinate astfel:

 

·        =        l = 0,1,…,L                                        (7.1)

 

·        pentru k > 1 avem formula de recurenþã:

                          ê                                (7.2)

 

·        pentru k = m este suficient sã gãsim numai valoarea funcþiei rm  în L:

 

                      ê                               

 

Relaþia (7.2) aratã cã funcþiile r2,…,rm-1,rm  rezultã din niºte procese de optimizare unidimensionale.

 

            Sã presupunem cunoscute funcþiile r1 , r2 , … , rm-1 ºi valoarea rm(L) ºi sã notãm cu  valoarea variabilei ak care – pentru l dat – realizeazã maximul din formula de recurenþã (7.2). Pentru k = 1 avem  . Atunci, o soluþie optimã a problemei (R) se gãseºte astfel:

 

            Observaþii: 1) În termenii problemei rucsacului rk(l) este valoarea maximã a unei încãrcãri a rucsacului ce nu depãºeºte în greutate plafonul l ºi care este formatã numai din primele k tipuri de echipament.

 

            2) Prin programarea dinamicã rezolvarea problemei de optimizare multidimensionalã (R) este înlocuitã cu o secvenþã de optimizãri unidimensionale bazate pe formula de recurenþã (7.2).

 

3) Ecuaþia funcþionalã (7.2), prin care funcþiile r1 , r2 , … , rm-1 , rm se deduc una din alta formalizeazã – în cazul problemei (R) – principiul central al programãrii dinamice datorat lui R. BELLMAN : O strategie (secvenþialã)  optimã are proprietatea cã oricare ar fi starea iniþialã ºi decizia iniþialã, deciziile rãmase constituie o strategie optimã în raport cu starea care rezultã din prima decizie.

 

 

Demonstraþia formulei (7.2)

 

Fie  o valoare întreagã , , datã variabilei ak . Fie o soluþie optimã a problemei . Prin urmare:

 

Deoarece  rezultã cã este o soluþie admisibilã a problemei  care dã funcþiei obiectiv valoarea:

 

În consecinþã:

 

ºi cum  a fost arbitrar aleasã (între 0 ºi ) urmeazã cã:

 

ê

 

Pe de altã parte fie  o soluþie optimã  a problemei .Prin urmare:

 

 

Din  rezultã cã este o soluþie admisibilã a problemei  ºi deci:

 

Sã arãtãm cã în ultima relaþie avem egalitate. Presupunând prin absurd contrariul fie  o soluþie optimã a problemei . În consecinþã vom avea:

 

 

 

Prin urmare este o soluþie admisibilã a problemei  ºi deoarece

 

 

tragem concluzia cã  nu este soluþie optimã a problemei  contrar ipotezei.

În definitiv:

astfel cã:

 

 ê

 

Egalitatea (7.2) este demonstratã.

 

            Exemplul 7.1 Vom aplica procedura descrisã problemei:

 

 

            Iteraþia 1 Determinãm valorile funcþiei pentru l = 0,1,...,11

Ele sunt înscrise în tabelul 7.1

 

 

l

0

1

2

3

4

5

6

7

8

9

10

11

r1(l)

0

0

0

0

0

16

16

16

16

16

32

32

0

0

0

0

0

1

1

1

1

1

2

2

 

Tabelul 7.1

 

            Iteraþia 2 În continuare calculãm valorile funcþiei

 

ê}=

ê} unde l = 0,1,...,11

Astfel, pentru l = 0,1,2,3  r2(l) = r1(l) ; pentru l = 4,5,6,7 vom avea:

 

ê}=

iar pentru l =8,9,10,11

 

ê}=

 

Rezultatele sunt afiºate în tabelul 7.2

 

 

l

0

1

2

3

4

5

6

7

8

9

10

11

r2(l)

0

0

0

0

12

16

16

16

24

28

32

32

0

0

0

0

1

0

0

0

2

1

0

0

 

Tabelul 7.2

 

            Iteraþia 3 În final vom evalua numai:

ê=

 

 

            Determinarea soluþiei optime ("de la sfârºit cãtre început")

 

               Pasul 1 ;

               Pasul 2 ;

               Pasul 3

                             .

 

Soluþia optimã a problemei date este:

 

            § 8. Întrebãri ºi probleme

 

1.Este cunoscut faptul cã problemele practice de optimizare de dimensiuni "mari" au o structurã "specialã". Ce înseamnã aceastã structurã specialã în programarea liniarã?

 

2.Ce caracteristici are programul principal (Pm) rezultat din aplicarea metodei de descompunere Dantzig - Wolfe? Ce metodã se utilizeazã pentru rezolvarea lui?

 

3.Se considerã un program liniar în formã canonicã de maximizare a cãrui mulþime de restricþii a fost partiþionatã în douã blocuri:

 

în notaþiile matriciale ale secþiunii 3.

 

Sã presupunem cã ºi sunt doi vectori nenegativi de dimensiuni convenabile astfel încât:

·      este soluþia optimã a programului

·     

·     

Sã se arate cã este soluþia optimã a programului (P).

 

.4. [3] Utilizaþi algoritmul de descompunere Dantzig - Wolfe la rezolvarea urmãtoarelor programe liniare custructurã bloc - diagonalã ºi restricþii de cuplare:

 

             

 

În rezolvarea subproblemelor de la nivelul 1 se poate folosi metoda graficã.

 

5. Pentru instalaþia de apã a unui imobil în construcþie sunt necesare 80 de þevi de 2m, 40 de þevi de 2,50m ºi 30 de þevi cu lungimea de 3,50m. Aceste bucãþi se taie din þevi cu lungimea de 9m.

 

a) Alcãtuiþi lista reþetelor maximale de croire;

b) Scrieþi un program liniar în numere întregi pentru minimizarea numãrului de þevi de 9m ce vor fi tãiate;

c) Rezolvaþi programul relaxat prin metoda generãrii de coloane;

d) Plecând de la soluþia optimã fracþionarã construiþi o soluþie "bunã" a problemei date;ar putea fi optimã soluþia construitã de dvs.?

 

6.Problema rucsacului. Formulare ºi model matematic.Descrieþi algoritmul de ezolvare al problemei rucsacului prin programare dinamicã.

 

7. Rezolvaþi problemele de tip rucsac: