INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D...

27
1 INTRODUCTION TO GAMS 1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table of Contents 1. Introduction ............................................................................................................................. 2 2. GAMS Installation .................................................................................................................. 2 3. GAMS Operation .................................................................................................................... 2 4. Examples ............................................................................................................................... 11 4.1. Algebraic Equation ........................................................................................................... 11 4.1.1. Background and GAMS Code ................................................................................... 11 4.1.2. What's Going On in the Model? ................................................................................ 12 4.2. Least Squares Parameter Estimation .............................................................................. 15 4.2.1. Background and GAMS Code ................................................................................ 15 4.2.2. What's Going On in the Model? ................................................................................ 16 5. A Brief Overview of the GAMS Language .......................................................................... 17 5.1. Model Structure ................................................................................................................ 17 5.2. Sets ................................................................................................................................. 18 5.3. Scalars, Parameters and Tables ...................................................................................... 20 5.4. Variables......................................................................................................................... 21 5.5. Equations ........................................................................................................................ 22 5.6. Assembling a Model....................................................................................................... 23 5.7. Solving a Model ............................................................................................................. 24 5.8. Model Output ................................................................................................................. 24 5.9. IF-ELSE Operator .......................................................................................................... 26 References .................................................................................................................................. 27 1 This Introduction to GAMS Modeling benefited from research by Andrey G. Savitsky. The use and distribution of GAMS is made possible by the GAMS Development Corporation (www.gams.com ) and it greatly appreciated.

Transcript of INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D...

Page 1: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

1

INTRODUCTION TO GAMS1

Daene C. McKinney

CE385D Water Resources Planning and Management

The University of Texas at Austin

Table of Contents 1. Introduction ............................................................................................................................. 2

2. GAMS Installation .................................................................................................................. 2

3. GAMS Operation .................................................................................................................... 2

4. Examples ............................................................................................................................... 11

4.1. Algebraic Equation ........................................................................................................... 11

4.1.1. Background and GAMS Code ................................................................................... 11

4.1.2. What's Going On in the Model? ................................................................................ 12

4.2. Least Squares Parameter Estimation .............................................................................. 15

4.2.1. Background and GAMS Code ................................................................................ 15

4.2.2. What's Going On in the Model? ................................................................................ 16

5. A Brief Overview of the GAMS Language .......................................................................... 17

5.1. Model Structure ................................................................................................................ 17

5.2. Sets ................................................................................................................................. 18

5.3. Scalars, Parameters and Tables ...................................................................................... 20

5.4. Variables ......................................................................................................................... 21

5.5. Equations ........................................................................................................................ 22

5.6. Assembling a Model....................................................................................................... 23

5.7. Solving a Model ............................................................................................................. 24

5.8. Model Output ................................................................................................................. 24

5.9. IF-ELSE Operator .......................................................................................................... 26

References .................................................................................................................................. 27

1 This Introduction to GAMS Modeling benefited from research by Andrey G. Savitsky. The use and distribution of

GAMS is made possible by the GAMS Development Corporation (www.gams.com) and it greatly appreciated.

Page 2: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

2

1. INTRODUCTION

The General Algebraic Modeling System (GAMS) facilitates the creation of mathematical

models, particularly optimization models, and allows the modeler to build models using the same

logical structures as the mathematical equations that need to be solved. In this section, the river

basin model described in Annex 3 will be described using the GAMS language to allow users to

understand the model and to develop additional models. This section should be supplemented by

the official GAMS Guide and Tutorials (Brooke et al., 2006), the monograph on optimization

models for water and energy management (McKinney and Savitsky, 2006), and the GAMS

website (www.gams.com).

2. GAMS INSTALLATION

A. Run setup.exe: Run the file “setup.exe” directly from the CD. Use the Windows Explorer to

browse the CD and double click on the file “setup.exe”. The setup program will prompt you

for the name of the directory in which to install GAMS. Accept the default choice which the

