Sei sulla pagina 1di 3

Riferimento alla sintassi AMPL

Fondamenti di Ricerca Operativa

Riferimento alla sintassi AMPL


Due le:

.mod .dat

simbolico, cio senza dati numerici


che vogliamo risolvere

le: contiene la descrizione del problema in un programma matematico

puramente

le: contiene tutti i dati numerici che descrivono la specica

istanza

del problema

Model le
Contiene denizione di

indici, parametri, variabili di decisione, funzione obiettivo, vincoli.

Ogni entit in AMPL deve avere un nome UNICO.

1.

Insiemi degli indici:


Esempio: se la variabile cui

contengono gli indici su cui variabili e parametri sono deniti.

in

Rn ,

per un dato

n,

l'insieme

conterr tutti gli indici per

denita (ad esempio i naturali da 1 a 5). Il contenuto di

I non viene specicato

nel

le di modello. Keyword: Sintassi:

set

set I;
2.

Parametri:
Keyword:

tutto ci che fa parte del problema ma non una variabile di decisione. .

param

Se il parametro uno scalare:

param myScalar.
Se un vettore o una matrice, necessario specicare gli insiemi di indici su cui corre:

param myVector{I}; param myMatrix{I,J};


Nell'ultimo caso, 3.

myMatrix

viene denita per ogni indice nel prodotto cartesiano

I J.

Variabili di decisione.
Sintassi:

Keyword:

var

Gli indici su cui la variabile denita vengono specicati come per i parametri.

var myVar{I};
Positivit, negativit, vincoli di box (ossia lower e upper bound), integralit o binariet della variabile vengono imposti nel seguente modo:

var var var var var

myVar{I} >= 0; myVar{I} >= 5, <= 18; myVar{I,J} integer; myVar{I,J} binary; myVar{I,J} >= 0, integer;

Documento preparato da S. Coniglio. e C. Iuliano

Riferimento alla sintassi AMPL


4.

Fondamenti di Ricerca Operativa

Funzione obiettivo.
Keyword: Esempio:

minimize

maximize

minimize myFunction:

sum{i in I} myVar[i]*myVector[i];

NOTA: I  :
degli stessi.

precedono, sia per vincoli che per funzione obiettivo, la denizione algebrica

NOTA:
esempio

buona regola, se vogliamo scrivere un modello di

basso livello,

ossia simile

alla sua denizione algebrica, utilizzare lettere MAIUSCOLE per gli insiemi di indici, per

J,

minuscole,

per esempio

nulla vieta l'uso di, ad esempio, 5.

j, per gli indici j in I o i in J.


.

che su esso corrono. SI NOTI CHE

Vincoli.

Keyword:

subject to

possibile ripeterla prima di ogni vincolo o solo una volta all'inizio di questi. Se vogliamo esprimere una famiglia di vincoli, ossia un insieme di vincoli in biiezione con un insieme di indici, tale insieme viene specicato tra vincolo stesso va indicato con l'usuale sintassi esso corre. Esempio:

{ }

dopo il nome del vincolo. Lo

specico indice appartenente all'insieme che verr utilizzato nella denizione algebrica del

j in J, dove j l'indice e J l'insieme su cui

subject to myConstraint{j in J}:

sum{i in I} myMatrix[i,j]*x[i] >= 0;

Data le
1.

Insiemi degli indici. Parametri scalari:

Esempio:

set I := Gennaio Febbraio Marzo; set I := 1 .. 10; param myScalar := 100;

2.

3.

Parametri vettoriali:
param myVector1 := Gennaio 12 Febbraio 31 Marzo 51;
NOTA:

Gennaio, Febbraio, Marzo

sono

indici !

4. Parametri vettoriali, denendo due vettori alla volta:

param: myVector1 myVector2 := Gennaio 12 0.1 Febbraio 31 0.15 Marzo 51 0.98;


NOTA: osservare la presenza dei  :.

Documento preparato da S. Coniglio. e C. Iuliano

Riferimento alla sintassi AMPL


5. Matrici:

Fondamenti di Ricerca Operativa

param myMatrix: Gennaio Febbraio Marzo

Rossi 0.12 0.51 0.61

Bianchi := 0.31 0.41 0.98;

NOTA: osservare la diversa posizione dei  : rispetto al caso precedente.

Chiamare AMPL
Con MS Windows possibile: fare doppio click su digitare

cmd

cmd.exe,

ampl.exe,

oppure premere [WINDOWS]+r,

navigare no alla cartella di AMPL, ad esempio con

c: cd USER_DATA cd ampl ampl


Nota: il comando

cd ha semantica change directory.

seguito dal nome della directory, contenuta

in quella corrente, a cui si vuole accedere. NOTA: la seconda opzione preferibile: il prompt di comandi (cmd.exe) tiene in memoria i comandi digitati

anche all'interno di AMPL.

Se dovete chiudere AMPL e farlo ripartire, potete

riottenere i comandi digitati in precedenza mediante i tasti FRECCIA SU e FRECCIA GI.

Caricare .mod e .dat, chiamare il risolutore


Sintassi di chiamata:

model myModel.mod; data myModel.dat; option solver cplex; solve; display x;


La stringa

option solver cplex

obbliga AMPL ad utilizzare il risolutore CPLEX (di ILOG) A dierenza di MINOS, CPLEX permette di risolvere

anzich MINOS, chiamato di default.

ecientemente problemi di programmazione lineare intera (oltre che continua). Tramite il comando

display x;

display

la stringa

stampa il valore della variabile

in corrispondenza della soluzione trovata. Nel caso ci fossero

pi variabili di decisione, ad esempio

display x; display y;

y,

usare semplicemente

File .run
consigliabile, per comodit, creare un le

.run

(ad esempio

myProblem.run)

contenente i

comandi di chiamata sopra indicati. Sar possibile trasmettere tali comandi ad AMPL mediante

ampl myProblem.run

Documento preparato da S. Coniglio. e C. Iuliano