Progetto e ottimizzazione di reti 2

Похожие документы
Ottimizzazione Combinatoria

Ottimizzazione Combinatoria

Ottimizzazione Combinatoria

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

1 Breve introduzione ad AMPL

Progetto e ottimizzazione di reti 2

Linguaggi di modellizzazione

TSP con eliminazione di sottocicli

Gestione Impresa. Mese Unità richieste

Introduzione al MATLAB c Parte 2

AMPL Plus: Introduzione all uso

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

TSP con eliminazione di sottocicli

Pianificazione di Produzione in DEC

Macchine sequenziali

LAB LEZ. 1 STATISTICA DESCRITTIVA CON R

Metodi Stocastici per la Finanza

Problema del Trasporto. Container vuoti Verona 10 Perugia 12 Roma 20 Pescara 24 Taranto 18 Lamezia 40

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Object Oriented Software Design

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Applicazioni lineari

Funzioni in C. Violetta Lonati

Metodologie di programmazione in Fortran 90

min 4x 1 +x 2 +x 3 2x 1 +x 2 +2x 3 = 4 3x 1 +3x 2 +x 3 = 3 x 1 +x 2 3x 3 = 5 Innanzitutto scriviamo il problema in forma standard: x 1 x 2 +3x 3 = 5

Luigi Piroddi

Analisi di una Rete Sociale

Capitolo 13. Interrogare una base di dati

INTRODUZIONE A EXCEL ESERCITAZIONE I

RISOLUTORE AUTOMATICO PER SUDOKU

Lezioni di Ricerca Operativa. Corso di Laurea in Informatica Università di Salerno. Lezione n 4

Basi di matematica per il corso di micro

ALGEBRA DELLE PROPOSIZIONI

Progettazione del Software, Laurea in Ingegneria Gestionale Progettazione del Software Laurea in Ing. Gestionale

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Come gestire le directory con R

VC-dimension: Esempio

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Soluzione di problemi di ottimizzazione

Matematica in laboratorio

Derive 5. di Stefania Mannara. Studio di funzione con Derive 5 di Stefania Mannara (SICSI VI CICLO) 1 28/05/2009

Fogli Elettronici: MS Excel

Prodotto elemento per elemento, NON righe per colonne Unione: M R S

Software di base. Corso di Fondamenti di Informatica

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Studente: SANTORO MC. Matricola : 528

Ricerca Operativa e Logistica

Corso di Informatica

Il web server Apache Lezione n. 3. Introduzione

Introduzione al Foglio Elettronico

Excel avanzato. I nomi. Gli indirizzi e le formule possono essere sostituiti da nomi. Si creano tramite Inserisci Nome Definisci

Raggruppamenti Conti Movimenti

COSTER. Import/Export su SWC701. SwcImportExport

Lezione 9: Cambio di base

x 1 + x 2 3x 4 = 0 x1 + x 2 + x 3 = 0 x 1 + x 2 3x 4 = 0.

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

Dispensa di database Access

Laboratorio di Informatica

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

METODI per effettuare previsioni con analisi di tipo WHAT-IF

Ottimizzazione Multi Obiettivo

LE FUNZIONI A DUE VARIABILI

SIMULAZIONE ESAME di OTTIMIZZAZIONE Corso di Laurea in Ingegneria Gestionale 2 o anno

Uso di base delle funzioni in Microsoft Excel

Cos è un Calcolatore?

Università degli Studi di Padova Dipartimento di Matematica. - Corso di Laurea in Informatica

MANUALE PARCELLA FACILE PLUS INDICE

Dimensione di uno Spazio vettoriale

Cosa è un foglio elettronico

Modelli di Programmazione Lineare. PRTLC - Modelli

I PROBLEMI ALGEBRICI

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

Richiesta pagina PHP (es: index.php)

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

Javascript: il browser

OSSIF WEB. Manuale query builder

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

NOZIONI BASE PER ESERCITAZIONI

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

Il Software. Il software del PC. Il BIOS

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Corso di PHP. Prerequisiti. 1 - Introduzione

Algoritmi e Strutture Dati

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

Lezione V. Aula Multimediale - sabato 29/03/2008

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Metodi Computazionali

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Транскрипт:

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