install program offers. Then the GAMS software will be installed.

B. License file: You will be prompted for a license file during the installation. You do not have

one, so choose „No‟ when asked if you wish to copy a license file. GAMS will function in

demonstration mode and will only solve small problems.

3. GAMS OPERATION

A. Start GAMS: Start GAMS by selecting “Start All Programs GAMS GAMSIDE”

from the Windows Desktop

Page 3: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

3

Figure 1. Starting GAMS.

B. Create new GAMS project: To create a new project in GAMS, choose “File Project

New project” from the GAMSIDE.

Figure 2. Creating a new project in GAMS.

Navigate from “My Documents” to the “C\:” drive. Create a new directory by pressing the

Page 4: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

4

“folder” icon . Name the new directory “C:\Example”. Double click on the “Example”

folder. Type “Eq1” in the “File name” box and press “Open”.

Figure 3. Naming a new project in GAMS.

The GAMS window should now show the new Shapley.gpr project window .

Figure 4. Naming a new project in GAMS.

Page 5: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

5

C. Create a new GAMS code file: To create a new GAMS code file, select “File New”

from the GAMSIDE. This will create the file “Untitled_1.gms” in the “C:\Example”

directory”. We will then copy the “EQ1” GAMS code into this file from a text file.

Figure 5. Creating a new GAMS code file.

D. Open GAMS code file: Select “File Open”. Select “Text files” as the “Files of type”

type. Navigate to the directory where you stored the and open the file “EQ1.txt”. Click on

this files. Now it is automatically copied to GAMS.

Figure 6. Opening the EQ1 text file.

E. Tabs and Files: Now the window shows that you have two files open. This is indicated by

the two “Tabs” along the top of the window in GAMS. The first tab displays the file

“Eq1.txt”. This file, which we just opened, is shown in the active window. The second tab

displays the “untitled_1.gms” file that we recently created. This is the GAMS Code file that

Page 6: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

6

we are creating. To move back and forth between the two files, simply click on the

appropriate tab at the top of the window.

Figure 7. Multiple files open in GAMS.

F. Copy text file: Now we will copy all of the text from the “Eq1.txt” file to the

