Top Banner
Linguaggi di modellizzazione Come visto, il primo passo per risolvere un problema di decisione consiste nel formularne il modello matematico. Una volta definito il modello matematico lo dobbiamo passare a un risolutore che ne restituisce la soluzione. Il passaggio dal modello matematico al risolutore non è però immediato. È necessario tradurre il modello nelle strutture dati che devono essere passate come input al programma risolutore. I linguaggi di modelizzazione come AMPL cercano proprio di facilitare questo compito. – p. 1/5
54

Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Feb 17, 2019

Download

Documents

lykhanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Linguaggi di modellizzazione

Come visto, il primo passo per risolvere un problema didecisione consiste nel formularne il modello matematico.

Una volta definito il modello matematico lo dobbiamopassare a un risolutore che ne restituisce la soluzione.

Il passaggio dal modello matematico al risolutore non èperò immediato. È necessario tradurre il modello nellestrutture dati che devono essere passate come input alprogramma risolutore.

I linguaggi di modelizzazione come AMPL cercano propriodi facilitare questo compito.

– p. 1/54

Page 2: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Continua

Invece di passare direttamente dal modello su cartaall’input per il risolutore, si scrive un modello in linguaggioAMPL che viene poi passato a un traduttore che si occupadi trasformare il modello scritto in AMPL nell’input per ilprogramma risolutore.

Il vantaggio di questo passaggio supplementare è cheAMPL è concepito in modo che il modello scritto in AMPLsia molto simile al modello scritto su carta.

– p. 2/54

Page 3: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Inoltre, risolutori diversi possono richiedere input in formatimolto diversi tra loro. Di tutto questo non si devepreoccupare l’utente AMPL, che utilizza la stessa sintassiindipendentemente dal risolutore che verrà utilizzato.L’utente si limiterà a specificare il risolutore tramite ilcomando

ampl: option solver nome risolutore;

Per problemi di PL e PLI un risolutore molto utilizzato ècplex.

– p. 3/54

Page 4: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Un esempio: problema dieta

Sia dato un insieme PROD di prodotti ed un insieme SOST

di sostanze nutritive. Si sa che in un’unità del prodotto j sitrova una quantità quant_unitij della sostanza nutritiva i.Inoltre si sa che il costo di un’unità di prodotto j è pari acost_unitj . Tenendo conto che una dieta deve contenereuna quantità minima quant_mini di ciascuna sostanzanutritiva, si vuole determinare una dieta che abbia costominimo.

– p. 4/54

Page 5: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Modello matematico

Variabili: a ogni prodotto j si associa una variabile xj

indicante la quantità di prodotto da inserire nella dieta.

Vincoli: dobbiamo avere almeno una quantitàquant_mini di ciascuna sostanza nutritiva, cioè

j∈PROD

quant_unitij ∗ xj ≥ quant_mini ∀ i ∈ SOST.

Dobbiamo avere una quantità non negativa, cioè

xj ≥ 0 ∀ j ∈ PROD.

Obiettivo: minimizzare il costo complessivo della dieta,cioè

min∑

j∈PROD

cost_unitj ∗ xj .

– p. 5/54

Page 6: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Quindi

min∑

j∈PROD cost_unitj ∗ xj∑

j∈PROD quant_unitij ∗ xj ≥ quant_mini ∀ i ∈ SOST

xj ≥ 0 ∀ j ∈ PROD

– p. 6/54

Page 7: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Parti fondamentali di AMPL

Insiemi di indici Nel caso del problema della dieta sono idue insiemi PROD dei prodotti e SOST delle sostanzenutritive.

Parametri Sono tutte le quantità il cui valore è notoprima di risolvere il problema. Nel problema della dietasono i costi unitari cost_unitj dei prodotti, le quantitàminime quant_mini delle sostanze nutritive e le quantitàquant_unitij di sostanza i in un’unità di prodotto j.

Variabili Sono le quantità i cui valori devono esserestabiliti attraverso la soluzione del problema.Nell’esempio sono le variabili xj indicanti le quantità diprodotto j (tutte non negative).

– p. 7/54

Page 8: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Vincoli Limitano la scelta delle variabili. Nell’esempioabbiamo i vincoli sulle quantità minime di ciascunasostanza.

Obiettivo È la quantità il cui valore va massimizzato (ominimizzato) scegliendo opportunamente i valori dellevariabili. Nell’esempio si deve minimizzare il costo delladieta.

– p. 8/54

Page 9: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Osservazione

