GAMS

Insiemi

Gli insiemi sono gli elementi di base di un modello GAMS, corrispondenti esattamente agli indici nelle rappresentazioni algebriche dei modelli. L’esempio di trasporto qui sopra contiene solo una dichiarazione Set:

  Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ; 

L’effetto di questa dichiarazione è probabilmente evidente. Abbiamo dichiarato due insiemi e dato loro i nomi $i$ e $j$. Abbiamo anche assegnato i membri agli insiemi come segue:

$i =$ {Seattle, San Diego}

$j =$ {New York, Chicago, Topeka}.

Nota l’uso dei trattini per numerare i membri di un insieme. Nella notazione matematica e in altri linguaggi di programmazione questo verrebbe spesso fatto con le parentesi graffe.

Parametri

I parametri sono un modo di inserire dati in GAMS. In questo caso, i parametri $a$ e $b$ sono definiti sugli insiemi $i$ e $j$.

  Parameters a(i) capacity of plant i in cases / Seattle 350 San-Diego 600 / b(j) demand at market j in cases / New-York 325 Chicago 300 Topeka 275 / ; 

GAMS ti permette di inserire del testo esplicativo (mostrato in minuscolo) in tutto il tuo modello, mentre lo sviluppi. I vostri commenti sono automaticamente incorporati nel rapporto di output, nei punti appropriati.

Tabella

I dati possono anche essere inseriti in comoda forma di tabella. GAMS permette di inserire i dati nella loro forma di base – le trasformazioni sono specificate algebricamente.

  Table d(i,j) distance in thousands of miles New-York Chicago Topeka Seattle 2.5 1.7 1.8 San-Diego 2.5 1.8 1.4 ; 

Scalare

Le costanti possono essere semplicemente dichiarate come scalari:

  Scalar f freight in dollars per case per thousand miles /90/ ; 

Manipolazione dei dati

Quando i valori dei dati devono essere calcolati, prima si dichiara il parametro (cioè gli si dà un simbolo e, opzionalmente, un indice), poi si dà la sua formulazione algebrica. GAMS farà automaticamente i calcoli.

  Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ; 

Variabili

Le variabili di decisione sono espresse algebricamente, con i loro indici specificati. Da questa forma generale, GAMS genera ogni istanza della variabile nel dominio: LIBERO, POSITIVO, NEGATIVO, BINARIO o INTEGRO. La variabile obiettivo (z, qui) è semplicemente dichiarata senza indice.

  Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ; 

Equazioni

Le equazioni delle funzioni oggettive e dei vincoli sono prima dichiarate dando loro un nome. Poi vengono descritte le loro formule algebriche generali. GAMS ora ha abbastanza informazioni (dai dati inseriti sopra e dalle relazioni algebriche specificate nelle equazioni) per generare automaticamente ogni singola dichiarazione di vincolo – come si può vedere nel rapporto di output qui sotto. Un ampio set di strumenti permette di modellare qualsiasi espressione che possa essere enunciata algebricamente: aritmetica, indicizzazione, funzioni e registro di gestione delle eccezioni (ad esempio i costrutti if-then-else e such-that).

=E= indica ‘uguale a’
=L= indica ‘minore o uguale a’
=G= indica ‘maggiore o uguale a’

  Equations cost define objective function supply(i) observe supply limit at plant i demand(j) satisfy demand at market j ;cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;supply(i) .. sum(j, x(i,j)) =l= a(i) ;demand(j) .. sum(i, x(i,j)) =g= b(j) ; 

Dichiarazione del modello

Al modello viene dato un nome unico (qui, TRANSPORT), e il modellatore specifica quali equazioni devono essere incluse in questa particolare formulazione. In questo caso abbiamo specificato ALL che indica che tutte le equazioni fanno parte del modello. Questo sarebbe equivalente a MODELLO TRASPORTI /COST, SUPPLY, DEMAND/ . Questa selezione di equazioni permette di formulare diversi modelli all’interno di un singolo file di input GAMS, basati sugli stessi dati o su dati diversi.

  Model transport /all/ ; 

Dichiarazione solve

La dichiarazione solve (1) dice a GAMS quale modello risolvere, (2) seleziona il solutore da usare (in questo caso un solutore LP), (3) indica la direzione dell’ottimizzazione, o MINIMIZZARE o MASSIMIZZARE, e (4) specifica la variabile obiettivo.

  Solve transport using LP minimizing z ; 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.