AMPL in breve A Mathematical Programming Language AMPL è un linguaggio di modellazione algebrico per problemi di programmazione matematica: - problemi lineari e non lineari - problemi in variabili intere e continue AMPL impiega una notazione basata su concetti semplici e di uso comune per rendere più facile il processo di modellazione di un problema. Una volta formulato tramite il linguaggio AMPL, occorre un opportuno solutore di programmazione matematica per risolvere il problema. L interprete AMPL permette di risolvere un problema formulato tramite il linguaggio AMPL impiegando direttamente un solutore di programmazione matematica. 2

Solutori per AMPL Sono disponibili diversi solutori tramite l interfaccia grafica AMPL. La scelta del solutore dipende dal tipo di problema: -Problemi di programmazione lineare: con variabili continue: GUROBI, BPMPD, CPLEX, LAMPS, LOQO, lp_solve, MINOS, MOSEK, OSL, SOPT, XA, Xpress-MP con variabili intere: GUROBI, CPLEX, LAMPS, lp_solve, MINTO, MOSEK, OSL, SOPT, XA, Xpress-MP -Problemi di programmazione non lineare: quadratici: CPLEX, MOSEK, OSL convessi: MOSEK, SOPT generali continui: CONOPT, DONLP2, FILTER, FSQP, IPOPT, KNITRO, LANCELOT, LOQO, MINOS, NPSOL, PENNON, SNOPT generali interi: MINLP In questo corso utilizzeremo l interprete AMPL ed il solutore CPLEX, versione student. 3

Software AMPL Sito ufficiale: www.ampl.com Tutte le informazioni relative ad AMPL si trovano sul sito ufficiale AMPL Pagina per il download dell interprete APML e dei solutori: www.ampl.com/downloads/index.html La pagina contiene: - istruzione per il download (quick start per Windows e Unix); - software eseguibile dell interprete AMPL; - software eseguibile di diversi solutori. Ulteriori informazioni sul download sono reperibili alla pagina: www.ampl.com/downloads/details.html AMPL Pagina per il download dell interfaccia grafica: www.ampl.com/gui/expermt.html Sono disponibili tre diverse interfacce grafiche in versione sperimentale. 4

Materiale Oltre alle slide di questa esercitazione, è possibile scaricare dalla pagina della prof.ssa Piccialli http://www.dis.uniroma.it/~piccialli/teachita.htm il seguente materiale: - Par. 4- di Appunti sulla Sintassi e sui Comandi di AMPL Plus v.6 Manuale in italiano a cura dei dott. R. Bruni, G. Fasano e G. Liuzzi www.dis.uniroma.it/~piccialli/amplman2.pdf - Esercitazioni a cura dalla prof.ssa Piccialli con appunti delle lezioni e diversi esempi di problemi di programmazione lineare e non lineare, realizzate per il corso di Ottimizzazione A.A. 24/25. Si ringraziano i dott. Piccialli, Bruni, Fasano e Liuzzi per aver reso disponibile il materiale 5

Il linguaggio AMPL AMPL contiene diverse primitive per esprimere la notazione matematica normalmente utilizzata nello scrivere problemi di ottimizzazione (=, <, >,,, sommatorie, funzioni elementari, etc.) Ciascuna istruzione di AMLP deve terminare con un punto e virgola (;). E quindi possibile l indentazione nel file dei comandi. E possibile scrivere in un unico file con estensione.mod tutte le istruzioni AMPL che definiscono il modello, ma è bene separare due elementi del problema da risolvere: - la struttura del modello nel file.mod in cui sono descritte le componenti del modello (variabili, funzione obiettivo, vincoli, etc.); - i dati del modello nel file.dat in cui sono scritti i dati del problema (che in AMPL vengono chiamati parametri). Le righe di commento, sia nel file.mod che nel file.dat, devono essere precedute dal simbolo #. 6

Il linguaggio AMPL Una volta scritti i file con estensione.mod e c.dat, è possibile farli interpretare all interprete AMPL attraverso le istruzioni - model file.mod; con questa istruzione vengono interpretate tutte le componenti del modello (variabili, funzione obiettivo, vincoli, etc.); - data file.dat; con questa istruzione vengono assegnati i valori a tutte le componenti del modello dichiarate nel file.mod Esempio: Se abbiamo dichiarato e definito il nostro modello nei file prova.mod e prova.dat, per interpretare i due file scriviamo: model prova.mod; data prova.dat; Da questo momento, tutte le dichiarazioni presenti in prova.mod e tutte le assegnazioni definite in prova.dat sono state interpretate. 7

