Ottimizzazione Combinatoria

Похожие документы
Progetto e ottimizzazione di reti 2

Progetto e ottimizzazione di reti 2

Ottimizzazione Combinatoria

Miscelazione di benzine

Flusso a Costo Minimo

Uso avanzato di AMPL. Renato Bruni. prendendo come esempio il problema di Localizzazione di Impianti.

Ottimizzazione Combinatoria

Ottimizzazione Combinatoria 2 Presentazione

Introduzione. AMPL Introduzione. F. Rinaldi. Dipartimento di Matematica Università di Padova. Corso di Laurea Matematica. F. Rinaldi AMPL Introduzione

Ottimizzazione su grafi: massimo flusso (parte 1) Ottimizzazione su grafi:massimo flusso (parte 1) p. 1/33

Pianificazione Multiperiodo

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

AMPL Problemi su Reti

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

Ottimizzazione nella Gestione dei Progetti - Esercitazione 1: calcolo degli schedule ottimi

AMPL Sintassi ed Esempi

Introduzione a Matlab

Claudio Arbib Università di L Aquila. Ricerca Operativa. Reti di flusso

AMPL Sintassi ed Esempi

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Problema del Trasporto

Appunti delle Esercitazioni di Ottimizzazione V.O. AMPL: A Mathematical Programming Language

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Risoluzione del rilassamento continuo del problema del commesso viaggiatore

Gestione Impresa. Mese Unità richieste

Pianificazione di Produzione in DEC

Linguaggi di modellizzazione

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Gestione della produzione e della supply chain Logistica distributiva

126 APPROFONDIMENTI SUI PARAMETRI. SCRIPT IN AMPL

Risoluzione del rilassamento continuo del problema del commesso viaggiatore

Esercitazioni di Algebra e Geometria

Appunti delle Esercitazione di Ricerca Operativa AMPL Plus v1.6

Problema del Set Covering (PLI)

Modelli di programmazione lineare. Il metodo grafico è basato su linearità della funzione obiettivo linearità dei vincoli

Esercitazioni di Algebra e Geometria

Introduzione alla Teoria dei Grafi

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

Problemi di Localizzazione Impianti

Appunti delle Esercitazioni di Ottimizzazione V.O. AMPL: A Mathematical Programming Language

Lezioni di Ricerca Operativa

Introduzione ai grafi

Esercizio 1. Esercizio 2

Matrici unimodulari e totalmente unimodulari

Транскрипт:

Ottimizzazione Combinatoria Esercitazione AMPL A.A. 2-22 Esercitazione a cura di Silvia Canale contatto e-mail: canale@dis.uniroma.it Università i di Roma La Sapienza Dipartimento di Informatica e Sistemistica Corso di Laurea in Ingegneria Gestionale

Pagina del corso http://www.dis.uniroma.it/~or/gestionale/oc/ Oltre al materiale delle esercitazioni, sulla pagina del corso sono disponibili informazioni relative a: - appelli d esame (date, orari, prenotazioni); - programma del corso; - orari e avvisi per il ricevimento studenti; - testi di tesine dei precedenti; - attività di laboratorio - 2

Riassumendo AMPL è un linguaggio di modellazione algebrico che ci permette di modellare problemi di programmazione matematica di diversa natura. Abbiamo visto come dichiarare (file.mod) e definire (file.dat) le entità: - Insiemi (parola chiave set); - Parametri semplici i o a più dimensioni i i (parola chiave param); - Variabili (parola chiave var); - Funzione obiettivo (parola chiave minimize o maximize); - Vincoli (parola chiave subject to). Abbiamo visto come far interpretare i file.mod e.dat all interprete AMPL. Abbiamo visto come far risolvere il problema modellato all interprete AMPL invocando un opportuno solutore di programmazione matematica (CPLEX). Oggi vedremo altre funzionalità del linguaggio AMPL. 3

Parametri a più dimensioni in AMPL E possibile definire un vettore di parametri indicizzato su un insieme ordinato in base ad un ordinamento predefinito. Esempio: Per definire i il vettore di parametri vett2 di componenti indicizzate su un insieme ordinato di N elementi dichiariamo nel file prova4.mod: param N; param vett2{..n}; Successivamente definiamo nel file prova4.dat i valori dei parametri: param N := 3; param vett2 := 3 2 2 3 ; Ovunque si desideri specificare una precisa componente del vettore di parametri, occorre usare le parentesi [] dopo l identificativo del vettore. Esempio: Per stampare la seconda componente del vettore di parametri vett2 usiamo l istruzione display seguita dall espressione vett2[2] display vett2[2]; 4

