Soluzione di problemi di ottimizzazione

Documenti analoghi
Soluzione di problemi di ottimizzazione

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

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

1 Breve introduzione ad AMPL

Linguaggi di modellizzazione

Progetto e ottimizzazione di reti 2

Miscelazione di benzine

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

Ottimizzazione Combinatoria

Esercitazione n o 3 per il corso di Ricerca Operativa

Ottimizzazione Combinatoria

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

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

Appunti sul linguaggio di programmazione MPL

METODI per effettuare previsioni con analisi di tipo WHAT-IF

Ricerca Operativa A.A. 2008/2009

TSP con eliminazione di sottocicli

126 APPROFONDIMENTI SUI PARAMETRI. SCRIPT IN AMPL

Un problema di Capital Budgeting

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

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

Il problema della dieta: guida visuale all utilizzo del solutore di Excel 1

INTRODUZIONE A EXCEL ESERCITAZIONE I

Ricerca Operativa e Logistica

TSP con eliminazione di sottocicli

Cosa è importante: pom.xml Goal Plug-in Repository

Modelli LP (complementi)

Ingegneria del Software 1: Eclipse

Capitolo 5: Ottimizzazione Discreta. E. Amaldi DEI, Politecnico di Milano

Come si progetta un circuito Perché simulare un circuito Cosa vuol dire simulare un circuito Il Simulatore Pspice Pacchetti che contiene Pspice

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

1. Sia dato un poliedro. Dire quali delle seguenti affermazioni sono corrette.

DATABASE PER IL WEB. Programmazione Web 1

Un applicazione della programmazione lineare ai problemi di trasporto

Se c'è: siete a posto Se non c'è: avviate l'opzione Add-Ins dello stesso menu e controllate se appare il Risolutore nella finestrella che compare:

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Le command line di Java

ETICHETTE. Gestione Etichette e Sovrappacchi. Release 5.20 Manuale Operativo

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

LABORATORIO DI ANALISI DEI SISTEMI

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Gestione Impresa. Mese Unità richieste

Manuale XML SERVICE FATTURA ELETTRONICA EASY. Version Description Author Date Approved Approved date V1 30/06/2014 V2 01/12/2014

CAPITOLO V. DATABASE: Il modello relazionale

Linguaggio C. Fondamenti. Struttura di un programma.

Il calcolatore. Architettura di un calcolatore (Hardware)

Ottimizzazione nella gestione dei progetti Capitolo 4: la gestione dei costi (Programmazione multimodale): formulazioni

Prof. Pagani Corrado HTML

Chiusura lineare. N.B. A può essere indifferentemente un insieme, finito o no, o un sistema. Es.1. Es.2

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Ottimizzazione Multi Obiettivo

Per formalizzare il concetto sono necessarie alcune nozioni relative ai poliedri e alla loro descrizione.

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Uso di Excel per l analisi e soluzione di Modelli di Programmazione Matematica

Progetto di Reti di Telecomunicazione Modelli in Programmazione Lineare Problemi di Localizzazione

Introduzione alla programmazione lineare. Mauro Pagliacci

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Fiery X3eTY 30C-KM/35C-KM. Esempi di flusso di lavoro

LOGISTICA. Laurea Specialistica-Università di Mantova Anno accademico Antonio Tiano

PSC Doc Manuale d uso

Files in C++ Fondamenti di Informatica. R. Basili. a.a

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

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Introduzione al MATLAB c Parte 2

Modelli di PL: allocazione ottima di risorse. Un esempio Modelli a risorse condivise Modelli a risorse alternative Modelli multi-periodo

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

TUTORATO di LINGUAGGI I

15 operazioni con winzip 8.1

Pianificazione di Produzione in DEC

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Importazione dati. e/fiscali Spesometro - Rel con gestionale e/satto. Gestionale e/satto

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

I servizi del SITR-IDT

Lezione 10: Librerie e compilazione separata

Problema della produzione dei monitor

Il web server Apache Lezione n. 3. Introduzione

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Modelli di Programmazione Lineare. PRTLC - Modelli

Relazione sul progetto di Column Generation per il problema dei P-Centri in linguaggio OPL

Schedulatore per la comunicazione con le Porte di Dominio

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Laboratorio di Basi di Dati e Web

INFN Security Workshop Firenze Settembre IMHO e IMP: una interfaccia Web sicura per la posta elettronica. Raffaele.Cicchese@pr.infn.

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

Fogli Elettronici: MS Excel utilizzo avanzato

Ingegneria del Software 1: Eclipse

