Uso di MPL e Solver per problemi LP ed ILP. Uso di Modelli Matematici (1)

Documenti analoghi
Soluzione di problemi di ottimizzazione

Soluzione di problemi di ottimizzazione

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

Scopo del laboratorio

Programmazione Matematica: III.1 - Programmazione Lineare

LINGO -

Ricerca Operativa A.A. 2008/2009

Ottimizzazione Combinatoria

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

Introduzione all uso di FICO Xpress. Metodi di Ottimizzazione per la Logistica e la Produzione

Teoria della Dualità: I Introduzione

Programmazione Matematica: I - Introduzione

Metodi di Ottimizzazione per la Logistica e la Produzione

Elementi di un modello di Programmazione Matematica

p. 1/22 IBM ILOG CPLEX SIMPLEX implementato in C.

Modellazione GAMS. Sintassi di Base, Esempi. Domenico Salvagnin

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

Problemi di Ottimizzazione

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Lingo caratteristiche generali

INTRODUZIONE A LINGO. Dispense a cura di Antonio Tiano

Ottimizzazione Combinatoria

Uso di Optimax MPL OptiMax

AMPL: Esempi. F. Rinaldi. Corso di Laurea Matematica. Dipartimento di Matematica Università di Padova. Esempi di Modellazione in AMPL

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

Programmazione Matematica: VII La scomposizione di Dantzig Wolfe

Programmazione Matematica: Modelli di Programmazione Intera

Progetto e ottimizzazione di reti 2

Introduzione alla programmazione A. Ferrari

Progetto e ottimizzazione di reti 2

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

Le basi del linguaggio Java

Strumenti software per la soluzione di problemi di PL e PLI

Teoria della Complessità Computazionale Parte I: Introduzione

Linguaggi di modellizzazione

Programmazione Matematica: VI Estensioni dell algoritmo del Simplesso

Ottimizzazione Combinatoria

Metodi numerici con elementi di Programmazione A.A

Miscelazione di benzine

1) Matlab e simulazione. 2) Esempi di utilizzo. Mauro De Sanctis corso di Informazione e Codifica Università di Roma Tor Vergata

Introduzione al C. Fondamenti di Informatica. Daniele Loiacono

Octave. Luca Abeni. Informatica Luca Abeni 1 / 21

Fondamenti di Business Analytics classi M2/M3 Michele Impedovo anno accademico

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

Fondamenti di Informatica. Ingegneria elettronica

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

Introduzione a Lingo TM

File binari e file di testo

1. Calcolo dell indice di condizionamento di una matrice

Metodi Matematici per l Ottimizzazione

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

Progetto e ottimizzazione di reti 2

Lezione 8: Stringhe ed array multidimensionali

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

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

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

2 Operatori matematici e costrutto if

Esercitazione 1: Introduzione a MATLAB

Gestione dei files in linguaggio C. Fondamenti

1 Breve introduzione ad AMPL

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Introduzione al MATLAB c Parte 3 Script e function

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

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Laboratorio di Informatica I

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Progetto di rete con unica sorgente e costi fissi

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Lezione 6 Introduzione al C++ Mauro Piccolo

Introduzione al C. InformaticaB. Daniele Loiacono

Esercitazioni di Progetto di Reti di Telecomunicazioni. Anno Accademico Semestre

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

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

Laboratorio di Matematica e Informatica 1

Il linguaggio GNU MathProg con esempi commentati e risolti

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Lezione 8. Sottoprogrammi

Struttura di un linguaggio

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

I Appello Ricerca Operativa 2 bis Compito A

Università degli Studi di Ferrara

Dati due punti sul piano calcolare la loro distanza

Input/Output. Console e File.

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

Problemi iniziali di Programmazione Lineare (LP) I problemi di cui ci si occupa possono essere descritti matematicamente nel modo seguente:

Introduzione alla programmazione in linguaggio C

Il modello duale. Capitolo settimo. Introduzione

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Metodi e modelli per il supporto alle decisioni

I tipi strutturati e i record in C++

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Primo programma in C

Programmazione Lineare Intera: Piani di Taglio

Introduzione alla programmazione

Transcript:

Uso di MPL e Solver per problemi LP ed ILP Michele Monaci e Daniele Vigo D.E.I.S. Università di Bologna dvigo@deis.unibo.it rev. 3.0 ottobre 2002 Uso di Modelli Matematici (1) Problema della dieta: n possibili cibi m sostanze nutritive b i fabbisogno giornaliero sostanza i c j costo cibo j a ij quantità di sostanza i per unità di cibo j minimizzare il costo totale assicurando il fabbisogno giornaliero di ogni sostanza MPL.Intro.2 1

Uso di Modelli Matematici (2) Modello matematico: min n = 1 j n j = 1 c j x j = K a x b i 1,, m ij j i x j 0 j = 1, K, n MPL.Intro.3 n = 5 m = 8 c j = { 10, 8, 15, 6, 16 } Dieta - esempio b i = {40,20,30,10,42,41,65,17} a ij = {0, 14, 2, 36, 0, 55, 33, 44 36, 89, 1, 99, 30, 17, 7, 10 8, 42, 15, 9, 26, 3, 23, 11 20, 17, 0, 6, 55, 1, 0, 0 7, 44, 16, 19, 28, 0, 10, 4 } MPL.Intro.4 2

Soluzione 1: scrittura manuale /* file CPLEX */ MINIMIZE z: 10 x1 + 8 x2 + 15 x3 + 6 x4 + 16 x5 SUBJECT TO CONSTR1: 36 x2 + 8 x3 + 20 x4 + 7 x5 >= 40 CONSTR2: 14 x1 + 89 x2 + 42 x3 + 17 x4 + 44 x5 >= 20 CONSTR3: 2 x1 + x2 + 15 x3 + 16 x5 >= 30 CONSTR4: 36 x1 + 99 x2 + 9 x3 + 6 x4 + 19 x5 >= 10 CONSTR5: 30 x2 + 26 x3 + 55 x4 + 28 x5 >= 42 CONSTR6: 55 x1 + 17 x2 + 3 x3 + x4 >= 41 CONSTR7: 33 x1 + 7 x2 + 23 x3 + 10 x5 >= 65 CONSTR8: 44 x1 + 10 x2 + 11 x3 + 4 x5 >= 17 END MPL.Intro.5 Soluzione 2: scrittura su File Void scrivi( n, m, a, b, c) { int i, j; FILE *fout; fout = fopen( input.lp,w); fprintf(fout, MINIMIZE\n Z: ); for ( j = 1; j <= n; j++ ) if (c[j] > 0) fprintf(fout, +%d x%d,c[j], j ); fprintf(fout, \n SUBJECT TO \n ); for ( i = 1; i <= m; i++ ) { fprintf(fout, CONSTR%d :,i ); for ( j = 1; j <= n; j++ ) if (a[i][j]>0) fprintf(fout, +%d x%d,a[i][j],j); fprintf(fout, >= %d \n,b[i] ); } fprintf(fout, END\n ); fclose(fout); } MPL.Intro.6 3

Soluzione 3: MPL { Diet.mpl } TITLE Example INDEX nutrients = 1..8 foods := ( pasta, ham, cheese, egg, bread ) DATA Required[nutrients] = ( 40! Calories [thousands] 20! Protein [grams] 30! Calcium [grams] 10! Iron [milligrams] 42! Avitamin [thousand ius] 41! Thiamine (B1) [milligrams] 65! Riboflavin (B2) [milligrams] 17 );! Niacin [milligrams] Cost[foods] = ( 10, 8, 15, 6, 16 ); A[foods,nutrients] = DATAFILE(input.dat)! Nuritive values of foods. DECISION x[foods]! dollars of food to be purchased daily MODEL MIN z = SUM(foods: Cost*x) ; SUBJECT TO CONSTR[nutrients] : SUM(foods: A*x) > Required[nutrients] END MPL.Intro.7 Soluzione 4: Solver di Excel Problema della Dieta B C D E F G H I J K (1000) (g) (g) (mg) (1000 ius) (B1) (mg) (B2) (mg) (mg) Costo Calorie Proteine Calcio Ferro Vit. A Tiamina Riboflavina Niacina /Kg Fabbisogno giornaliero 40 20 30 10 42 41 65 17 qta (Kg) Cibo 1 0 14 2 36 0 55 33 44 10 0.508369 Cibo 2 36 89 1 99 30 17 7 10 8 0.691981 Cibo 3 8 42 15 9 26 3 23 11 15 1.886085 Cibo 4 20 17 0 6 55 1 0 0 6 0 Cibo 5 7 44 16 19 28 0 10 4 16 0 Contenuto dieta 40 147.9191 30 103.7822 69.79765 45.38221 65 50.03497 costo complessivo ( ) 38.91082 =MATR.SOMMA.PRODOTTO(B7:B11;$K$7:$K$11) =MATR.SOMMA.PRODOTTO(J7:J11;K7:K11) MPL.Intro.8 4