Il linguaggio AMPL Per modellare un problema di programmazione matematica in AMPL creiamo due file: - file.mod contenente: - la dichiarazione dei parametri - la dichiarazione delle variabili - la struttura e la definizione della funzione obiettivo - la struttura e la descrizione dei vincoli - file.dat contenente i valori numerici dei parametri Il file.dat deve iniziare con il comando data. Questa istruzione dice all interprete che segue la definizione delle entità precedentemente dichiarate nel file.mod. I parametri possono essere rappresentati fondamentalmente tramite due tipi di strutture dati: - insieme -parametro(anche a più dimensioni) 8

Gli insiemi in AMPL AMPL consente di utilizzare la struttura dato insieme. Un insieme dev essere: - dichiarato (nel file.mod), dicendo all interprete AMPL che un nome identifica l insieme che vogliamo utilizzare attraverso la parola chave set; - definito (nel file.dat), assegnando gli elementi all insieme dichiarato; l operatore di assegnazione è :=. Esempio: Per definire l insieme S di elementi a, b, c e d, dichiariamo nel file prova.mod: set S; Successivamente definiamo nel file prova.dat l insieme assegnando gli elementi a, b, c e d: set S := a b c d ; Il linguaggio AMLP è case sensitive. 9

Gli insiemi in AMPL Per stampare gli elementi di un insieme possiamo utilizzare l istruzione display seguita dall identificativo dell insieme. Esempio: Per stampare gli elementi dell insieme S di elementi a, b, c e d, dichiarato nel file prova.mod e definitivo nel file prova.dat, scriviamo l istruzione da riga di comando dell interprete AMPL: display S; Una volta eseguita l istruzione, l interprete mostrerà il seguente output: ampl: display S; set S := a b c d; AMPL consente di utilizzare operazioni elementari tra insiemi, quali: -unione: istruzione union; -intersezione: istruzione inter; - differenza: istruzione diff; - differenza simmetrica: istruzione symdiff; - cardinalità: istruzione card;.

Gli insiemi in AMPL AMPL consente inoltre di dichiarare insiemi di tipo ordinato attraverso la parola chiave ordered posto dopo l identificativo dell insieme. L ordine in cui assegniamo gli elementi all insieme definisce l ordinamento dell insieme. Esempio: Per definire l insieme ordinato S di elementi a, b, c e d, dichiariamo nel file prova.mod: set S ordered; Successivamente definiamo nel file prova.dat l insieme assegnando gli elementi a, b, c e d: set S := a b c d ; Quindi a sarà il primo elemento dell insieme, b il secondo e così via.

Gli insiemi in AMPL AMPL consente di utilizzare alcune operazioni elementari per insiemi ordinati quali: -first(s)per restituire il primo elemento dell insieme S; -last(s)per restituire l ultimo elemento dell insieme S; - next(t,s,n) per restituire l ennesimo elemento che si trova dopo l elemento t nell insieme S; -prev(t,s,n)per restituire l ennesimo elemento che si trova prima dell elemento t nell insieme S; -ord(t,s)per restituire la posizione dell elemento t nell insieme S; -member(j,s)per restituire l elemento in posizione j nell insieme S. E inoltre possibile definire in AMPL insiemi ordinati molto semplici in base ad un ordinamento predefinito. Il più semplice insieme ordinato è quello dei numeri interi compresi tra due valori, che si indica con l operatore.. Se N è un numero intero, l insieme dei numeri interi compresi tra ed N si indica con..n 2

I parametri in AMPL I parametri sono i dati del problema, da non confondere con le variabili. Una volta invocato il solutore, il valore dei parametri resta costante. Un parametro dev essere: - dichiarato (nel file.mod), dicendo all interprete AMPL che un nome identifica il parametro che vogliamo utilizzare attraverso la parola chave param; - definito (nel file.dat), assegnando il valore al parametro dichiarato; l operatore di assegnazione è :=. Esempio: Per definire il parametro N dichiariamo nel file prova2.mod: param N; Successivamente definiamo nel file prova2.dat il valore del parametro N: param N := 3 ; Se il parametro assume un valore INTERO, possiamo dichiararlo di tipo integer: param N integer; Analoghe restrizioni sul valore assunto dal parametro possono essere indicate in fase di dichiarazione. 3

