Estratto del documento

Comandi AMPL

File.mod

AMPLFile.mod serve per scrivere il modello nel modo generale. In questo file si dichiarano e effettuano le definizioni di insiemi e parametri. In AMPL basta scrivere il comando: model <PATH> \nome_file.mod

File.run

File.run è un file che contiene i comandi da dare, senza doverli digitare più volte. In genere il primo comando è che cancella i dati relativi ad un modello precedente: include <PATH> \nome_file.run

File.dat

File.dat contiene i dati del problema. Nel file dei dati si effettuano le dichiarazioni: data <PATH> \nome_file.dat

Insiemi

Gli insiemi si creano nel file.mod mediante l’istruzione:

  • set Prodotti;
  • set Risorse;

Con la quale si creano due insiemi di un numero imprecisato di elementi.

Parametri

Per definire i parametri si usano le seguenti istruzioni:

  • param q_max{Risorse} >= 0; (Definisce un vettore di parametri con tante componenti quanti sono gli elementi dell’insieme Risorse e definisce le quantità massime disponibili di ciascuna risorsa; il >=0 specifica che i valori immessi devono essere non negativi, AMPL eseguirà autonomamente il controllo sui dati);
  • param richiesta{Risorse, Prodotti} >= 0; (Definisce una matrice di parametri con tante righe quanti sono gli elementi di Risorse e quante colonne quanti sono gli elementi di Prodotti, specificando per ogni prodotto la quantità di risorsa necessaria alla sua realizzazione);
  • param prezzo{Prodotti} >= 0; (Definisce un vettore di parametri con tante componenti quanti sono gli elementi di Prodotti specificando il prezzo per ogni prodotto).

Esempio di problema

F.O.= maximize profitto: sum{i in Prodotti} prezzo[i]*x[i];

Vincoli = s.t. vincolo_risorsa {j in Risorse}: sum{i in Prodotti} richiesta[j,i]*x[i] <= q.max[j]; (Con questo vincolo si definiscono tanti vincoli quanti sono gli elementi di Risorse).

Dichiarazione di insiemi

La dichiarazione di un insieme generico va fatta nel file.mod: set NomeInsieme;

L’assegnazione di un insieme generico va fatta nel file.dat: set NomeInsieme := e1 e2 e3; In questo caso l’insieme ha 3 elementi.

Si possono definire anche insiemi:

  • Ordinati: set NomeInsieme ordered;
  • Numerici: set NomeInsieme := 1 ... N; (Tutti i numeri interi tra 1 e N)
  • Distanti: set NomeInsieme := 1 ... N by p; (Tutti i numeri interi tra 1 e N distanti tra loro p numeri)
  • Ordinati e ciclici: set NomeInsieme circular;

La dichiarazione per gli insiemi numerici è di fatto un’assegnazione quindi non va ripetuta nel file.dat.

Operatori tra insiemi generici

  • A union B: insieme di elementi che stanno in A o in B;
  • A inter B: insieme di elementi che stanno sia in A che in B;
  • A within B: A sottoinsieme di B;
  • A diff B: insieme di elementi che stanno in A ma non in B;
  • A symdiff B: insieme di elementi che stanno in A o in B ma non in entrambi;
  • card(A): numeri di elementi che stanno in A.

Operatori per un insieme ordinato A

  • first(A): primo elemento di A;
  • last(A): ultimo elemento di A;
  • next(a,A): elemento di A dopo a;
  • prev(a,A): elemento di A prima di a;
  • next(a,A,k): k-esimo elemento di A dopo a;
  • prev(a,A,k): k-esimo elemento di A prima di a;
  • ord(a,A): posizione di a in A;
  • ord0(a,A): come ord(a,A) ma restituisce 0 se a non è in A;
  • member(k,A): elemento di A in k-esima posizione.

Insiemi multidimensionali

Nel file.mod: set INSIEME dimensione p; Si usa per indicare che l’insieme INSIEME è costituito da p-uple ordinate, ovvero i suoi elementi sono della forma (a1,a2,...ap).

Un altro modo per creare insiemi multidimensionali è l’utilizzo del prodotto cartesiano che si indica con cross. Esempio:

set TERNE := A cross B cross C; che indica l’insieme delle terne ordinate (a,b,c) con a appartenente ad A, b a B e c a C.

L’operazione inversa del prodotto cartesiano è setof: esempio precedente per ottenere A, B e C:

  • set A := setof{(i,j,k) in TERNE} i;
  • set B := setof{(i,j,k) in TERNE} j;
  • set C := setof{(i,j,k) in TERNE} k;

Si possono definire insiemi anche in modo implicito, senza specificarne il nome:

  • {A,B}{a in A, b in B} Sono due espressioni equivalenti per definire il prodotto cartesiano tra A e B.

Un altro esempio: {a in A: costo[a]>=5} (sta ad indicare tutti gli elementi di A che hanno un costo >= 5, con costo=parametro indicizzato sull’insieme A).

Parametri

I parametri rappresentano i dati del problema. Una volta assegnati (nel file.dat) non vengono più modificati dal solutore. Un parametro deve essere dichiarato nel file.mod e assegnato nel file.dat. Esempio: per dichiarare il parametro T nel file.mod: param T;

Ma è possibile dichiarare anche vettori e matrici di parametri. Esempio:

  • param costi{PROD};
  • param domanda{PROD,ZONA,1...T}; (Definisce un parametro a 3 dimensioni domanda, indicizzato dagli PROD,ZONA ed all’insieme dei numeri interi che vanno da 1 a T).

Esempio di assegnazione nel file.dat:

  • param T := 2;
  • param costi := p1 5 p2 4;
  • param prezzo : z1 z2 := p1 2 7 p2 5 9;
  • param domanda := OPPURE param : domanda := [*,*,1] : z1 z2 := p1 z1 110 P1 10 15 p1 z2 115 P2 12 22;

Scrivere i dati in colonna è solo una questione di leggibilità. In AMPL non sono richieste particolari formattazioni. I ‘:’ sono obbligatori se si assegnano valori a due o più vettori di parametri monodimensionali indicizzati sullo stesso insieme.

Anteprima
Vedrai una selezione di 4 pagine su 13
Riassunto dei comandi di AMPL Pag. 1 Riassunto dei comandi di AMPL Pag. 2
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Riassunto dei comandi di AMPL Pag. 6
Anteprima di 4 pagg. su 13.
Scarica il documento per vederlo tutto.
Riassunto dei comandi di AMPL Pag. 11
1 su 13
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche MAT/09 Ricerca operativa

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Ludo.97 di informazioni apprese con la frequenza delle lezioni di Ricerca operativa e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Grani Giorgio.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community