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
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
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,
(celelalte reþete - pe cqre de fapt nu le ºtim - nu se folosesc).
Multiplicatorii
simplex asociaþi
bazei [K1,
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 |
|
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 |
|
|
9 |
0 |
1/2 |
0 |
1/2 |
|
Þ |
|
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 |
|
|
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 |
|
|
|
|
|
|
|
|
|
A1 |
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:
Î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: