Advertisement
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

Presentation posted in : General

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 sites. SlideServe reserves the right to change this policy at anytime.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.











- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -




Presentation Transcript


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

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


Exemplu retea triunghiulara de numere modelare

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


Exemplu retea triunghiulara de puncte implementare

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]]


Alocarea resurselor

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


Alocarea resurselor1

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


Alocarea resurselor2

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)


Alocarea resurselor3

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


Drumuri minime intr un digraf

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


Drumuri minime intr un digraf continuare

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


Drumuri minime intr un digraf algoritm floyd warshall

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


Problema rucsacului varianta discreta formulare

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


Problema rucsacului varianta discreta solutie

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


Problema rucsacului varianta discreta solutie cont

Problema rucsacului (varianta discreta): solutie (cont)

  • decizie: RUCSAC(j, X)  RUCSAC(j-1, ?)

  • relatia de recurenta:


Problema rucsacului varianta discreta exemplu

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


Problema rucsacului varianta discreta functiile f i

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))


Problema rucsacului varianta discreta algoritm

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


Problema rucsacului varianta discreta complexitate

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


Algoritmi pseudo polinomiali

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


Algoritmi pseudo polinomiali1

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))