La Programmazione Dinamica (PD) è un’altra tecnica esatta tipica per la risoluzione dei problemi di ottimizzazione caratterizzati da variabili di decisione intere.
Essa si basa sul principio per il quale sia possibile definire la soluzione ottima del problema di programmazione lineare intero originario (Pli) in termini di combinazione di soluzioni ottime dei sottoproblemi di (Pli), identici a (Pli), ma di dimensione più piccola.
Infatti, un algoritmo di PD tipicamente divide (senza partizionare) un problema in sottoproblemi (non indipendenti fra loro), risolve i sottoproblemi ricorsivamente e poi combina le loro soluzioni ottime per ottenere una soluzione ottima del problema originario.
Si ricorda che due sottoproblemi e non sono indipendenti quando possono essere a loro volta suddivisi nei seguenti sottoproblemi
e risulta
cioè e condividono almeno un sottoproblema.
Nella progettazione e messa a punto di un algoritmo di PD per risolvere un problema di ottimizzazione discreta (Pli) è necessario seguire i seguenti tre passi fondamentali.
Passo 1. Verificare che (Pli) esibisca una sottostruttura ottima.
Passo 2. Definire il valore che la funzione obiettivo assume in corrispondenza di una soluzione ottima di (Pli) ricorsivamente come combinazione di soluzioni ottime dei suoi sottoproblemi.
In questa fase, è fondamentale esplicitare il valore che la funzione obiettivo assume in corrispondenza di una soluzione ottima dei sottoproblemi cosiddetti elementari, in quanto non ulteriormente divisibili in sottoproblemi.
L’equazione ricorsiva risultante da questa fase è nota come equazione di ricorrenza, mentre esplicitare il valore che la funzione obiettivo assume in corrispondenza di una soluzione ottima dei sottoproblemi elementari corrisponde a stabilire le condizioni iniziali.
Passo 3. Progettare un algoritmo basato sulla ricorrenza individuata al Passo 2.
In quanto segue verrà descritto un algoritmo di PD per il Problema dello Zaino 0/1.
Verificare che il Problema dello Zaino 0/1 gode della proprietà di sottostruttura ottima è molto semplice ed è lasciato per esercizio, per cui si procederà direttamente alla descrizione dei Passo 2.
Siano tali che
e sia il sottoproblema del Problema dello Zaino 0/1 caratterizzato da oggetti e capacità dello zaino pari a .
Il valore che la funzione obiettivo assume in corrispondenza di una soluzione ottima per è dato da
Dunque, esprime il massimo profitto ricavabile caricando alcuni degli oggetti in uno zaino di capacità .
E’ banale osservare che
In generale, per m=2, …, n, si ha che
dove
Il valore che la funzione obiettivo assume in corrispondenza di una soluzione ottima al problema sarà contenuto in .
Il Problema dello Zaino 0/1 è un problema “difficile” dal punto di vista computazionale (NP-completo).
Infatti, un semplice algoritmo che realizza la ricorrenza e le condizioni iniziali appena formalizzate ha complessità computazionale pari a .
Si noti che per valori di molto elevati, l’algoritmo B&B risulta più efficiente.
1. Presentazione del Corso ed Introduzione alla Programmazione Mat...
2. Introduzione ai Problemi di PL
6. Algoritmo del Simplesso Revisionato
7. Algoritmo del Simplesso Tabellare
10. Soluzione di Problemi di PL tramite Algoritmo del Simplesso
11. Problemi di Programmazione Lineare Intera
12. PLI con matrice dei vincoli unimodulare
13. Problemi di PLI: Branch & Bound
14. Il Problema dello Zaino 0/1 e il Problema dello Zaino Frazionar...
15. Il Problema dello Zaino 0/1: un algoritmo B&B
16. Il Problema dello Zaino 0/1: un algoritmo di Programmazione Din...
17. Richiami di Teoria dei Grafi: definizioni e notazioni
18. Il Problema del Vertex Cover Minimo di un Grafo
19. Il Problema dell'Albero di Copertura Minimo (MST)
20. Il Problema dell'Albero di Copertura Minimo (MST): esempio
D. Bertsimas e J.N. Tsitsiklis, Introduction to Linear Optimization, Belmont - Massachusetts (USA), Dynamic Ideas and Athena Scientific, 2008.
M. Fischetti, Lezioni di Ricerca Operativa, Padova, Edizioni Libreria Progetto Padova, 1999.
S. Martello, Fondamenti di Ricerca Operativa L-A, Bologna, Società Editrice Esculapio, 2004.
S. Martello, Ricerca Operativa LS, Bologna, Società Editrice Esculapio, 2004.
Dispense del Corso di Ricerca Operativa presso l'Università degli Studi di Pisa.
Dispense ed Appunti del Corso prodotte da Paola Festa.