Il problema dello zaino

Documenti analoghi
Corso di Perfezionamento

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Appunti lezione Capitolo 14 Greedy

Tecniche Algoritmiche/3 Programmazione Dinamica

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Il problema dello zaino

Algoritmi e Strutture Dati

ASD Laboratorio 08. Cristian Consonni/Alessio Guerrieri 02/12/2016. Cristian Consonni/Alessio Guerrieri ASD Laboratorio 08 02/12/ / 14

Programmazione dinamica

Universita degli Studi di Siena

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)

Algoritmi e Strutture Dati

Programmazione Matematica: VI Estensioni dell algoritmo del Simplesso

Programma. Algoritmi e Strutture Dati 2. Docenti. Programma (cont.) Materiale didattico. Modalità d esame

Note per la Lezione 6 Ugo Vaccaro

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Secondo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Cammini minimi fra tutte le coppie

11.4 Chiusura transitiva

METODI DELLA RICERCA OPERATIVA

VISITA IL SITO PER ALTRO MATERIALE E GUIDE

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Universita degli Studi di Siena

Parte III: Algoritmo di Branch-and-Bound

Complementi ed Esercizi di Informatica Teorica II

Note per la Lezione 7 Ugo Vaccaro

3.4 Metodo di Branch and Bound

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Problemi, istanze, soluzioni

3.6 Metodi basati sui piani di taglio

Esercizi sulla Programmazione Lineare Intera

Esempio : i numeri di Fibonacci

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Algoritmi di Ricerca

Programmazione Lineare Intera: Piani di Taglio

Excel: una piattaforma facile per l ottimizzazione. Excel ha un toolbox di ottimizzazione: Risolutore

UNIVERSITÀ DEGLI STUDI ROMA TRE Collegio Didattico in Ingegneria Informatica corso di Ricerca operativa 2. Esercizi sul problema dell assegnamento

Algoritmi e Strutture Dati

Il problema dello zaino: dalla gita in montagna ai trasporti internazionali. Luca Bertazzi

Ricerca Operativa. Ricerca Operativa p. 1/6

Algoritmi e Strutture Dati

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione

Grafi pesati Minimo albero ricoprente

Progettazione di algoritmi

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Teoria della Programmazione Lineare Intera

Programmazione a numeri interi: il metodo del Branch and Bound

Definizioni. Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente: soluzione ottima in un dominio contiguo. Il paradigma greedy

Una breve introduzione all implementazione in C di algoritmi su grafo

Progetto e analisi di algoritmi

Introduzione al Corso di Algoritmi

Ottimizza la somma. Supponete di avere in input un vettore di n interi positivi distinti V [1... n] e un valore W. Scrivere un algoritmo che:

Algoritmi e strutture di dati 2

Algoritmi e Strutture Dati

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Minimo albero di copertura

Progettazione di algoritmi

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Fondamenti di Informatica

Algoritmi e Strutture Dati

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Algoritmi greedy. Progettazione di Algoritmi a.a Matricole congrue a 1 Docente: Annalisa De Bonis

Branch-and-bound per KNAPSACK

Appendice A: un esempio di scelta del mix ottimo di produzione in presenza di vincoli 19

Elementi di informatica

LA PROGRAMMAZIONE MATEMATICA (p.m.)

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up

Parte V: Rilassamento Lagrangiano

Laboratorio di Ricerca Operativa Cad Ingegneria Gestionale (BGER3 - I semestre) a.a Homework n 28. Docente: Laura Palagi

TEORIA della DUALITÀ. Una piccola introduzione. Ricerca Operativa. Prof. R. Tadei. Politecnico di Torino. Teoria della Dualità / 1.

Esercizi di Algoritmi e Strutture Dati

RICERCA OPERATIVA GRUPPO A prova scritta del 22 marzo 2007

Tecniche Algoritmiche

Zeri di funzioni e teorema di Sturm

6.5 RNA Secondary Structure. 18 novembre 2014