Parametri a più dimensioni in AMPL E possibile definire un vettore di parametri a più di una dimensione. Le matrici di parametri sono vettori di parametri a due dimensioni e Sono molto utili per definire matrici di coefficienti. Esempio: Per definire la matrice di parametri Mat di componenti indicizzate i su un insieme i ordinato di M elementi per le righe e di N elementi per le colonne dichiariamo nel file prova5.mod: param M; param N; param Mat{..M,..N}; Successivamente definiamo i nel file prova5.dat i valori dei parametri: param M := 3; param N := 2; param Mat := 2 2 2 3 2 2 4 3 5 3 2 6; 5

Parametri a più dimensioni in AMPL Per stampare tutti gli elementi della matrice è possibile usare l istruzione display seguita dall identificativo. Se invece vogliamo stampare solo una componente della matrice allora dobbiamo usare l operatore []. Esempio: Per stampare l intera matrice di parametri Mat dichiarata nel file prova5.mod e definita nel file prova5.dat scriviamo: display Mat; Una volta eseguita l istruzione, l interprete mostrerà il seguente output: ampl: display Mat; Mat := 2 2 2 3 2 2 4 3 5 3 2 6 ; 6

Espressioni di indicizzazione Le parentesi {} ci permettono di indicare un insieme, ordinato o meno. Esse servono a definire espressioni di indicizzazione che possono essere più o meno complesse. Se A e B sono insiemi e p è un vettore di parametri, allora - {A} o {i in A} indicano tutti gli elementi dell insieme A - {A,B} o {i in A, j in B} indica tutte le coppie tali che il primo elemento appartiene all insieme A ed il secondo all insieme B - {i in A, i in B} indica tutte le coppie tali che il primo elemento appartiene all insieme A ed il secondo all insieme B purché uguali - {i in A: p[i] > } indica tutti gli elementi dell insieme A tali che il corrispondente valore del vettore p sia positivo 7

Grafo Esercitazione AMPL A.A. 2-22 8

Problema Problema Il grafo Il grafo Sia dato il grafo orientato G(N,A) in figura N = {A, B, C, D, E} A = {AB AC BC BE CD DB DE} A = {AB, AC, BC, BE, CD, DB, DE} B A E C D C D Matrice di incidenza M di G(N,A) matrice 5 x 7 a valori {,, -} M = 9

Problema del massimo flusso (MF) Esercitazione AMPL A.A. 2-22

Definizione del problema Sia dato un grafo orientato G(N,A). Sia dato un nodo sorgente s N ed un nodo pozzo t N {s}. Sia dato un vettore c di capacità definito sull insieme A degli archi del grafo G(N,A). 4 6 3 2 2 s 2 4 t 3 4 8 3 4

Definizione di flusso Si definisce flusso s-t di (G, c) un vettore x R A tale che (x uv,c uv ) x c uv A u v uv uv (2,8). ciascuna componente di x rispetti il vincolo di capacità x + uv δ G uv ( v) vu δ G x uv ( v) = v { s, t } (3,3) (2,3) v (,5) (,) 2. il vettore x rispetti il vincolo di conservazione del flusso ad ogni nodo tu δ + G x tu (t) = x us δ G us (s) = (,3) (2,5) s (,3) t (,5) (,) 3. nulla entri nel nodo s ed esca dal nodo t (,2) 2