Untitled_1.gms” file. Click on the “Eq`.txt” tab. Click the cursor in the “Eq1.txt” file

window. Select “Edit Select All”. The entire file should become highlighted. Select

“Edit Copy”.

Figure 8. Selecting GAMS code from text file.

Page 7: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

7

G. Paste into GAMS Code file: Now we will paste the text we just copied into the

“Untitled_1.gms” file. Click the “Untitled_1.gms” tab. Click the cursor in the

“Untitled_1.gms” file window. Select “Edit Paste”. Now the text is pasted into the file.

Figure 9. Pasting GAMS code into the “Untitled_1.gms” file.

H. Save GAMS Code file: Now we will save the new GAMS code file “Untitled_1.gms” in the

new project directory “C:\Example” as “Eq1.gms”. Select “File Save As”. Navigate to

the directory you created earlier: “C:\Example”. Name the file “Untitled_1.gms” as

“Eq1.gms”. Save the file “Eq1.gms”.

Figure 10. Saving the new GAMS file “Eq1.gms”.

Now the files “Eq1.txt” and “Eq1.gms” are displayed in the window.

Page 8: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

8

Figure 11. Window showing “Eq1.txt” and “Eq1.gms”.

I. Run the model: Now we are ready to run the Shapley GAMS model. Press the red arrow

button at the top of the GAMSIDE window. Alternatively, you can select “File Run”

from the main menu

Figure 12. Running the GAMS model.

J. GAMS Model Results: The results should appear as below. There are two windows

displayed by GAMS now. One is titled “No active process” and this window displays all of

Page 9: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

9

the control commands and information that were produced by GAMS when it ran the model.

The most important information is the line that reads “Optimal Solution. …”, which indicates

to us that the model was solved successfully.

Figure 13. Control screen from running the GAMS model.

K. Viewing the GAMS model results: Near the bottom of this window, there is a line that

reads: “Putfile result C:\Example\Eq1.txt”. The file “Eq1.txt” now contains the GAMS

model results. Double clicking on this line will open the results file automatically in another

window.

Figure 14. Viewing GAMS model results.

Page 10: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

10

L. Rerunning the model: You can make modifications to the Eq1 GAMS model and rerun the

model to see the results of your changes. Select the “Eq1.gms” tab. Make your changes to

the GAMS code in that window. Press the red arrow button at the top of the

GAMSIDE window or select “File Run” from the main menu. Once the model is

finished running, you will see the same window as in Figure 12 and you can again double

click on the line with the name of the output file to display the new results. When you do

this you will be asked if you want to “Reload the Results”. Select “Yes”.

Figure 14. Rerunning the model.

or

Figure 15. Reloading the results.

M. Exiting and Restarting GAMS: Select: “File Exit” to quit the GAMS program. When

you restart GAMS, you will be returned to the place where you exited the program.

Page 11: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

11

4. EXAMPLES

4.1. Algebraic Equation

4.1.1. Background and GAMS Code

The problem is to find the roots of the following nonlinear equation:

0)10010()101010( 2 xxx

One can see the roots in the following graph:

-150

-100

-50

0

50

100

150

200

250

300

350

-5 -4 -3 -2 -1 0 1 2 3 4 5

x

f1(x

), f

2(x

), f

1(x

)-f2

(x)

f1(x)

f2(x)

f1(x)-f2(x)

10x2+10x +10

-10x +100

10x2+10x +10-(-10x+100)

The GAMS code is:

VARIABLES x, e, obj;

EQUATIONS Eq1, Objective;

Eq1.. e =E= 10*x*x+10*x+10-(-10*x+100);

Page 12: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

12

Objective.. obj =E= e*e;

MODEL Eq /ALL/

SOLVE Eq USING NLP MINIMIZING obj;

FILE res /Eq1.txt/

PUT res;

put "Solution x = ", put x.l, put /;

The steps to enter this model into the GAMS/IDE are shown in the file Introduction to

GAMS.pdf

4.1.2. What's Going On in the Model?

A. VARIABLES

Variables can be zero-dimensional or multidimensional. The dimensions are determined by the

availability and number of indices. The declaration of variables is based on the following

principle. For example, consider the variables from the nonlinear equation model presented

above:

VARIABLES x, e, obj;

These are all aero-dimensional (scalar) variables. All these variables are allowed to take on any

vales, positive or negative. Variables are included in equations along with parameters and

constants. Variables are always defined in the solution process.

B. EQUATIONS

The block of equations in GAMS models consists of two parts:

1. Declaration

The syntax of declaring equation names is as follows:

EQUATION name comment ;

EQUATION is a keyword which must appear before the name of each equation if there is

semicolon at the end of the line. It is used only once at the beginning of a list of equation

names. The name of an equation may include no more than 10 symbols and must always begin

with a letter. Consider the equation declaration in the model above

EQUATIONS Eq1, Objective;

This declares two scalar equations, the first equation is named Eq1 and the second objective.

Page 13: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

13

2. Definition

The definition of equations is where the mathematical form of the model is defined. The syntax

for defining equations in GAMS is as follows:

name.. expression;

name is the name of the equation as previously defined in the list of declared equation names,

then two periods “..” follow separating the name of the equation and the mathematical expression

(algebraic statement) of the equation. The equation must contain a relation operator, such as:

=E= (equality)

=G= (greater than or equal to)

=L= (less than or equal to)

Again, consider the equations from the model above

Eq1.. e =E= 10*x*x+10*x+10-(-10*x+100);

Objective.. obj =E= e*e;

C. MODEL

After all the VARIABLES and EQUATIONS of a model have been declared, a system (called a

MODEL) can be formed from the equations and given a name. When all the declared equations

are included in the model, the syntax of declaring the model is as follows:

MODEL name comment /ALL/;

For example:

MODEL Eq /ALL/

The model is named "Eq", and the keyword ALL means that the model includes all of the

equations.

D. SOLVE

Once a model has been defined, the next step is to solve it. This is ordered by including a

SOLVE statement in the model. Consider the example of the river system management model in

Section 3.3

SOLVE Eq USING NLP MINIMIZING obj;

The SOLVE statement contains 6 parts:

1. The keyword SOLVE;

2. The previously defined name of the model (Eq);

3. The keyword USING;

Page 14: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

14

4. The type of “solver” to use in the solution (NLP in this case since the model is nonlinear);

5. The keyword MINIMIZING; and

6. The name of a scalar variable (obj in this case) to be optimized.

E. OUTPUT

GAMS allows writing information about the model and its solution to text files. In addition, a

text output file “model_name.LST” will always be produced. This file is created automatically,

but its format is not entirely useful for analysis purposes. The following is the full syntax for

defining output text files

FILE pointer comments / filename /

where FILE is a keyword used to define files;

pointer is a pointer to direct output to the external text file filename;

filename is an external text file which receives the output.

Consider the example above

FILE res /Eq1.txt/

where res is the pointer to the output file; and

Eq1.txt is the output file.

The PUT operator is used to write information into the output file. Consider the example:

PUT res;

put "Solution x = ", put x.l, put /;

This example shows how the pointer res is associated with the output file Eq1.txt. In the first

line, the output is directed into this file. In the next line, some text and the value (level) of the

variable x is inserted into the file.

Page 15: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

15

4.2. Least Squares Parameter Estimation

4.2.1. Background and GAMS Code

Independent variables (x1, x2, x3) are related to the dependent variable (y) through the following

function

2)(

23

21

)()()()( tye

tx

C

tx

BtAxty

where A, B, and C are unknown coefficients. Data have been observed at times t on the variables

x1(t), x2(t), x3(t), and y(t). The measured values of y are designated as )(ˆ ty The residual between

the model value and the observed value is

)(ˆ)()( tytyte

Numerical values of the coefficients are to be be determined by minimizing the squared residuals

28

1

28

1

)(ˆ)()( tt

tytyteMinimize

In this case we need to introduce the notion of sets and parameters into the GAMS model. Sets

are a way of defining indices in GAMS and we need one for time in this problem. Consider the

following model developed in the GAMS language:

SETS t / 1, 2, 3, 4, 5, 6, 7, 8 /;

PARAMETER x1(t) /1 2, 2 3, 3 3, 4 3, 5 5, 6 5, 7 6, 8 7/;

PARAMETER x2(t) /1 30, 2 60, 3 70, 4 60, 5 80, 6 90, 7 100, 8 100/;

PARAMETER x3(t) /1 1, 2 6, 3 7, 4 3, 5 5, 6 9, 7 8, 8 17/;

PARAMETER y_hat(t) /1 10, 2 20, 3 30, 4 20, 5 40, 6 50, 7 60, 8 70/;

VARIABLES

a, b, c, y(t), e(t), obj;

EQUATION mod(t), residual(t), objective;

mod(t).. a*x1(t)*x1(t)-b/x3(t)-c/x2(t)+EXP(-y(t)*y(t)) =E= y(t);

residual(t).. e(t) =E= y(t)-y_hat(t);

objective.. obj=E=sum(t,power(e(t),2));

MODEL Leastsq / ALL /;

SOLVE Leastsq USING NLP MINIMIZING obj;

FILE res /Eq2.txt/

PUT res;

Page 16: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

16

PUT "t x1(t) x2(t) x3(t) y(t) y_hat(t)"/;

LOOP(t, PUT t.TL, x1(t), x2(t), x3(t), y.L(t), y_hat(t)/;);

PUT /" a b c"/;

PUT a.L, b.L, c.L;

The steps to enter this model into GAMS and solve it are as follows:

1. Use the same subdirectory “Example” on the “c:/” drive of your computer as you created in

the previous example.

2. In GAMS, create a new project named “Eq2”.

3. Within this new project create a new GAMS file named “Eq2.gms”.

4. Open the file EQ1.txt and copy and paste the GAMS code into the new file “Eq2.gms” and

save it in the "Example" directory.

5. Run the "Eq2.gms" model to ensure that it is working and examine the results file "Eq2.txt".

4.2.2. What's Going On in the Model?

A. SETS

SETS, the equivalent of indices in a typical programming language, are used to make

connections between variables and equations in models. In the model above, a SET is used to

denote the number of the measurements:

SETS t / 1, 2, 3, 4, 5, 6, 7, 8 /;

B. PARAMETERS

Digital data are contained in arrays (zero, scalar, or multidimensional matrices called parameters

in GAMS). The SETs, described above, can play the role of indices for these arrays. To declare

an array to contain data values, we use the functional words:

SCALAR (zero-dimensional),

PARAMETER (one-dimensional), and

TABLE (multidimensional).

Parameters are declared in a free format with the following general structure

Parameter a(i,j) input-output matrix

where Parameter data-type-keyword (required)

Page 17: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

17

a identifier (required)

(i,j) domain list (optional)

input-output matrix text (optional)

Scalars are defined similarly but without the domain list. Tables are simply multi-dimensional

versions of parameters. For example, in the model above parameters are used to store the

measurements:

PARAMETER x1(t) /1 2, 2 3, 3 3, 4 3, 5 5, 6 5, 7 6, 8 7/;

C. LOOPS

The LOOP operator is often used with the PUT operator for printing out and displaying

information on the screen or in files. The operator has the following syntax:

LOOP (control_ area operator [; operator]);

For example

LOOP(t, PUT t.TL, x1(t), x2(t), x3(t), y.L(t), y_hat(t)/;);

5. A BRIEF OVERVIEW OF THE GAMS LANGUAGE

5.1. Model Structure

GAMS models have a structure shown in Table 1. Using the GAMS Integrated Design

Environment (GAMS-IDE, a graphic user interface for creating and running GAMS models), a

GAMS model is prepared in text form in a file with the extension “.gms”. During model

execution, information is displayed on the screen in the GAMS interface related to the

compilation and solution characteristics and progress. The results of the model and

computations are automatically sent to a special "LIST" file with the same name as the model

file, but with an extension “.lst”. In addition, as discussed below, the user can program output to

be directed to separate output files.

Page 18: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

18

Table 1. Structure of a GAMS Model.

1. SETS Structures consisting of indices or names

2. DATA

SCALARS (zero-dimentional), PARAMETERS (one-dimentional), and

TABLES (multi-dimensional)

Determination of values of input parameters

3. VARIABLES

Variables or arrays of variables

Declaration with assigning a type of variable

Declaration of limits for possible changes, initial level

4. EQUATIONS

Equations or complexes and arrays of equations (includes both declaration

and definition)

5. MODEL Model declaration (which equations to include)

6. SOLVE Method of solution (which algorithm to use)

7. OUTPUT Output of information to files

5.2. Sets

SETS are a major item in the GAMS language. SETS can be used to construct connections

between variables and equations in models. SETS are the equivalent of indices in a typical

programming language. Numerical values or text values can be used as indices, e.g., 1, 2, 3…

can be used or “first”, “second”, etc. A set name must begin with either a letter or a digit, but the

next symbol can be a letter, digit or the marks “+” and “-”. For example:

SET t Months /Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec/;

where the set is named “t”, the word “Months” is descriptive text to identify the purpose of the

set, and the values contained between the “/” symbols are the indices or elements of the set. The

elements in a SET are numbered sequentially or instance here, Feb is second element and Sep is

the ninth element of the set. Elements of a set are separated by commas.

LAG and LEAD operators are used to relate an element of a set with the next or preceding

Page 19: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

19

element of the set. In circular LAG and LEAD operators (++, --), after the final element of the

set, the first is repeated again. Sometimes this can be useful in reservoir modeling, especially if

one wants the beginning values of variables in a time period (say, one year) to be the same as the

ending values. Linear LAG and LEAD operators (+, -) are very convenient for modeling time

periods that are not cycled. For example, if the initial value of reservoir storage over a time

period is not to be identical to the final value. It is unlikely that the initial storage of a large,

multi-year storage reservoir will be identical to its ending storage.

As an example, consider the basic reservoir volume balance equation

1_

,...21

tRQSbeg

TtRQSS

tt

tttt

where St and St-1 are the storage in a reservoir at the end and beginning of a time period,

respectively, Qt is the inflow to the reservoir during period t, and Rt is the reservoir release

during period t. Here we can write the equation in general, for all elements of the set t=1,2,…,

using a single equation and making special provision for the first month:

S(t) =E= beg_S$(ord(t) EQ 1) + S(t-1)$(ord(t) GT 1) + Q(t) - R(t);

If we do not want the starting and ending storage values to be identical, we need to specify a

starting value for the previous month‟s storage when we write the equation for January, since t-

1 is undefined when the equation is written for t = 1 (i.e., Jan). In this case, when t = 1, the

initial storage (beg_s) of the reservoir is used in the balance equation, but when the index t > 1

the variable storage is used in the calculation. The ordinal (ord) operator is used in this equation

to return an ordinal of t for a specific instance of the equation.

In the equation above, we have used the conditional ($) operator which provides the ability

modify equations according to logical conditions. The general format of the operator is

item$(condition)

Page 20: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

20

This is understood to mean "fulfill the item if the condition is true". So in our reservoir storage

equation example, the “$” operator is operating on the conditions “ord(t) EQ 1” and “ord(t)

GT 1”. Thus, in the first case, if t takes on the value of the first element in the set, the value

beg_S is added to the equation, otherwise it is skipped. In the second case, it means that if t

takes on any value of the set greater than the first value, then S(t-1) is added to the equation,

otherwise it is skipped.

5.3. Scalars, Parameters and Tables

Data in GAMS models are contained in arrays (zero-, one-, or multi-dimensional matrices called

scalars, parameters, and tables). SETs can play the role of indices for these arrays. An example

of declaring a scalar and assigning a value to it is:

SCALAR beg_S Beginning Storage of Reservoir (million m3) /14000/

where the scalar is beg_S and its value is 14000. All of the text between beg_S and 14000 is

simply documentation of the purpose of the scalar. An example of declaring a parameter and

assigning values to all of its elements is the reservoir inflow in a river basin model. This can be

written in one of two ways:

PARAMETER

Q(t) inflow to Reservoir A (million m3) /Jan 236, Feb 284, Mar 315, Apr

445, May 1388, Jun 2306, Jul 2749, Aug 1538, Sep 676, Oct 497, Nov 394,

Dec 391/;

or PARAMETER

Q(t) inflow to Reservoir A (million m3)

/

Jan 236

Feb 284

Mar 315

Apr 445

May 1388

Jun 2306

Jul 2749

Aug 1538

Sep 676

Page 21: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

21

Oct 497

Nov 394

Dec 391

/;

Often the second method is preferred since this facilitates cutting and pasting from spreadsheets.

5.4. Variables

There are five types of variables that can be used in GAMS models:

VARIABLE - Can take on any real values;

POSITIVE VARIABLE - Can take on only positive real values;

NEGATIVE VARIABLES - Can take on only negative real values;

INTEGER VARIABLES - Can take on only integer values; and

BINARY VARIABLES - Can take on only the integer values 0 and 1

Variables can be zero- or multi-dimensional. The dimensions are determined by the number of

indices used in the definition of the variable. For example, consider the following variable

declaration statement for the zero-dimensional (scalar) objective function value a model:

VARIABLE obj Objective function value ($);

Everything after the variable obj is documentation to explain the purpose of the variable. An

example of a positive one-dimensional (vector) variable declaration is the reservoir storage value

from a river basin model:

POSITIVE VARIABLE S(t) Storage in Reservoir (million m3)

The variable S is defined over the range of the set t. That is, is has elements for all the members

of the index set. In this case S(t) is declared to be a positive variable, since we do not want to

allow negative storage volumes and this saves us having to make specific lower bond

declarations for the variables.

Boundaries can be defined for variables with the help of specific suffixes. For example, in the

Page 22: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

22

river basin model, several bounds on storage are set:

S.UP(t) = K;

S.LO(t) = S_min;

S.LO('Dec') = end_S;

The first example defines the maximum storage allowed in the reservoir (its “capacity”), hence

the use of the suffix “.UP”; the second defines the minimum storage volume allowed in the

reservoir (known as “dead” storage), hence the use of the suffix “.LO”; and the third defines the

volume at the end of the year.

5.5. Equations

Equations are defined in two parts in GAMS models: (1) Declaration of the names of equations;

and (2) Definition of the equation structure. An example of declaring equations names is:

EQUATIONS

Res_balance(t) Reservoir mass balance

objective Objective Function;

Note that the first equation is declared to have the name Res_balance and GAMS will create an

instance of the equation for each member of the set t, that is, it is a vector equation. The second

equation objective is a scalar equation and only one instance of this equation is created by

GAMS. The name of an equation must begin with a letter and contain less than 10 symbols.

The definition of the structure of an equation follows the syntax:

Equation_name.. expression1 =operator= expression2;

First, we have the name of the equation (Equation_name) as declared in the list of equation

names, then two periods “..” separate the name of the equation and the mathematical definition

of the equation structure. The expression of the equation is an algebraic statement using allowed

GAMS algebraic operations. The equation must contain a GAMS “relation” operator, and these

Page 23: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

23

are:

=E= right hand side is equal to the left hand side;

=G= right hand side is greater than or equal to the left hand side; and

=L= right part is less than or equal to the left hand side

An example of an equation definition from a river basin model is:

Res_balance(t).. S(t) =E= beg_S$(ord(t) EQ 1)

+ S(t-1)$(ord(t) GT 1) + Q(t) - R(t);

Equations can be continued over as many lines as necessary and they end with a semicolon. This

equation is written in the same manner as we would write the mathematical equation. GAMS

will include an instance of the equation for each element of the set t. An example of an equation

using the less than or equal to relation operator is:

LimitB(t).. D(t) =L= alpha*R(t);

This equation sets the upper limit of water diversion in a model to be less than or equal to the

flow in the river R(t) times the fraction alpha of the flow that is allowed to be diverted (the

remaining portion being available to downstream users).

5.6. Assembling a Model

After the SETS, PARAMETERS, VARIABLES, and EQUATIONS of a model have been declared a

system (called a MODEL) can be formed from a collection of equations and given a name.

When all of the declared equations are included in the model, the syntax of declaring the model

is as follows (Note – this is the usual situation):

MODEL name comment /ALL/;

Page 24: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

24

For example:

MODEL Reservoir / ALL /;

The model is named "Reservoir", and the keyword ALL means that the model includes all of the

equations. Sometimes, the user may want to create numerous variants of equations and unite

them in groups, forming different models with distinct names and they may have various

optimization objectives.

5.7. Solving a Model

Once a model has been defined, the next step is to solve it. This is ordered by including a

SOLVE statement in the model. Consider the following example:

SOLVE Reservoir USING NLP MAXIMIZING obj;

The SOLVE statement contains several parts:

The keyword SOLVE;

The previously defined name of the model (Reservoir in our example);

The keyword USING;

The type of “solver” to use in the solution (NLP or nonlinear programming, in this case).

The keyword MAXIMIZING (in out case, but other models will use MINIMIZING); and

The name of a scalar variable (obj in this case) to be optimized

5.8. Model Output

The GAMS software can write information about the model and its solution to text files. The

syntax for defining output text files is:

FILE pointer_name comments / external_filename /

Page 25: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

25

where FILE is a keyword used to define files; pointer_name is a pointer used by GAMS model

to direct output to the external text file external_ filename; and external_filename is an

external text file which receives the output from GAMS. In a river basin model, we may have

FILE result /Basin_Results.txt/;

PUT result

where result is a pointer to the external file named “Basin_Results.txt” that will receive the

model output. The pointer to the output file is named result in the model and it directs

information into the file Basin_Result.txt. The PUT operator is used for both assigning the

name of the “current_file” to a declared text file and writing information into this file. This

example shows how the pointer res is associated with the external text file Basin_Result.

Then, the output is directed into the file associated with the pointer result. Consider the

following Put statements that occur later on in the river basin model:

PUT /"Weights ";

PUT /" wA = ", wA:7:3

PUT /" wB = ", wB:7:3;

PUT /" wC = ", wC:7:3/;

In the first line, some text (Weights) is inserted into the file. Then, the values of the objective

function weights are written to the file preceded by text stating what each value corresponds to

and the format for printing (field seven spaces wide with three places to the right of the decimal

point).

Sometimes, it is necessary to output the value of parameters or tables. This usually

requires the use of the LOOP function. Consider the following example:

PUT /"Reservoir (Mm3)";

PUT /" Storage Input Release ";

PUT /"Initial ", beg_S:9:0/;

LOOP(t,PUT t.TL, S.L(t):9:0, Q(t):9:0, R.L(t):9:0/;);

Page 26: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

26

The first line prints a title for the table, and then, on the second line, a header at the top of the

table. The third line prints the initial value of storage used in the calculation. The fourth line

loops over all the elements of the set t and prints the value of t, S(t), Q(t), and R1(t).

Note that the variables S(t) and R(t) need the suffix ”.L”, but the parameter Q(t) does not.

This is because Q(t) is a defined data value whose “level” is not determined by GAMS.

However, the others are variables and their levels are determined in the solution process.

5.9. IF-ELSE Operator

The IF-ELSE operator is useful for transferring from one operator to another. In some cases, it

can be written down as a set of $ conditions. The IF operator can be used for making GAMS

code more understandable.

The optional "ELSE" part allows formulating the traditional construction "IF-THEN-ELSE".

The following syntax is for the "IF-THEN-ELSE" operator:

if (condition,

operators;

{condition ELSEIF, operators}

[operators ELSE;]

);

Note, the braces and brackets are not required, but can be used. "Condition" means logical

conditions described in the paragraph on conditional operations of GAMS.

Declaration or definition of equations can not be performed within the IF operator. Consider the

following expressed through the IF-ELSEIF-ELSE operators:

IF (f <= 0,

p(i) = -1;

Page 27: INTRODUCTION TO GAMS - University of Texas at Austin INTRODUCTION TO GAMS1 Daene C. McKinney CE385D Water Resources Planning and Management The University of Texas at Austin Table

27

q(j) = -1;

ELSEIF ((f > 0) AND (f < 1)),

p(i) = p(i)**2;

q(j) = q(j)**2;

ELSE

p(i) = p(i)**3;

q(j) = q(j)**3;

);

REFERENCES

Brooke, A., D. Kendrick, A. Meeraus, and R. Raman (2006). GAMS Language Guide. Gams

Development Corporation. Washington D.C.

McKinney, D.C., and A. Savitsky, Basic Optimization Models for Water and energy

management, Technical Report, Center for Research in Water Resources, University of Texas at

Austin, 2006

http://www.ce.utexas.edu/prof/mckinney/ce385d/lectures/McKinneySavitsky.pdf