Queste componenti fondamentali di AMPL coincidono conle componenti che abbiamo riconosciuto in un problema didecisione, con però un maggiore dettaglio: la componentedati è stata scomposta nelle due componenti insiemi diindici e parametri.

Si tratta ora di vedere come queste componenti vengonodichiarate e definite in linguaggio AMPL.

– p. 9/54

Page 10: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Insiemi

Un insieme T si dichiara semplicemente attraverso laseguente sintassi

set T ;

Si noti che questa è soltanto la dichiarazione dell’insieme.Da una qualche altra parte, come vedremo, andràspecificato il contenuto dell’insieme, ovvero verrà data ladefinizione dell’insieme.

Nel nostro esempio avremo le seguenti dichiarazioni

set PROD ;set SOST ;

– p. 10/54

Page 11: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Parametri

Un parametro a si dichiara nel modo seguente

param a ;

Qualora sia noto che il parametro è sempre positivoconviene indicarlo esplicitamente nella dichiarazione nelmodo seguente

param a > 0 ;

In modo analogo si può specificare che un parametro è nonnegativo (>= 0), negativo (< 0) o non positivo (<= 0).

– p. 11/54

Page 12: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Si può anche specificare che un parametro deve avere unvalore intero nel modo seguente

param a > 0 integer ;

In questo caso il parametro a deve essere un intero positivo.

– p. 12/54

Page 13: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Continua

È possibile anche dichiarare vettori di parametri con indiciin un insieme T attraverso la seguente dichiarazione

param a{T } ;

Nel caso gli indici siano gli interi da 1 a n si può scrivere

param a{1..n} ;

Si possono infine anche dichiarare array bidimensionali coninsiemi di indici T1 e T2 nel modo seguente

param a{T1, T2} ;

– p. 13/54

Page 14: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nell’esempio

Nell’esempio si avranno le seguenti dichiarazioni

param cost_unit{PROD} > 0 ;param quant_unit{SOST ,PROD} >= 0 ;param quant_min{SOST } > 0;

Si noti che si richiede che i costi unitari e le quantità minimesiano strettamente positive, mentre le quantità di sostanzain un’unità di prodotto devono essere non negative.

– p. 14/54

Page 15: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Variabili

La dichiarazione delle variabili è del tutto analoga a quelladei parametri. La sola differenza è che la parola chiaveparam viene sostituita dalla parola chiave var.

Nel nostro esempio abbiamo un vettore di variabili x conindici in PROD che sarà definito in questo modo

var x{PROD} >= 0 ;

Si noti che nella dichiarazione delle variabili sono giàcompresi i vincoli di non negatività delle stesse.

– p. 15/54

Page 16: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Continua

Nel caso una variabile sia vincolata ad assumere solo valoriinteri è sufficiente aggiungere la parola chiave integer nellasua dichiarazione, esattamente come si è fatto per iparametri. Si noti che questa aggiunta è la sola cosa chedistingue un modello di AMPL per la PL da uno per la PLI.

Se sulle variabili si hanno, oltre ai vincoli di non negatività,anche limiti superiori sui valori delle stesse, possiamoindicare tali limiti sulla stessa riga.

– p. 16/54

Page 17: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Per esempio, se avessimo anche un parametro

param max_prod{PROD} > 0 ;

che definisce dei limiti superiori sui valori assunti dallevariabili, potremmo modificare la dichiarazione dellevariabili come segue

var x{i in PROD} >= 0, <= max_prod[i] ;

Si noti come in questo caso abbiamo dovuto introdurrel’indice i appartenente (in) all’insieme PROD per potersiriferire alle componenti del parametro max_prod (si notianche l’uso delle parentesi quadre per richiamare talicomponenti).

– p. 17/54

Page 18: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Vincoli

Un singolo vincolo viene dichiarato nel seguente modo

subject to nome_vincolo : formula_vincolo ;

Una collezione di vincoli indicizzata su un insieme di indici I

viene dichiarata in questo modo

subject to nome_insieme_vincoli {i in I} : formula_vincoli ;

– p. 18/54

Page 19: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nell’esempio

subject to min_sostanza {i in SOST } : sum {j in PROD}quant_unit[i,j]*x[j] >= quant_min[i] ;

Notare l’uso di sum {j in J} per la definizione di unasommatoria con indice J .

– p. 19/54

Page 20: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Obiettivo

L’obiettivo si dichiara, in generale, nel modo seguente

maximize nome_obiettivo : formula_obiettivo ;

