Dynamic Programming Testi di riferimento per approfondimenti: Dimitri Bertsekas, Dynamic Programming, deterministic and stochastic models, Prentice-Hall 1987 In rete, Art Lew, Holger Mauch, Dynamic Programming: a computational tool Part I (Chapters 1 and 2)
Per risolvere un problema attraverso la Programmazione Dinamica (DP) occorre che la sua soluzione sia esprimibile come il raggiungimento di uno stato dello stadio finale del problema, si possa definire una funzione di transizione pesata (con un costo associato a ciascuna transizione) da uno stato s di uno stadio i a uno stato s’ dello stadio i+1, il cui costo dipende esclusivamente dalle coppie (i,s), (i+1, s’). Il concetto di stadio (stage) e’ associato a un sottoproblema del problema di partenza. Lo stadio finale e’ costituito da sottoproblemi “elementari” che hanno un’unica soluzione ammissibile (o nessuna) e pertanto e’ immediato risolverli all’ottimo. Lo stadio iniziale corrisponde al problema originale. Associando a ogni coppia (i,s) un nodo e ad ogni transizione (i,s) (i+1, s’) un arco pesato, si definisce il grafo degli stati, su cui risolvere il problema diventa determinare il cammino ottimo dal nodo iniziale al nodo finale. Attenzione, il grafo degli stati e’ ben diverso dall’albero delle decisioni del Branch and Bound, anche se ogni transizione corrisponde a prendere una decisione parziale.
Questa struttura incarna “fisicamente” il principio di ottimalita’ di Bellman, secondo cui “una politica ottima e’ fatta di un certo numero di subpolitiche ottime”. Se cosi’ non fosse, sostituendo a una subpolitica non ottima una ottima, si migliorerebbe la politica finale, contraddicendo il fatto che la precedente fosse ottima. Un semplice esempio e’ fornito dal problema del cammino di costo minimo da un nodo s a un nodo t: sia i un nodo parte del cammino ottimo p*, allora il sottocammino di p* compreso da s a i (indicato come p*(s,i)) e’ anche il cammino ottimo da s a i. Infatti, se cosi’ non fosse, ma fosse invece p’(s,i) il cammino ottimo da s a i, allora p* non sarebbe ottimo poiche’ il nuovo cammino composto dai sottocammini p’(s,i) e p*(i,t) sarebbe migliore di p*. In forma ricorsiva, questo equivale a definire le “dynamic programming functional equations” che definiscono il passaggio da uno stadio al successivo per ricorsione. Per il problema del cammino minimo da s a t, d*(t) = Min {d*(i)+c it tale che i Pred(t)} Testo di riferimento per approfondimenti: Dimitri Bertsekas, Dynamic Programming, deterministic and stochastic models, Prentice-Hall 1987
Il prolema di zaino binario come problema di programmazione dinamica Uno stato e’ un livello di riempimento della zaino. Uno stadio e’ avere preso decisioni (si/no) fino all’oggetto k- esimo compreso. Si osservi che lo stesso livello di riempimento puo’ essere raggiunto attraverso scelte si/no diverse su un insieme di oggetti tali che la somma dei pesi di quelli selezionati nei due casi coincide. Esempio, siano i pesi di 7 oggetti pari a {4, 7, 2, 9, 5, 8, 5} Hanno pari peso (20) i sottoinsiemi di oggetti di peso {4, 7, 9} e {2, 5, 8, 5} Per questo il grafo degli stati non coincide con l’albero delle decisioni del B&B, anche se la transizione da uno stadio a quello successivo si attua scegliendo o meno un oggetto (branching)
Esempio: Pesi:{2, 4, 5, 5, 7, 8, 9} Valore:{3, 7, 13, 13, 18, 20, 27} Capacita’ = 20 Il problema ha 8 stadi (da nessun oggetto a tutti e 7) e 21 (da 0 a 20) stati. Il nodo iniziale e’ lo stadio 0 che ha come unico stato 0 Le transizioni possibili portano un nodo (k,s) dello stadio k a due nodi dello stadio k+1, di cui uno e’ allo stesso stato (k+1, s) e rappresenta il caso in cui l’oggetto k+1 non e’ scelto per cui il peso corrente resta uguale, e l’altro e’ allo stato s+w k+1 pari al peso precedente sommato al peso delll’oggetto k+1 esimo. Il valore della transizione nel primo caso e’ nullo e nel secondo e’ pari a v k+1 ovverossia al valore dell’oggetto k+1. 0, 0 k, s k+1, s+w k+1 k+1, s 0 v k+1 n+1, cap Il nodo finale e’ un nodo fittizzio a cui sono collegati da transizioni di peso nullo tutti i nodi dello stadio k=n+1 Tale nodo serve come destinazione di ogni cammino dal nodo (0,0) associato una generica soluzione.
Pesi:{2, 4, 5, 5, 7, 8, 9}Valore:{3, 7, 13, 13, 18, 20, 27}Capacita’ = 20 0, 0 0 8, 20+ Stadi (oggetti su cui si e’ deciso) Stati (peso corrente) da 0 a 20 1, 0 1, 2 3 2, 03, 04, 05, 06, 07, , , 6 3, 5 7 3, 2 3, 6 3, , , 4 3, 7 3, 94, 95, 9 4, 2 13 ….. 7, 2 ….. 7, 9 ….. 6,11 7,20 27 Si osservi come due distinti camini (selezione degli oggetti 1 e 3 e dell’oggetto 5) portano allo stesso nodo (5,7)… 5, 7 ….. 4, 7 Il problema diventa determinare il cammino massimo sul grafo degli stati (aciclico) Complessita’Pseudopolinomiale
Esercizi: formulare come problemi di programmazione dinamica i seguenti problemi TSP su grafo diretto G=(N,A): usare la formula ricorsiva f(S,k)= Min { f(S\{k},m)+ c m,k } dove f(S,k) e’ il costo del cammino hamiltoniano che dal nodo 1 raggiunge il nodo k visitando esattamente una volta tutti i nodi di S N, e m e’ un nodo di S\{k}. Il nodo iniziale del grafo degli stati e’ f({1},1) e il nodo finale che rappresenta un generico tour e’ f(N, k). Optimal Covering: Date K reti su cui si ipotizza un traffico pari a t k con t k < t k+1 occorre scegliere per ciascuna di esse la tecnologia di implementazione, dato che la tecnologia k-esima gestisce al + traffico pari a t k. Sia c k il costo della tecnologia k-esima (con c k < c k+1 ) e si possono selezionare al piu’ n<K diverse tecnologie. Esempio, siano 10 livelli di traffico associati a 10 tecnologie di costo (1,4,5,7,8,12,13,18,19,21), la soluzione ottima consiste nell’implementare le prime 5 con la V tecnologia (costo 5x8), la 6 e la 7 con la VII (costo 2x13) e infine le restanti tre con la X (costo 3x21) con costo totale pari a 129. La formula ricorsiva e’ f(h) = Min { (h-k)c h + f(k), per k 1..h-1} dove h e’ l’indice del livello maggiore di traffico della rete ancora da realizzare. Infatti con la tecnologia h-esima realizzo la rete k e le precedenti fino a k+1 incluso, mentre per le successive usero’ almeno una volta la tecnologia k (infatti f(k) e’ il costo della soluzione ottima del sottoproblema con k reti).