Subset sums. Input n job 1,2,,n il job i richiede tempo w i > 0. Un limite W al tempo per il quale il processore puo` essere utilizzato

Algoritmi generali per PLI

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

PROGRAMMAZIONE DINAMICA

Tecniche Algoritmiche/1 Divide et Impera

Programmazione dinamica

La programmazione dinamica

Programmazione Lineare Intera (PLI)

Introduzione alla programmazione Esercizi risolti

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Programmazione Lineare Intera. Programmazione Lineare Intera p. 1/4

Esercizi di Algoritmi e Strutture Dati

5.5 Metodi dei piani di taglio

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Formalismi per la descrizione di algoritmi

Ottimizzazione dei Sistemi Complessi

Università degli Studi di Verona. Algoritmie Diagrammidiflusso. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Soluzione di problemi di Programmazione Lineare Intera

Esercitazione 10 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Transcript:

Il problema dello zaino Programmazione Dinamica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 25 gennaio 2010

Il problema dello zaino 0-1 Un ladro entra in un magazzino e trova n oggetti {a 1,..., a n } di peso w 1,..., w n e valore v 1,..., v n Il ladro vuole realizzare il furto di maggior valore compatibile con la capacità W del suo zaino Ciascun oggetto può essere preso per intero o lasciato; il ladro non può prendere frazioni di oggetti Formalmente: con vincoli max n x i v i i=1 n x i w i W i=1 x i {0, 1} per ogni i = 1,..., n

Il problema dello zaino frazionario Un ladro entra in un magazzino e trova n oggetti {a 1,..., a n } di peso w 1,..., w n e valore v 1,..., v n Il ladro vuole realizzare il furto di maggior valore compatibile con la capacità W del suo Il ladro può prendere frazioni di oggetti Formalmente: con vincoli max n x i v i i=1 n x i w i W i=1 0 x i 1 per ogni i = 1,..., n

Problema dello zaino 0-1

Prima soluzione: la forza bruta Consiste nell enumerate tutte le possibili combinazioni degli n oggetti, valutare l ammissibilità di ciascuna di esse (la somma dei pesi degli oggetti selezionati non deve eccedere la capacità complessiva dello zaino) e scegliere una combinazione ammissibile con valore maggiore Quante sono tutte le possibili combinazioni di n oggetti? Abbiamo due possibili scelte per ogni oggetto (0 o 1), il che significa 2 n combinazioni Un algoritmo di questo tipo ha un costo computazionale O(2 n ) non accettabile

Spazio dei sottoproblemi Denotiamo con S(i, w) il sottoproblema in cui il ladro può sceglire oggetti nell insieme {a 1, a i } (con 1 i n) per realizzare il furto di maggior valore compatibile con una capacità residua dello zaino pari a 1 w W Problema originale: S(n, W ) Casi banali: S(0, w) (insieme degli oggetti vuoto), e S(i, 0) (capacità residua pari a zero); in entrambi i casi non possiamo scegliere alcun oggetto

Sottoproblemi generati Sia S(i, w) un sottoproblema non banale (i, w > 0). Esaminiamo il peso w i dell i-esimo oggetto e consideriamo i seguenti possibili casi: w i > w: l oggetto a i non può essere selezionato - risolviamo il sottoproblema S(i 1, w) w i w: abbiamo due possibili alternative 1 scegliamo di prendere l oggetto a i e poi risolviamo S(i 1, w w i ), oppure 2 ignoriamo l oggetto a i e risolviamo S(i 1, w) Tra le due, scegliamo quella con valore maggiore In ogni caso, una soluzione ottima per S(i, w) deve contenere una soluzione per uno dei sottoproblemi S(i 1, w) e S(i 1, w w i )

Il problema dello zaino Sia A(i, w) una soluzione ottima per S(i, w) (con i, j > 0) Consideriamo il caso in cui A(i, w) = {a i } A(i 1, w w i ), con A(i 1, w w i ) è una soluzione per S(i 1, w w i )

Il problema dello zaino Sia A(i, w) una soluzione ottima per S(i, w) (con i, j > 0) Consideriamo il caso in cui A(i, w) = {a i } A(i 1, w w i ), con A(i 1, w w i ) è una soluzione per S(i 1, w w i ) Assumiamo ora, per assurdo, che A(i 1, w w i ) non sia ottima Deve esistere una soluzione alternativa A (i 1, w w i ) per lo stesso sottoproblema il cui valore (somma dei valori degli oggetti selezionati) è maggiore di quello di A(i 1, w w i )

Il problema dello zaino Sia A(i, w) una soluzione ottima per S(i, w) (con i, j > 0) Consideriamo il caso in cui A(i, w) = {a i } A(i 1, w w i ), con A(i 1, w w i ) è una soluzione per S(i 1, w w i ) Assumiamo ora, per assurdo, che A(i 1, w w i ) non sia ottima Deve esistere una soluzione alternativa A (i 1, w w i ) per lo stesso sottoproblema il cui valore (somma dei valori degli oggetti selezionati) è maggiore di quello di A(i 1, w w i ) Sia A (i, w) = {a i } A (i 1, w w i ). Allora: v(a (i, w)) = v i + v(a (i 1, w w i )) > v i + v(a(i 1, w w i )) = v(a(i, w))

Il problema dello zaino Sia A(i, w) una soluzione ottima per S(i, w) (con i, j > 0) Consideriamo ora il caso in cui a i / A(i, w) e (quindi) A(i, w) contiene al suo interno una soluzione A(i 1, w) per S(i 1, w) Assumiamo (per assurdo) che A(i 1, w) non sia ottima Deve esistere una soluzione alternativa A (i 1, w) per S(i 1, w) il cui valore (somma dei valori degli oggetti selezionati) è maggiore di quello di A(i 1, w) Allora: v(a (i, w)) = v(a (i 1, w)) > v(a(i 1, w)) = v(a(i, w))

Numero di sottoproblemi Abbiamo Wn sottoproblemi della forma S(i, w) con 1 i n e 1 w W Problema originale: S(n, W ) Casi banali: W sottoproblemi della forma S(0, w), e n sottoproblemi della forma S(i, 0). In totale Wn + W + n = O(Wn) sottoproblemi

Calcolo del valore della soluzione ottima Sia v(i, w) il valore della soluzione ottima per il sottoproblema S(i, w), dove i = 0,, n e w = 0,, W (Casi banali) i = 0 oppure w = 0: v(i, 0) = v(0, w) = 0 per ogni i = 0,, n e w = 0,, W (Casi non banali) i, w > 0. In questo caso: v(i, w) = { v(i 1, w) max{v(i 1, w), v(i 1, w w i )} se w i > w se w i w

Identificazione di uno schema Bottom-Up Possiamo usare una matrice V di dimensione n + 1 W + 1 per memorizzare risultati parziali i\w 0 1 2 3 4 5 0 0 0 0 0 0 0 1 0 2 0 3 0 4 0 Casi Base: V [i, 0] = V [0, j] = 0 per ogni i = 0,..., n e w = 0,..., W

Identificazione di uno schema Bottom-Up i\w 0 1 2 3 4 5 0 0 0 0 0 0 0 1 0 2 0 3 0 4 0 V [i, w] dipende dai valore V [i 1, w]e V [i 1, w w i ]

Identificazione di uno schema Bottom-Up i\w 0 1 2 3 4 5 0 0 0 0 0 0 0 1 0 2 0 3 0 4 0 V [i, w] dipende dai valore V [i 1, w]e V [i 1, w w i ] Ci basta riempire la matrice riga per riga

Algoritmo Il problema dello zaino Knapsack01(w, v, W ) 1 n length[v] 2 for w 0 to W 3 do V [0, w] 0 4 for i 0 to n 5 do V [i, 0] 0 6 for i 1 to n 7 do for w 1 to W 8 do if w > w[i] 9 then V [i, w] V [i 1, w] 10 A[i] 0 11 else if V [i 1, w] > V [i 1, w w[i] 12 then V [i, w] V [i 1, w] 13 A[i] 0 14 else V [i, w] V [i 1, w w[i]] 15 A[i] 1 16 return V, A