(nel caso si debba minimizzare si usa la parola chiaveminimize al posto di maximize).

Nel nostro esempio avremo

minimize total_cost : sum {j in PROD} cost_unit[j]*x[j] ;

– p. 20/54

Page 21: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

DIETA.MOD

Le scritte comprese tra ### sono commenti.

### INSIEMI ###

set PROD ;

set SOST ;

### PARAMETRI ###

param cost_unit{PROD} > 0 ;

param quant_unit{SOST ,PROD} >= 0 ;

param quant_min{SOST } > 0;

– p. 21/54

Page 22: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

### VARIABILI ###

var x{PROD} >= 0 ;

### VINCOLI ###

subject to min_sostanza {i in SOST } : sum {j in PROD} quant_unit[i,j]*x[j] >= quant_min[i] ;

### OBIETTIVO ###

minimize total_cost : sum {j in PROD} cost_unit[j]*x[j] ;

– p. 22/54

Page 23: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Dati (input) del problema

Una volta costruito il modello bisognerà inserire in un altrofile i valori di insiemi e parametri, ovvero i dati di inputdell’istanza del nostro problema.

Mentre il modello viene inserito in un file con estensione.MOD, i valori vengono inseriti in un file con estensione.DAT.

Il file DIETA.DAT dovrà contenere le definizioni degli insiemiPROD e SOST e i valori assegnati ai diversi parametri.

– p. 23/54

Page 24: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Istanza per l’esempio

Supponiamo di avere a disposizione i seguenti dati.L’insieme PROD contiene pasta, verdura, carne; l’insiemeSOST contiene vitamine, proteine; un’unità di pasta,verdura e carne costano rispettivamente 3,2 e 5; le quantitàminime di vitamine e proteine sono rispettivamente 8 e 6; lequantità di vitamine in un’unità di pasta, verdura o carnesono rispettivamente 0.3, 0.5 e 0.4; le quantità di proteinein un’unità di pasta, verdura o carne sono rispettivamente0.5, 0.2 e 0.7.

– p. 24/54

Page 25: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Definizione insiemi

Per la definizione di un insieme T contenente gli oggettit1, t2, . . . , tn si usa la seguente sintassi

set T := t1 t2 . . . tn ;

Nel nostro esempio avremo

set PROD := pasta verdura carne ;set SOST := vitamine proteine ;

– p. 25/54

Page 26: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Definizione parametri

Per quanto riguarda i parametri si usa la seguente sintassi

param a := valore_parametro ;

Per parametri vettore con insieme indice T = {t1, . . . , tn} siusa la seguente sintassi

param a :=t1 valore1

...tn valoren ;

– p. 26/54

Page 27: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Per parametri che sono array bidimensionali con primoinsieme di indici T = {t1, . . . , tn} e secondo insieme di indiciS = {s1, . . . , sm} si usa la seguente sintassi

param a :

s1 · · · sm :=

t1 val(t1, s1) · · · val(t1, sm)...

......

...tn val(tn, s1) · · · val(tn, sm) ;

– p. 27/54

Page 28: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nell’esempio

param cost_unit :=

pasta 3verdura 2carne 5 ;

param quant_min :=

vitamine 8proteine 6 ;

param quant_unit :

pasta verdura carne :=

vitamine 0.3 0.5 0.4

proteine 0.5 0.2 0.7 ;

– p. 28/54

Page 29: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

DIETA.DAT

### INSIEMI ###

set PROD := pasta verdura carne ;

set SOST := vitamine proteine ;

### PARAMETRI ###

param cost_unit :=

pasta 3verdura 2carne 5 ;

param quant_min :=

vitamine 8proteine 6 ;

param quant_unit :

pasta verdura carne :=

vitamine 0.3 0.5 0.4

proteine 0.5 0.2 0.7 ;– p. 29/54

Page 30: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Osservazione

Qui abbiamo inserito certi dati ma può capitare che lostesso tipo di problema debba essere risolto con altri dati(ad esempio il costo di certi prodotti può cambiare o tra lesostanze se ne possono aggiungere altre come icarboidrati).

AMPL è concepito in modo tale che queste modifichepossano essere fatte andando a modificare il solo file .DATmentre nessuna modifica deve essere fatta nel file .MOD.

– p. 30/54

Page 31: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Risoluzione del problema

È sufficiente inserire i seguenti comandi in corrispondenzadel prompt ampl:

ampl: reset;ampl: option solver cplex;ampl: model DIETA.MOD;ampl: data DIETA.DAT;ampl: solve;