MPL: Introduzione MPL è un pacchetto software che permette di implementare problemi di programmazione lineare (LP) e programmazione lineare intera (ILP) in modo chiaro, efficiente e conciso. E un linguaggio ad alto livello che permette di descrivere sistemi anche molto complessi. E possibile introdurre commenti e definizioni linguistiche che facilitano la comprensione anche ai non programmatori. MPL.Intro.9 MPL: Introduzione (2) I programmi vengono scritti con un semplice editor di testo e sono indipendenti dalla piattaforma sulla quale sono eseguiti (Windows, Unix, Macintosh, OSF Motif). Nell output sono indicate, in modo comprensibile, tutte le operazioni svolte dal risolutore. Si può interfacciare con strumenti di grafica. MPL.Intro.10 5

MPL Modeling System (1) MODELS DATA MPL SOLVERS MPL.Intro.11 MPL Modeling System (2) MPL si può utilizzare i seguenti Solvers: CPLEX OSL XA FrontLine Lindo FortMP C-Whiz XPress-MP MPL.Intro.12 6

MPL: Input data MPL consente di acquisire i dati di input: Direttamente nel file MPL Da file di testo (ASCII) Da database esterno (ACCESS, EXCEL, ODBC, ORACLE...) Da database interno a MPL MPL.Intro.13 MPL Modeling Language Alcune caratteristiche: Utilizzo di nomi lunghi e alias. Importazione dati da altri programmi. Inclusione di file e direttive condizionali. Utilizzo di sommatorie di vettori e matric Lunghezza righe: 255 caratteri (oltre ignorati) Separatori: i diversi statement all interno dello stesso blocco devono essere divisi dal punto e virgola ; Commenti: le parentesi graffe {} racchiudono un blocco di commenti anche su piu` righe. Il punto esclamativo! delimita l inizio di un commento che termina a fine riga. MPL.Intro.14 7

Struttura file MPL (1) Parte 1: Dichiarazioni TITLE: Nome del Modello (Opzionale) INDEX: Definizione indici per insiemi DATA: Vettori di input e costanti DECISION: Variabili decisionali MACRO: Definizione di macro MPL.Intro.15 Struttura file MPL (2) Parte 2: Il modello MODEL MAX/MIN: Funzione obiettivo SUBJECT TO: Vincoli del modello BOUNDS: Upper e Lower bounds sulle variabili INTEGER: Variabili intere BINARY: Variabili binarie FREE: Variabili libere END MPL.Intro.16 8

INDEX (1) Gli indici definiscono i domini del problema. Possono essere: Numerici: nutrients:= 1..8; Nominali: foods:=(pasta, ham, cheese, egg, bread); Associati ad Alias: foods:=(pasta, ham, cheese, egg, bread) -> (p, h, c, e, b); MPL.Intro.17 INDEX (2) E possibile definire indici circolari (modulo) day := (mo, tu, we, th, fr, sa, su) CIRCULAR; month := 1..12 CIRCULAR; sottoinsiemi di indici. holiday[day] := (sa, su); summer[month] := (7..9); MPL.Intro.18 9

DATA (1) In questa sezione si specificano i coefficienti utilizzati dal modello (costanti o vettori) Costanti: MinP:= 1 Vettori: Required[nutrients] := (40, 20, 30, 10, 42, 41, 65, 17); Vengono generate le variabili Required1, Required2, Required3, Required4, Required5, Required6, Required7, Required8 MPL.Intro.19 DATA (2) Dati da una fonte esterna: File di testo: A[foods,nutrients]:=DATAFILE( input.dat"); { input.dat } Calories Protein Calcium Iron VitaminA Thiamine Riboflavin Niacin! (1000) (grams) (grams) (MG) (1000 IU) (MG) (MG) (MG) WheatFlour 0 14 2 36 0 55 33 44 CornMeal 36 89 1 99 30 17 7 10 EvapMilk 8 42 15 9 26 3 23 11 Margarine 20 17 0 6 55 1 0 0 Cheese 7 44 16 19 28 0 10 4 Database Excel: A [foods,nutrients]= EXCELRANGE( input.xls", foods"); MPL.Intro.20 10

DECISION (1) DECISION In questa sezione sono definite le variabili decisionali del problema Per definire un insieme di variabili con lo stesso nome, si indica il nome del vettore e la dimensione del vettore stesso Es: X[foods]; Si possono definire variabili multidimensionali. Es: MultiVar[foods,nutrients] -> Y; MPL.Intro.21 DECISION (2) Se alcune delle variabili decisionali sono intere bisogna indicare ciò con la parola chiave INTEGER Nel caso in cui siano binarie si usa BINARY Es: INTEGER VARIABLES MultiVar[foods,nutrients]; MPL.Intro.22 11

FUNZIONE OBIETTIVO Esprime la funzione lineare da ottimizzare. Deve essere indicata all inizio del file MPL; preceduta dalla parola chiave MIN o MAX; ES: MAX 3x1 + 5x2 ; MIN Z = SUM(foods:cost*x); MINIMIZE Cost = SUM(foods,nutrients : Y) ; MPL.Intro.23 VINCOLI (1) I vincoli del modello vengono definiti immediatamente dopo la funzione obiettivo. Preceduti dalla parola chiave SUBJECT TO Ogni vincolo deve terminare con il carattere ; I plain constraints sono espressi direttamente Es: X1 + X2 + X3 >= 2; I vector constraints sono associati ad indici. Es: CONSTRAINT[nutrients]: SUM(foods:A*x)>required[nutrients]; MPL.Intro.24 12

VINCOLI (2) è possibile scrivere dei vector constraints solo su un sottoinsieme degli indici o in base a determinate condizioni. Es: CONSTR[nutrients=1..4] : CONSTR[foods,nutrients] WHERE (foods > bread) : MPL.Intro.25 VINCOLI (3) VINCOLO NON CIRCOLARE Xj + X(j+1) +.X(j+k) >= a INDEX j:= 1..10; SUM(h=j..j+k: x) >= a VINCOLO CIRCOLARE se j+k > 10 (es.: j=7, k=5) X7 + X8 + X9 + X10 + X1 + X2 >= a INDEX kk:= 1..5; SUM(kk: x[j+kk]) >= a MPL.Intro.26 13

BOUNDS è possibile indicare nel modello un lower bound e/o un upper bound per ogni variabile. Si utilizza la parola chiave BOUNDS Es: BOUNDS X1 >= MinP; y_bound: 2 < Y(1,1) < 8 ; Default: lower bound =0 per tutte le variabili. Il file MPL deve terminare con la parola END MPL.Intro.27 Modello completo { Diet.mpl } TITLE Example INDEX nutrients = 1..8 foods := ( pasta, ham, cheese, egg, bread ) DATA Required[nutrients] = ( 40! Calories [thousands] 20! Protein [grams] 30! Calcium [grams] 10! Iron [milligrams] 42! Avitamin [thousand ius] 41! Thiamine (B1) [milligrams] 65! Riboflavin (B2) [milligrams] 17 );! Niacin [milligrams] Cost[foods] = ( 10, 8, 15, 6, 16 ); A[foods,nutrients] = DATAFILE(input.dat)! Nuritive values of foods. DECISION x[foods]! dollars of food to be purchased daily MODEL MIN z = SUM(foods: Cost*x) ; SUBJECT TO CONSTR[nutrients] : SUM(foods: A*x) > Required[nutrients] END MPL.Intro.28 14

Ambiente MPL MPL.Intro.29 15