1 / 20

Curs 7

Curs 7. Paradigma Programare dinamica Prezentarea generala a paradigmei Studii de caz alocarea resurselor drumurile minime intr-un digraf rucsac 0/1 distanta intre siruri. Programare dinamica - ingrediente. probleme de optim

audi
Download Presentation

Curs 7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs 7 • Paradigma Programare dinamica • Prezentarea generala a paradigmei • Studii de caz • alocarea resurselor • drumurile minime intr-un digraf • rucsac 0/1 • distanta intre siruri

  2. Programare dinamica - ingrediente • probleme de optim • definirea subproblemei (stare) si asocierea functii obiectiv pentru subproblema • definirea unei relatii de tranzitie intre stari (decizie) • politica = secventa de decizii • aplicarea Principiului de Optim pentru obtine relatia de recurenta Principiul de Optim (PO): o subpolitica a unei politici optimale este la rindul ei optimala • calculul recurentei rezolvind subproblemele de la mic la mare si memorind valorile date de relatia de recurenta intr-un tablou • extragerea solutiei optime din tablou

  3. Exemplu: retea triunghiulara de numere: modelare a0 • functia obiectiv: maxdD lg(d) • stare: DMR(i) = subreteaua cu virful in ai • val. asociata: i • functia asociata: f(i) = maxdD(i) lg(d) • decizii posibile: DMR(i)  DMR(stg(i)), DMR(i)  DMR(drp(i)) • recurenta obtinuta: f(i) = max(f(stg(i)), f(drp(i))) + ai a1 a2 a3 a4 a5 a6 a7 a8 a9

  4. Exemplu: retea triunghiulara de puncte: implementare • Tine minte! Rezolva subproblemele de la mic la mare si memoreaza valorile date de relatia de recurenta intr-un tablou • valorile functiei f[] vor fi calculate in ordinea f[n-1], f[n-2], ..., f[2], f[1], f[0] Atentie! Transformarea recurentei in recursie duce la solutii costisitoare (subprobleme rezolvate de mai multe ori). • extragerea solutiei optime din tabel • initial: sol[0] = 0 • pas curent: • daca f[sol[i]] = f[stg[sol[i]]]+a[sol[i]] atunci sol[i+1] = stg[sol[i]] altfel sol[i+1] = drp[sol[i]]

  5. Alocarea resurselor • Pentru realizarea a p proiecte sunt disponibile r resurse. • Alocarea a j resurse la proiectul i produce un profit c[i,j]. • Problema consta in alocarea celor r resurse astfel incat profitul total sa fie maxim. c[2,0] c[2,1] c[3,2] c[1,0] c[1,1] c[2,0] c[3,1] s t c[2,2] c[2,1] c[1,2] c[3,0] c[2,0] proiectul 3 proiectul 1 proiectul 2

  6. Alocarea resurselor • Intrare: • Digraf etajat G = (V, E), • V = V1  V2  … Vp  Vp+1 • Vi  Vj = Ø • V1 = {s}. Vp+1 = {t} • daca un arc are sursa in Vi atunci are destinatia in Vi+1 • functie de profit c : A  R • Iesire: un drum de la s la t de profit maxim

  7. Alocarea resurselor • X  V • stare: DODE(j) = problema determinarii drumurilor de la j la t • V = {0, 1, …, n-1} • D[i,j] = drumul optim la j  Vi la t • ValOpt[i,j] valoarea acestui drum • decizie: DODE(j)  DODE(k) • aplicam PO si obtinem ValOpt[i, j] = c[j, k] + ValOpt[i+1, k] • de unde rezulta recurenta: ValOpt[p+1, n-1] = 0 ValOpt[i, j] = optim{c[j, k] + ValOpt[i+1, k] | k  Vi+1, (j,k)  A} • ordinea de rezolvare a subproblemelor: DODE(Vp+1), DODE(VpVp+1), …, DODE(V)

  8. Alocarea resurselor function alocRes(G, ValOpt, D) for j  0 to G.n-2 do ValOpt[j]  ValOpt[G.n-1]  0 for k  G.n-1 downto 1 do q  G.a[k] while (q  NULL) do j  q->varf if (ValOpt[j] < ValOpt[k] + q->c) then ValOpt[j]  ValOpt[k] + q->c S[j]  k q  q->succ D[0]  0 D[p]  n-1 for i  1 to p-1 do D[i]  S[D[i-1]] return ValOpt[0] end

  9. Drumuri minime intr-un digraf • Problema • instanta: • D = (V, A, lg), lg : A  R • lg[i, i] = 0, lg[i, j] =  daca (i,j)  A • lungime drum =  lungimilor arcelor de pe drum • iesire: • pentru orice pereche (i,j) lungimea celui mai scurt drum de la i la j • Modelul matematic • stare: DMD(X) – drumuri minime cu virfuri intermediare in X • functia asociata: LX[i, j] = lung. drumului minim de la i la j cu virfuri intermediare in X

  10. Drumuri minime intr-un digraf (continuare) • decizie: DMD(X{k})  DMD(X) • relatia de recurenta: LX {k}[i, j] = min{LX[i, j], LX[i, k] + LX[k, j]} L[i, j] = lg[i, j] • politica optima: DMD(), DMD({0}), DMD({0,1}), ..., DMD({0,1, ...,n-1}) • notatie: Lk[i, j] = L{0,1,...,k-1}[i, j] Lk[i, j] = min{Lk-1[i, j], Lk-1[i, k] + Lk-1[k, j]} • matricele Lk sint calculate in ordinea L0, L1,…, Ln

  11. Drumuri minime intr-un digraf: algoritm (Floyd-Warshall) procedure DMD(D, L) begin for all [i,j] do if (i,j) A) then L[i,j]  lg[i,j] else L[i,j]   if (i = j) then L[i,j] = 0; for k  1 to n do for all [i,j] do temp  L[i,k] + L[k,j] if (L[i,j] > temp) then L[i,j]  temp if (i=j and L[i,i] < 0) then throw “ERR:circuit negativ” end

  12. Problema rucsacului (varianta discreta): formulare • instanta: • n obiecte 0, 1, ..., n-1 de dimensiuni (greutati) w0, w1, ..., wn-1 • un rucsac de capacitate M • un obiect i poate fi introdus in rucsac complet (xi = 1) sau de loc (xi=0) • introducerea in rucsac a obiectului i aduce un profit pi • profitul total adus de alegerile x0, ..., xn-1 este i=0,n-1 xipi • iesire: • o alegere pentru care profitul adus este maxim

  13. Problema rucsacului (varianta discreta): solutie • modelul matematic • stare: RUCSAC(j, X) • functia obiectiv: max i=0,j-1 xipi • restrictii: (i)xi  {0,1} i=0,j-1 xiwi  X X  Z, (i)wi ,pi  Z • functia asociata unei stari: fj(X) = max i=0,j-1 xipi

  14. Problema rucsacului (varianta discreta): solutie (cont) • decizie: RUCSAC(j, X)  RUCSAC(j-1, ?) • relatia de recurenta:

  15. Problema rucsacului (varianta discreta): exemplu X 0 1 2 3 4 5 6 7 8 9 10 f0(X) 0 0 0 0 0 0 0 0 0 0 f1(X) 0 0 0 10 10 10 10 10 10 10 f2(X) 0 0 0 10 10 30 30 30 40 40 f3(X) 0 0 0 10 10 30 30 30 40 40 • M = 10, p = (10, 30, 20), w = (3, 5, 6) 0 10 40 40 x2 = 0 x1 = 1 x0 = 1

  16. Problema rucsacului (varianta discreta): functiile fi • fi este o functie in scara • graficul lui fi poate fi reprezentat prin multimea punctelor de salt Si • graficul lui gi-1(X) = fi-1(x-wi-1)+pi-1 este o translatie a lui Si-1 ; notam (Si-1) • graficul lui fi = max(fi-1, gi-1) se obtine prin interclasarea graficelor Si-1 si (Si-1); notam (Si-1,(Si-1))

  17. Problema rucsacului (varianta discreta): algoritm procedure Rucsac(n, p, w) begin /* calculeaza valoarea optima */ S0  {(0,0)} for i  1 to n do Si (Si-1,(Si-1)) /* determina alegerea optima */ calc. (U,V) a.i. Xj= max{Xi|(Xi,Yi) Sn, Xi  M} for i  n-1 downto 0 do if ((U,V) Sithen xi+1 = 0 else xi+1 = 1; (U,V) = (U-wi+1,V-pi+1) end

  18. Problema rucsacului (varianta discreta): complexitate • calculullui Si din Si-1 se face in timpul |Si| • punctele (Xj,Yj)din Sisatisfac: • 0 Xj M • 0 Yjkpk nmaxkpk • rezulta |Si|  min(M, nmaxkpk) nmax(p0, p1,…, pn-1,M) • rezulta ca Sn-1 se calculeaza in timpul O(n2max(p0, p1,…, pn-1,M)) • calcululsolutiei se face in timpul O(n) • rezulta ca timpul de executie a algoritmuluieste O(n2max(p0, p1,…, pn-1,M)) • spatiul: |S0| + |S1| + … + |Sn-1| = O(n2max(p0, p1,…, pn-1,M)) • dacamax(p0, p1,…, pn-1,M) > 2natuncitimpul de executie a algoritmuluieste exponential • algoritmuleste pseudo-polinomial

  19. Algoritmi pseudo-polinomiali • consideram probleme pentru care intrarea pentru P este data ca o secventa de numere intregi • presupunem ca intrarea este codificata peste alfabetul {0,1,#} • daca x = (x0, x1,…, xn-1), atunci cod(x) = cod(x0)#cod(x1)#…#cod(xn-1), cod(x1)  {0,1}* • max(x) = max{x0, x1,…, xn-1} • un algoritm A pentru P este pseudo-polinomial (relativ la timpul de executie) daca exista un polinom p(X,Y) de doua variabile astfel incat timpul de executie a lui A este TA(x) = O(p(|cod(x)|, max(x))) • daca q(X) este un polinom astfel incat max(x)  q(|cod(x)|), atunci TA(x) este marginit de un polinom

  20. Algoritmi pseudo-polinomiali s  0 i  0 while (i < m) do i i+1 s  s + i • nr. de bitipentrureprez. lui m este • n = [log m] + 1 • luam m = 2n-1 • presupunem ca op. i < m sii i+1 se executafiecare in timpul log i • prespunem ca op. s  s + ise executa in timpul log s • rezulta un timp de calcul • TA(m) = Θ(m log m) = Θ(n 2n) • algoritmuleste pseudo-polinomial • p(X,Y) = XY • TA(m) = Θ (p(n, m))

More Related