(Si notino i ";" al termine di ogni comando).

– p. 31/54

Page 32: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nota bene-I

Il primo comando di reset non è sempre necessario se nonsi sono verificati cambiamenti (o, nel caso questi riguardinosolo i dati, ci si può limitare a un comando "reset data;")ma, dal momento che vengono sempre tenuti in memorial’ultimo modello e gli ultimi dati caricati, conviene usare ilreset per evitare che modello e dati attuali siano "sporcati"da informazioni precedenti.

– p. 32/54

Page 33: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nota bene-II

La seconda riga specifica che si richiede cplex (risolutore diproblemi di PL e PLI) come risolutore. L’esecuzione di cplexresta invisibile all’utente, ma vale la pena citare il fatto chel’utente ha la possibilità di scegliere tra alcune opzionicorrispondenti a diversi modi di funzionamento per ilrisolutore. Se nulla viene specificato, il risolutore funzionanella modalità di default.

– p. 33/54

Page 34: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nota bene - III

La terza riga specifica che il modello deve essere letto dalfile DIETA.MOD.

La quarta riga specifica che i dati devono essere letti dal fileDIETA.DAT.

Infine, la quinta riga comunica ad AMPL di prenderemodello e dati caricati, tradurli nell’input del risolutore equindi risolvere il problema.

A questo punto apparirà automaticamente il valore ottimodel problema (se, come in questo caso, esiste).

optimal solution; objective 45.263.....

– p. 34/54

Page 35: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Soluzione primale

Per visualizzare la soluzione primale si deve dare ilcomando

ampl: display x;

Apparirà la seguente risposta

x[*] :=carne 0pasta 7.36842verdura 11.5789;

– p. 35/54

Page 36: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Soluzione duale

Per visualizzare la soluzione duale è sufficiente mandare ilcomando "display" con il nome dei vincoli primalicorrispondenti.

ampl: display min sostanza;

Apparirà la seguente risposta

min sostanza [*] :=proteine 4.73684vitamine 2.10526;

– p. 36/54

Page 37: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Coefficienti di costo ridotto

Per visualizzarli basta usare il comando

ampl: display x.rc;

(l’estensione rc sta per reduced cost).

– p. 37/54

Page 38: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Range ottimalità termini noti

Per i termini noti dei vincoli, il comando

ampl: display min sostanza.down, min sostanza.current,min sostanza.up;

restituisce per ciascun termine noto il limite inferiore delrange in cui non cambia la base ottima attuale (down), ilvalore attuale del termine noto (current) e il limite superioredel range (up).

NB È necessario attivare una option di cplex:

ampl: option cplex options ’sensitivity’;

– p. 38/54

Page 39: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Range ottimalità coefficienti obiettivo

Il comando

ampl: display x.down, x.current, x.up;

restituisce per ciascun coefficiente nell’obiettivo il limiteinferiore del range in cui non cambia la base ottima attuale(down), il valore attuale del coefficiente (current) e il limitesuperiore del range (up).

– p. 39/54

Page 40: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Il file .RUN

Invece di digitare uno alla volta i comandi visti, possiamoanche scrivere un file DIETA.RUN in cui specifichiamo tuttiquesti comandi più eventualmente molti altri con costruttitipici dei linguaggi di programmazione (statement IF, cicli,eccetera), sui quali non ci soffermeremo qui.

– p. 40/54

Page 41: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

DIETA.RUN

reset;

option solver cplex;

model DIETA.MOD;

data DIETA.DAT;

solve;

display x;

display min_sostanza;

display x.rc;

display min_sostanza.down, min_sostanza.current, min_sostanza.up;

display x.down, x.current, x.up;

Una volta scritto il file DIETA.RUN possiamo eseguire tutti icomandi in esso contenuti semplicemente con il comando

ampl: include DIETA.RUN;

– p. 41/54

Page 42: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Altro esempio

È dato un insieme OGGETTI di oggetti a ciascuno deiquali è associato un peso e un valore. È inoltre dato unozaino a cui è associata una capacità, ovvero un pesomassimo che può essere trasportato all’interno dello zaino.Si vogliono inserire degli oggetti nello zaino in modo tale damassimizare il valore complessivo trasportato in esso,tenendo conto che il peso totale degli oggetti inseriti nonpuò superare la capacità dello zaino.

– p. 42/54

Page 43: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Modello matematico