Sistemi Web per il turismo - lezione 3 -

Manuale d uso DropSheep 4 imaio Gestione Pixmania-PRO Ver 1.1

Capitolo 3: Ottimizzazione Discreta. E. Amaldi DEIB, Politecnico di Milano

Compito di Informatica Grafica 5 appello 29/06/2006

Il Manuale di KXSLDbg. Keith Isdale Traduzione del documento: Samuele Kaplun Traduzione del documento: Simone Solinas

Ricerca Operativa e Logistica Dott. F.Carrabs e Dott.ssa M.Gentili. Uso di Excel nella Programmazione Matematica

La Programmazione Lineare

Programmazione Orientata agli Oggetti in Linguaggio Java

Strumenti per la programmazione

Esercitazione in Laboratorio: risoluzione di problemi di programmazione lineare tramite Excel il mix di produzione

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

MATEMATICA GENERALE Prova d esame del 4 giugno FILA A

PROTOCOLLO ITACA PUGLIA RESIDENZIALE Istruzioni d'uso del software Versione 1.0

Transcript:

Soluzione di problemi di ottimizzazione Problema di ottimizzazione: min z = c x A x b x 0 Possibili ulteriori vincoli (Es.: x INTERO) Soluzione: Trovare x* tale che c x* <= c x per ogni x A x b, x>=0 MPL-LE.1 Solutori di problemi di PL/PLI Input: n, m, (c), (A), (b) Eventuali altri vincoli (interezza variabili) Output: z, (x) Informazioni aggiuntive (variabili duali, costi ridotti, ) MPL-LE.2

Uso di Modelli Matematici (1) Es: 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 Determinare la dieta (mix di alimenti) di costo minimo, assicurando il fabbisogno giornaliero di ogni sostanza MPL-LE.3 Uso di Modelli Matematici (2) x j = quantità di alimento j nella dieta (j=1,,n) Modello matematico: min Σ j=1,n c j x j Σ j=1,n a ij x j b i x j 0 i = 1,, m j = 1,., n MPL-LE.4