Definizione di flusso Si definisce valore di un flusso s-t di (G, c) per il valore f(x) del flusso entrante nel nodo pozzo t oppure del flusso uscente dal nodo sorgente s f ( x) = x = ut x su + ut δ t) su δ (s) G ( G Un flusso s-t x di (G, c) per il grafo mostrato prima è (2,4) (,6) s (2,3) (,2) (,4) (,8) 2 (2,2) (,4) 3 4 t (,3) Il valore del flusso è f(x) = 3 3

Il problema di massimo flusso Determinare il flusso s-t x di (G, c) che massimizzi il valore f(x) max f x ut ut δ G ( t ) + su δ G x su ( s) = f = f xuv + uv δ G ( v) x uv vu δ c G uv x uv ( v) M matrice di incidenza del grafo (G, c) b: b s = -; b t = ; b v = v N {s,t} = v { s, t} uv A max f Mx = bf x uv c uv uv A 4

Il problema di massimo flusso Siano s = A e t = E due nodi speciali del grafo G(N,A). Sia dato il vettore c di capacità definito sull insieme A degli archi del grafo G(N,A) c = { 6, 4, 2, 7, 8, 4, 5 } A = {AB, AC, BC, BE, CD, DB, DE} B 6 7 s 2 4 t 4 C 8 D 5 Vogliamo risolvere il problema di massimo flusso (MF) da s a t sul grafo orientato G(N,A) rispetto al vettore c di capacità. 5

à Problema Problema Massimo flusso Massimo flusso Aggiungiamo l arco ts (e quindi una colonna alla matrice M) di capacità infinita. c = { 6, 4, 2, 7, 8, 4, 5, } A ={AB, AC, BC, BE, CD, DB, DE, EA} M= B 6 4 2 7 A E 4 8 5 4 2 C D 4 8 5 6

Problema Massimo flusso max w T x = x EA (MF) M x = d A x c Modelliamo il poblematamite problema tramite AMPL Vogliamo determinare un flusso x di (G, c) di valore massimo B (x AB,6) (x BE, 7) A (x BC, 2) (x DB, 4) E (x AC, 4) ) (x DE, 5) (x CD, 8) C D (x EA, ) 7

Modellazione con AMPL (MF) max w T x M x = d A x c Modelliamo il problema tramite AMPL creando due file: - file.mod contenente: - la dichiarazione dei parametri: insiemi N, A; vettori w, d, c e M; - la dichiarazione delle variabili: vettore x; - la struttura e la definizione della funzione obiettivo: w T x; - la struttura e la descrizione dei vincoli: M x = d, A x c. - file.dat contenente i valori numerici dei parametri - N = { A, B, C, D, E} - A = {AB, AC, BC, BE, CD, DB, DE,EA} EA} - w = {,,,,,,, } M= - d = {,,,, } - c = {6, 4, 2, 7, 8, 4, 5, } 8

File modello File modello MF.mod Definiamo il problema di massimizzazione maximize Costo_Totale: sum {j in ARCHI} costo[j] * x[j]; Scriviamo esplicitamente i vincoli di capacità subject to Capacita {j in ARCHI}: x[j] <= capacita[j]; senza inserirli nella dichiarazione delle variabili x var x {j in ARCHI} >= ; 9

File dati MF.dat File dati - definizione dei parametri set ARCHI := AB AC BC BE CD DB DE EA; param domanda := A B C D E ; param: capacita costo := AB 6 AC 4 BC 2 BE 7 CD 8 DB 4 DE 5 EA Infinity ; 2

File dati MF.dat File dati - definizione dei parametri: definiamo i vettori a due dimensioni (M): param M : AB AC BC BE CD DB DE EA := A - - B - - C - D - - E -; 2

Interprete AMPL ampl: reset; // cancelliamo i modelli e/o i dati precedentemente caricati // (obbligatorio se abbiamo già caricato un problema) ampl: model MF.mod; // carichiamo prima il modello del problema ampl: data MF.dat; // carichiamo successivamente i dati del problema 22

Soluzione del problema ampl: option solver cplex; // scegliamo il solutore di Programmazione Matematica con cui // risolvere il problema: CPLEX (attualmente vers..2.) ampl: solve; // risolviamo il problema caricato valore ottimo // output ottenuto: CPLEX.2.: optimal solution; objective dual simplex iterations ( in phase I) informazioni sul metodo di soluzione soluzione disponibile 23

Soluzione del problema ampl: display x; // chiediamo i valori della soluzione ottenuta (componenti di x) // output ottenuto: x [*] := AB 6 AC 4 BC BE 7 CD 4 DB DE 3 EA ; soluzione a componenti intere 24

Soluzione del problema (MF) Abbiamo determinato il flusso x* ottimo di (G, c, d) B (6,6) (7, 7) A (, 2) (, 4) E (4, 4) (3, 5) (4, 8) C D (, ) ) x* soddisfa sia i vincoli di capacità che i vincoli di domanda: M x* = d A x* c. valore costo(x*) = x = ottimo 25

Soluzione duale ampl: display Incidenza; // chiediamo i valori della soluzione duale ottenuta // output ottenuto: Incidenza [*] := A B C D E ; 26

Soluzione duale ampl: display Capacita; // chiediamo i valori della soluzione duale ottenuta // output ottenuto: Capacita [*] := AB AC BC BE CD DB DE EA ; 27