Appunti di Ricerca Operativa 2012/2013
Prefazione La Ricerca Operativa è un campo in continua evoluzione, il cui impatto sulle realtà aziendali ed organizzative è in costante crescita. L insegnamento di questa disciplina, ed in particolare delle sue basi metodologiche ed algoritmiche, è quindi indispensabile nei corsi che mirano a formare molte figure con elevate capacità tecnologiche e manageriali, ad esempio ma non solamente nei corsi di Laurea in Informatica, Ingegneria e materie affini. Queste dispense sono state sviluppate dal Gruppo di Ricerca Operativa del Dipartimento di Informatica dell Università di Pisa per il supporto a diversi della stessa Università, quali i Corsi di Laurea in Informatica e in Informatica Applicata e i Corsi di Laurea Specialistica in Informatica e in Tecnologie Informatiche. Inoltre, le dispense sono adottate anche in Corsi di Laurea di altre Università italiane. Queste dispense sono il frutto di un lavoro collettivo, svolto nel corso di molti anni da diverse persone, in forme e ruoli diversi. In particolare, hanno collaborato alla stesura di questo documento Giorgio Gallo, Stefano Pallottino, Maria Grazia Scutellà, AntonioFrangionieGiancarloBigi. Un aiuto particolare alla stesura e al miglioramento delle dispense è stato dato da Paola Cappanera e Maria Paola Scaparra. Molte altre persone, tra cui molti studenti dei corsi di Ricerca Operativa all interno dei corsi di Laurea e di Laurea Specialistica della Classe di Informatica dell Università di Pisa, hanno contributo a queste dispense segnalando errori esuggerendomiglioramenti. Atuttiloro va il ringraziamento degli estensori. Ogni errore ed imprecisione rimasta nel testo è esclusivamente responsabilità degli autori; segnalazioni a tal proposito sonocaldamentebenvenute. L utilizzo di questo materiale in corsi di studio diversi da quelli tenuti dagli estensori del documento è permesso ed incoraggiato, a condizione che sia opportunamente citata la fonte, che non venga tratto profitto dal fornire il materiale agli studenti, e che tale utilizzo venga segnalato agli autori. La modalità di distribuzione consigliata è quella di fare riferimento alla pagina Web dei Corsi di Ricerca Operativa presso il Dipartimento di Informatica http://www.di.unipi.it/optimize/courses/ in cui si trovano le versioni più aggiornate del testo, insieme ad altro materiale che può risultare utile per gli studenti.
Indice 1 Problemi e Modelli 1 1.1 Modelli e Problemi................................... 2 1.2 Tecniche di Modellazione.................................. 6 1.2.1 Programmazione Lineare.............................. 7 1.2.2 Variabili logiche................................... 11 1.2.3 Relazioni binarie................................... 15 1.2.4 Vincoli di assegnamento e semiassegnamento................... 16 1.2.5 Selezione di sottoinsiemi............................... 20 1.2.6 Variabili a valori discreti............................... 22 1.2.7 Minima quantità positiva prefissata......................... 25 1.2.8 Funzione con carico fisso............................ 25 1.2.9 Vincoli di soglia................................... 26 1.2.10 Come rappresentare il valore assoluto....................... 28 1.2.11 Funzioni lineari a tratti............................... 29 1.2.12 Vincoli disgiuntivi.................................. 31 1.2.13 Un esempio di formulazione e alcuni esercizi.......... 33 2 Programmazione Lineare 39 2.1 Problemi di Programmazione Lineare............................ 39 2.1.1 Geometria della Programmazione Lineare.............. 43 2.2 Teoria Matematica della Dualità.............................. 50 2.2.1 Coppie di problemi duali.............................. 51 2.2.2 Il teorema debole della dualità........................... 54 2.2.3 Il teorema forte della dualità e sue conseguenze.................. 55 2.2.4 Il teorema degli scarti complementari................ 58 2.2.5 Soluzioni complementari e basi........................... 62 2.3 Algoritmi del Simplesso................................... 66 2.3.1 L algoritmo del Simplesso Primale......................... 66 2.3.2 L algoritmo del Simplesso Duale.......................... 78 2.3.3 Analisi post-ottimale................................. 84 3 Grafi e reti di flusso 89 3.1 Flussi su reti......................................... 89 3.1.1 Alcuni modelli di flusso............................... 91 3.1.2 Trasformazioni equivalenti.............................. 93 3.2 Cammini di costo minimo............................... 95 3.2.1 Il problema...................................... 96 3.2.2 Alberi, etichette e condizioni di ottimo....................... 97 3.2.3 L algoritmo SPT................................... 99 3.2.4 Algoritmi a coda di priorità............................. 102 3.2.5 Algoritmi a selezione su lista............................ 104 3.2.6 Cammini minimi su grafi aciclici.......................... 107 iii
iv INDICE 3.2.7 Cammini minimi con radici multiple........................ 108 3.3 Il problema di flusso massimo................................ 108 3.3.1 Tagli, cammini aumentanti e condizioni di ottimo....... 109 3.3.2 Algoritmo per cammini aumentanti......................... 112 3.3.3 Algoritmo basato su preflussi............................ 114 3.3.4 Flusso massimo con più sorgenti/pozzi....................... 118 3.4 Il problema di flusso di costo minimo..................... 119 3.4.1 Cammini, cicli aumentanti e condizioni di ottimo....... 119 3.4.2 Algoritmo basato su cammini minimi successivi.................. 122 3.4.3 Algoritmo basato su cancellazione di cicli..................... 124 3.4.4 Basi di cicli...................................... 126 3.5 Problemi di accoppiamento................................. 127 3.5.1 Accoppiamento di massima cardinalità....................... 128 3.5.2 Assegnamento di costo minimo........................ 130 3.5.3 Accoppiamento di massima cardinalità bottleneck................ 133 4 Ottimizzazione Combinatoria 137 4.1 Introduzione....................................... 137 4.2 Programmazione Lineare Intera (Mista).......................... 138 4.2.1 Il rilassamento continuo............................... 139 4.2.2 Formulazioni di PL equivalenti per la PLI.............. 141 4.2.3 Diseguaglianze valide................................. 142 4.3 Dimostrazioni di ottimalità................................. 143 5 Algoritmi euristici 145 5.1 Algoritmi greedy.................................... 145 5.1.1 Esempi di algoritmi greedy.......................... 146 5.1.2 Algoritmi greedy con garanzia sulle prestazioni.................. 153 5.1.3 Matroidi........................................ 161 5.2 Algoritmi di ricerca locale........................... 165 5.2.1 Esempi di algoritmi di ricerca locale................. 167 5.2.2 Intorni di grande dimensione............................ 173 5.2.3 Metaeuristiche.................................... 175 6 Tecniche di rilassamento 187 6.1 Rilassamento continuo.................................... 188 6.1.1 Efficacia del rilassamento continuo......................... 189 6.1.2 Informazione generata dal rilassamento continuo................. 191 6.2 Eliminazione di vincoli.................................... 194 6.2.1 Esempi di rilassamenti per eliminazione di vincoli................. 195 6.3 Rilassamento Lagrangiano.................................. 199 6.3.1 Teoria del rilassamento Lagrangiano................. 201 6.3.2 Algoritmi per il rilassamento Lagrangiano..................... 206 6.3.3 Informazione generata dal rilassamento Lagrangiano............... 211 6.4 Rilassamento surrogato................................... 213 7 Algoritmi enumerativi 215 7.1 Algoritmi di enumerazione implicita............................ 215 7.1.1 Uno schema generale................................. 216 7.1.2 Implementare un algoritmo enumerativo............... 222 7.1.3 Esempi di algoritmi enumerativi.......................... 230 7.2 Tecniche poliedrali...................................... 237
INDICE v A Algoritmi e complessità 239 A.1 Modelli computazionali................................... 239 A.2 Misure di complessità.................................... 239 A.3 Problemi trattabili e problemi intrattabili......................... 240 A.3.1 Le classi P e NP................................... 240 A.3.2 Problemi NP-completi e problemi NP-ardui................... 241 A.3.3 Complessità ed approssimazione.......................... 242 B Grafi e Reti 243 B.1 I grafi: notazione e nomenclatura....................... 243 B.1.1 Grafi, nodi, archi................................... 243 B.1.2 Cammini, cicli.................................... 244 B.1.3 Tagli e connettività.............................. 245 B.1.4 Alberi......................................... 246 B.2 Rappresentazione di grafi ed alberi............................. 248 B.2.1 Matrici di incidenza e liste di adiacenza...................... 248 B.2.2 Rappresentazione di alberi: la funzione predecessore............... 250 B.2.3 Visite di un albero.................................. 250 B.2.4 Livello dei nodi di un albero............................. 250 B.3 Visita di un grafo.................................... 251 B.3.1 Implementazioni della procedura di visita..................... 251 B.3.2 Usi della procedura di visita............................. 253