Parametri a più dimensioni in AMPL I vettori di parametri sono molto utili per definire vettori di coefficienti. Un vettore di parametri dev essere: - dichiarato (nel file.mod), dicendo all interprete AMPL il nome che identifica il vettore e l insieme entro cui varia l indice delle sue componenti attraverso la parola chiave param e le parentesi {}; - definito (nel file.dat), assegnando i valori al vettore di parametri dichiarato. Esempio: Per definire il vettore di parametri vett di componenti indicizzate su un insieme S dichiariamo nel file prova3.mod: set S; param vett{s}; Successivamente definiamo nel file prova3.dat i valori dei parametri: set S := a b c d; param vett := a b 2 c 3 d 4; 4

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 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]; 5

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 su un insieme 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 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; 6

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 ; 7

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 8

Grafo Esercitazione AMPL A.A. 29-2 9

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

Flusso di costo minimo (MCF) Esercitazione AMPL A.A. 29-2 2

Problema Flusso su grafo orientato 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} 6 B 6 7-5 A 2 4 E 4 4 C -5 Sia dato il vettore d di domande definito sull insieme N dei nodi del grafo G(N,A) d = {-5, 6, -5,, 4} N = {A, B, C, D, E } 8 D 5 22

Problema Flusso su grafo orientato Sia w il vettore di costi definito sull insieme A degli archi del grafo G(N,A) w = { 2, 3,, 5,, 2, 4 } A = {AB, AC, BC, BE, CD, DB, DE} 6 B 2 5-5 A 2 E 4 3 4 C D -5 Vogliamo risolvere il problema di flusso a costo minimo (MCF) sul grafo orientato G(N,A) rispetto al vettore w di costi (MCF) min wt x M x = d A x c 23

Problema di Flusso di Costo Minimo Vogliamo determinare un flusso x di (G, c, d) di costo minimo (x AB, 6) B 6 (x BE, 7) -5 A (x BC, 2) (x DB, 4) E 4 (x AC, 4) (x CD, 8) C D -5 (x DE, 5) costo(x) = w T x = 2 x AB + 3 x AC + x BC + 5 x BE + x CD + 2 x DB + 4 x CD (MCF) min w T x M x = d A x c Modelliamo il problema tramite AMPL 24

Modellazione con AMPL (MCF) min wt 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} - w = { 2, 3,, 5,, 2, 4 } M = - d = {-5, 6, -5,, 4} - c = { 6, 4, 2, 7, 8, 4, 5 } 25

File modello File modello MCF.mod - dichiarazione dei parametri: dichiariamo gli insiemi dei nodi N e degli archi A che identifichiamo con insieme NODI e insieme ARCHI: set NODI; (N) set ARCHI; (A) dichiariamo i vettori a una (w, d, c) e a due dimensioni (M): param costo {ARCHI}; (w) param domanda {NODI}; (d) param capacita {ARCHI}; (c) param M {NODI, ARCHI}; (M) 26

File modello File modello MCF.mod - dichiarazione delle variabili x positive e soggette a vincoli di capacità: var x {j in ARCHI} >=, <= capacita[j]; (x) A x c - la struttura e la definizione della funzione obiettivo w T x minimize Costo_Totale: sum {j in ARCHI} costo[j] * x[j]; etichetta etichetta - la struttura e la descrizione dei vincoli M x = d parametrizzata subject to Incidenza {i in NODI}: sum {j in ARCHI} M[i,j] * x[j] = domanda[i]; 27

File dati File dati MFC.dat - definizione dei parametri: definiamo gli insiemi NODI e ARCHI: set NODI := A B C D E ; set ARCHI := AB AC BC BE CD DB DE ; definiamo i vettori a una dimensione (w, d, c): param domanda := A -5 B 6 C -5 D E 4 ; param: capacita costo := AB 6 2 AC 4 3 BC 2 il simbolo : BE 7 5 indica che stiamo CD 8 definendo più di un vettore DB 4 2 DE 5 4 ; 28

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

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

Soluzione del problema (MCF) 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 // output ottenuto: CPLEX.2.: optimal solution; objective 33 dual simplex iterations ( in phase I) valore ottimo informazioni sul metodo di soluzione soluzione disponibile 3

Soluzione del problema (MCF) ampl: display x; // chiediamo i valori della soluzione ottenuta (componenti di x) // output ottenuto: x [*] := AB 5 AC BC BE CD 5 DB DE 4 ; soluzione a componenti intere M M I Totalmente unimodulare 32

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