Varibabili All’oggetto i associamo una variabile binariaxi, ovvero una variabile che può assumere solamente ivalori 0 e 1. Se xi = 0 l’oggetto i non viene inserito nellozaino, se xi = 1 l’oggetto viene inserito nello zaino.

Vincoli L’unico è quello che gli oggetti inseriti nello zainoabbiano un peso complessivo che non superi lacapacità dello zaino, ovvero

i∈OGGETTI

pesoi ∗ xi ≤ capacità.

Obiettivo È quello di massimizzare il valore degli oggettiinseriti nello zaino, quindi

max∑

i∈OGGETTI

valorei ∗ xi.– p. 43/54

Page 44: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Quindi ...

max∑

i∈OGGETTI valorei ∗ xi∑i∈OGGETTI pesoi ∗ xi ≤ capacità

xi ∈ {0, 1} i ∈ OGGETTI

– p. 44/54

Page 45: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

In AMPL

Abbiamo un solo insieme, l’insieme OGGETTI, che verràdichiarato nel modo seguente

set OGGETTI ;

Come parametri abbiamo due vettori di parametri, peso evalore, con insieme indice OGGETTI e il singolo parametrocap (capacità dello zaino). Tutti questi parametri sonopositivi e verranno dichiarati nel modo seguente

param peso{OGGETTI} > 0 ;param valore{OGGETTI} > 0 ;param cap > 0 ;

– p. 45/54

Page 46: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Continua

Vettore di variabili con insieme indice OGGETTI. Levariabili sono vincolate ad assumere i soli valori 0 e 1. Sipuò esprimere questo con la seguente dichiarazione dellevariabili

var x{OGGETTI} >= 0, <= 1, integer ;

In questo modo le variabili sono vincolate ad essere intericompresi tra 0 e 1 e quindi possono assumere i soli valori 0e 1.

Tuttavia, visto il largo uso che si fa nella PLI di variabilibinarie, AMPL prevede una dichiarazione speciale peresse:

var x{OGGETTI} binary ;– p. 46/54

Page 47: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Continua

Vincolo sulla capacità dello zaino:

subject to max_capac : sum{i in OGGETTI} peso[i] ∗ x[i] <=cap ;

Obiettivo:

maximize tot_valore : sum{i in OGGETTI} valore[i] ∗ x[i] ;

– p. 47/54

Page 48: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

ZAINO.MOD

### INSIEMI ###

set OGGETTI ;

### PARAMETRI ###

param peso{OGGETTI} > 0 ;

param valore{OGGETTI} > 0 ;

param cap > 0 ;

### VARIABILI ###

var x{OGGETTI} binary ;

– p. 48/54

Page 49: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

### VINCOLI ###

subject to max_capac : sum{i in OGGETTI} peso[i] ∗ x[i] <= cap ;

### OBIETTIVO ###

maximize tot_valore : sum{i in OGGETTI} valore[i] ∗ x[i] ;

– p. 49/54

Page 50: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Un’istanza

Consideriamo un caso in cui gli oggetti sono un libro, unaradio, un telefono e una macchina fotografica, con pesorispettivamente pari a 3, 7, 2 e 4 e valore 5, 8, 4 e 7. Lacapacità dello zaino è 11.

– p. 50/54

Page 51: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

ZAINO.DAT

### INSIEMI ###

set OGGETTI := libro radio telefono macchina_fotografica ;

### PARAMETRI ###

param peso :=

libro 3

radio 7

telefono 2

macchina_fotografica 4 ;

param valore :=

libro 5

radio 8

telefono 4

macchina_fotografica 7 ;

param cap := 11 ;

– p. 51/54

Page 52: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Risoluzione

ampl: reset;ampl: option solver cplex;ampl: model ZAINO.MOD;ampl: data ZAINO.DAT;ampl: solve;

– p. 52/54

Page 53: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Visualizzazione soluzione

Attraverso il comando

ampl: display x;

è possibile visualizzare la soluzione ottima.

Nell’esempio specifico essa è

x[*] :=

libro 1

macchina fotografica 1

radio 0

telefono 1 ;

con valore ottimo tot valore pari a 16.

– p. 53/54

Page 54: Linguaggi di modellizzazione - Dipartimento di Informatica …locatell/didattica/CorsoParma/ampl_nuovo-comp.pdf · Un esempio: problema dieta Sia dato un insieme PROD di prodotti

Nota bene

Anche in questo caso potremmo raccogliere tutti i comandiin un appposito file ZAINO.RUN.

– p. 54/54