Dieta - esempio n = 5 m = 8 c j = {10,8,15,6,16} 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-LE.5 Soluzione 1: scrittura manuale Definizione di un file di input (testo) per un risolutore (es. Cplex) /* 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-LE.6

Soluzione 2: scrittura su File Scrittura automatica del file di input (testo) void diet( n, m, a, b, c) { int i, j; FILE *fou; } fou = fopen( diet.lp,w); fprintf(fou, MINIMIZE\n Z: ); for (j = 1; j <= n; j++) fprintf(fou, +%d x%d,c[j], j ); fprintf(fou, \n SUBJECT TO \n ); for (i = 1; i <= m; i++) { fprintf(fou, CONSTR%d :,i ); for (j = 1; j <= n; j++) fprintf(fou, +%d x%d,a[i,j],j); fprintf(fou, >= %d \n,b[i] ); } fprintf(fou, END\n ); fclose(fou); MPL-LE.7 Soluzione 3: MPL Modello MPL del problema { 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-LE.8

Soluzione 4: MPL+DATABASE Modello MPL del problema integrato con una base di dati { Diet.mpl } TITLE Example OPTIONS DatabaseType = Access DatabaseAccess = diet.mdb" INDEX nutrients := DATABASE( sostanze", sostanzaid"); foods := DATABASE( cibi", ciboid"); DATA Required[nutrients] = DATABASE( sostanze", min_req"); Cost[foods] = DATABASE( cibi", costo_unit"); A[foods,nutrients] = DATABASE("valori", foods="idfoods", nutrients="idnutrients"); DECISION x[foods] EXPORT ACTIVITY TO DATABASE( sostanze ); MODEL MIN z = SUM(foods: Cost*x) ; SUBJECT TO CONSTR[nutrients] : SUM(foods: A*x) > Required[nutrients] END MPL-LE.9 MPL: Introduzione (1) MPL è un pacchetto software che permette di implementare problemi di Programmazione Lineare (PL) e Programmazione Lineare Intera (PLI) in modo chiaro, efficiente e conciso. E dotato di un linguaggio ad alto livello che permette di descrivere sistemi anche molto complessi. Realizza la separazione tra dati e modello. MPL-LE.10

MPL: Introduzione (2) I modelli sono indipendenti dal risolutore impiegato e dalla piattaforma sulla quale sono eseguiti (Windows, Unix, Macintosh, OSF Motif) Permette di importare i dati da diverse sorgenti (file di testo, excel, database, ) Nell output sono indicate, in modo comprensibile, tutte le operazioni svolte dal risolutore. Si può interfacciare con strumenti di grafica. MPL-LE.11 MPL: Introduzione (3) Esiste una libreria di oggetti (Optimax 2000) che contiene tutte le funzioni MPL e può essere usata da Visual Basic e Visual C++ E possibile introdurre commenti e definizioni linguistiche che facilitano la comprensione anche ai non programmatori. MPL-LE.12

MPL Modeling System (1) MODELS DATA MPL SOLVERS MPL-LE.13 MPL: Solver MPL si può interfacciare con i seguenti Solvers: CPLEX (ILOG) XPress-MP (DASH Associates) OSL XA FrontLine Lindo FortMP C-Whiz MPL-LE.14

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-LE.15 MPL: Modeling Language (1) Alcune caratteristiche: Utilizzo di nomi lunghi e alias. Importazione dati da altri programmi. Inclusione di file e direttive condizionali (#include, #define, #ifdef, #undef, ) Utilizzo di sommatorie di vettori e matrici. MPL-LE.16

MPL: Modeling Language (2) Lunghezza delle righe: 255 caratteri (i rimanenti vengono ignorati da MPL). 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 più righe. Il punto esclamativo! commenta fino a fine riga. MPL-LE.17 Struttura file MPL (1) Parte I: Dichiarazioni TITLE INDEX DATA DECISION MACRO OPTIONS Nome del Modello (Opzionale) Definizione indici per insiemi Vettori di input e costanti Variabili decisionali Definizione di macro Opzioni varie MPL-LE.18

Struttura file MPL (2) Parte II: Modello MAX/MIN SUBJECT TO BOUNDS INTEGER BINARY FREE END Funzione obiettivo Vincoli del modello Upper e Lower bound Variabili intere Variabili binarie Variabili libere Fine modello MPL-LE.19 MPL: Opzioni E possibile specificare alcune opzioni per MPL. Definizione possibile in qualunque punto del file. Alcune possibili opzioni: directory corrente; controlli sulla definizione delle variabili; tipo e nome del database utilizzato; OPTIONS DatabaseType = Access DatabaseAccess = "kp.mdb" MPL-LE.20

INDEX Gli indici definiscono i domini del problema. Possono essere: Numerici: nutrients:= 1..8; Nominali: foods:=(pasta, ham, cheese, egg, bread); Il numero di caratteri può essere limitato foods :=(pasta,ham,cheese,egg,bread):3; genera (pas, ham, che, egg, bre); MPL-LE.21 INDEX: alias Agli indici nominali si possono associare alias (usati nei file di output al posto dei nomi) : foods:=(pasta,ham,cheese,egg,bread)->(p,h,c,e,b); foods:=(pasta,ham,cheese,egg,bread):1; Si può assegnare ad un indice il nome di un altro (indice alias) INDEX città :=(BO,MI,FO,PD,GE); orig := città; dest := città; DECISION VARIABLES trasp[orig,dest]; MPL-LE.22

INDEX: indici circolari Se i domini rappresentano periodi di tempo è spesso necessario usare operazioni in modulo sul valore dell indice day := (mo,tu,we,th,fr,sa,su) CIRCULAR; month := 1..12 CIRCULAR; Inventory[month+5] se month=9, l indice è (9+5)mod(12) = 2 MPL-LE.23 INDEX: sottoinsiemi Si possono definire sottoinsiemi di indici. Bisogna specificare: l indice di base la lista di valori del sottoinsieme day := (mo,tu,we,th,fr,sa,su); month := 1..12 CIRCULAR; holiday[day] := (sa,su); summer[month] := 7..9; servicedays[day] := (mo,we,fr); repair[month] WHERE (month>=5)and(month<=8); MPL-LE.24

INDEX: importazione da file Gli elementi dell indice possono essere letti da file INDEX plants := INDEXFILE( plants.dat,2);! file 1, Atlanta, 127.35, 221.33 2, Dallas, 112.44, 212.00 PlantMachine[plants,machine] := INDEXFILE( PlantMach.dat );! file plant1, mach1, plant1, mach2, MPL-LE.25 INDEX: importazione da Excel e Db INDEX plants := EXCELRANGE( plants.xls, Plantrg ); Apre il file plants.xls e legge dal primo foglio (o da quello specificato nelle opzioni) gli elementi dal range Plantg fino alla prima cella vuota plants := DATABASE( plants, plantsid ); plants := DATABASE( plants ); plants := DATABASE( plants, location ); plants := DATABASE( plants,where country = Italy ); Apre la tabella plants del database corrente e definisce l indice in base al contenuto dei campi plantsid o location MPL-LE.26

DATA (1) In questa sezione si specificano i coefficienti utilizzati dal modello (costanti o vettori) 1. Costanti: DATA MaxP = 10; MeseFerie = 3; INDEX Pezzi := 1..MaxP; MPL-LE.27 DATA (2) 2. Vettori (contenenti i dati di ingresso) INDEX nutrients := 1..8; DATA Required[nutrients] := (40, 20, 30, 10, 42, 41, 65, 17); Vengono generate le variabili Required1, Required2, Required8 con Required1 = 40, Required2 = 20, Vettore sparso (solo alcuni elementi) Vet[nutrients] := [1: 5.0, 4: 7.5, 8: 10.0]; MPL-LE.28

DATA (3) 3. Matrici (definite per righe) INDEX i := 1..4; j := 1..3; DATA Cost[i,j] := (40, 20, 30, 13, 21, 7, 10, 42, 41, 65, 17, 13); Si possono usare formule e moltiplicatori: A[i] := (3, 4/5, 2*SQR(3)+2, 1/(3+2)) Cost[nutrients] := 1000 (10, 20, 3, 10, 10, 8, 6, 12); il valore 1000 è un moltiplicatore (Cost1=10000) MPL-LE.29 DATA (4) Dati da una fonte esterna: 1. 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 2. File Excel: A[foods,nutrients]=EXCELRANGE( input.xls", foods"); MPL-LE.30

DATA (5) 3. Database Access DATA Cost[foods] = DATABASE( cibi", costo_unit"); Carica nel vettore cost il contenuto della colonna costo_unit della cartella cibi del database corrente. MPL-LE.31 VARIABILI DECISIONALI (1) DECISION In questa sezione sono definite le variabili del problema. Per definire un insieme di variabili con lo stesso nome, si indica il nome del vettore e la dimensione del vettore stesso. X[foods]; MPL-LE.32

VARIABILI DECISIONALI (2) Si possono definire variabili multidimensionali. MultiVar[foods,nutrients] -> Y; Si possono definire delle variabili in base a determinate condizioni Production[product,month] WHERE(Demand[product,month] > 0); MPL-LE.33 VARIABILI DECISIONALI (3) Se alcune delle variabili decisionali sono intere bisogna indicare ciò con la parola chiave INTEGER INTEGER VARIABLES MultiVar[foods,nutrients]; Nel caso in cui siano binarie si usa BINARY La definizione può essere fatta alla fine del file MPL MPL-LE.34

VARIABILI DECISIONALI (4) E possibile riportare su database il valore di ciascuna variabile decisionale nella soluzione ottima. x[foods] EXPORT ACTIVITY TO DATABASE( cibi ); Il valore di ogni variabile decisionale viene scritto nella colonna x della tabella cibi del database corrente. E possibile riportare anche informazioni aggiuntive (costo ridotto, ) x[foods] EXPORT ALL TO SPARSEFILE ( Sol.dat ); MPL-LE.35 FUNZIONE OBIETTIVO Esprime la funzione lineare da ottimizzare. Deve essere indicata all inizio del file MPL; preceduta dalla parola chiave MIN o MAX; MAX 3x1 + 5x2 ; MIN Z = SUM(foods:cost*x); MINIMIZE Cost = SUM(foods,nutrients: Y); Il nome è opzionale. MPL-LE.36

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 Name: X1 + X2 + X3 >= 2; I vector constraints sono associati ad indici. CONST[nutrients]: SUM(foods:A*x)>required[nutrients]; CONST[nutrients]: SUM(foods:A*x)>required; MPL-LE.37 VINCOLI (2) E possibile scrivere dei vector constraints anche solo su un sottoinsieme degli indici o in base a determinate condizioni. CONSTR[nutrients=1..4]: CONSTR[foods,nutrients] WHERE (foods > bread): E possibile esportare lo slack del vincolo in file esterni. CONSTR[nutrients] EXPORT TO Sparsefile( const.dat ): MPL-LE.38

DOMINIO VARIABILI E possibile indicare nel modello un lower bound e/o un upper bound per ogni variabile. Si utilizza la parola chiave BOUNDS 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-LE.39 www.maximal-usa.com MPL su web Download software/download Step1: request activation code form Step2: download the software (with http) student version (300 constraints/variables, 100 integer) Step3: install the software (winzip) Step4: activating the Cplex license MPL user manual /mplman/mpltoc.html MPL-LE.40