GAMS tutorial with simple toy example

https://www.gams.com/products/simple-example/

This toy problem is presented only to illustrate how GAMS lets you model in a natural way. GAMS can handle much larger and highly complex problems. Only a few of the basic features of GAMS can be highlighted here.

Algebraic Description

Here is a standard algebraic description of the problem, which is to minimize the cost of shipping goods from 2 plants to 3 markets, subject to supply and demand constraints.

Indices:

ii = plants
jj = markets

Given Data:

aiai = supply of commodity of plant ii (cases) 
bjbj = demand for commodity at market jj (cases) 
dijdij = distance between plant i and market j (thousand miles)
cijcij = F⋅dijF⋅dij shipping cost per unit shipment between plant ii and market jj ($/case/thousand miles)

Distances Markets      
Plants New York Chicago Topeka Supply
Seattle 2.5 1.7 1.8 350
San Diego 2.5 1.8 1.4 600
Demand 325 300 275  
FF = $ per thousand miles

Decision Variables:

xijxij = amount of commodity to ship from plant ii to market jj (cases)
where xij≥0xij≥0, for all ii, jj

Constraints:

Observe supply limit at plant ii: ∑jxij≤ai∑jxij≤ai for all ii (cases)
Satisfy demand at market jj: ∑ixij≥bj∑ixij≥bj for all jj (cases) 

Objective Function:

Minimize ∑i∑jcijxij∑i∑jcijxij ($K)

The GAMS Model

The same model modeled in GAMS. The use of concise algebraic descriptions makes the model highly compact, with a logical structure. Internal documentation, such as explanation of parameters and units of measurement, makes the model easy to read.

Sets
       i   canning plants   / Seattle, San-Diego /
       j   markets          / New-York, Chicago, Topeka / ;
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  / ;
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  ;
Scalar f  freight in dollars per case per thousand miles  /90/ ;
Parameter
       c(i,j)  transport cost in thousands of dollars per case ;
c(i,j) = f * d(i,j) / 1000 ;
Variables
     x(i,j)  shipment quantities in cases
     z       total transportation costs in thousands of dollars ;
Positive variables x ;
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) ;
Model transport /all/ ;
Solve transport using LP minimizing z ;

Sets

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

GAMS lets you specify indices in a straightforward way: declare and name the set (here, I and J), and enumerate their elements.

Parameters

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  / ;

Here data are entered as indexed parameters A(I) and B(J), and values simply are listed. 
GAMS lets you place explanatory text (shown in lower case) throughout your model, as you develop it. Your comments are automatically incorporated into the output report, at the appropriate places.

Table

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  ;

Data can also be entered in convenient table form. GAMS lets you input data in their basic form - transformations are specified algebraically.

Scalar

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

A constant simply can be declared as a SCALAR, and its value specified.

Data manipulation

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

When data values are to be calculated, you first declare the parameter (i.e. give it a symbol and, optionally, index it), then give its algebraic formulation. GAMS will automatically make the calculations.

Variables

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

Decision variables are expressed algebraically, with their indices specified. From this general form, GAMS generates each instance of the variable in the domain.
Variables are specified as to type: FREE, POSITIVE, NEGATIVE, BINARY, or INTEGER. The default is FREE.
The objective variable (z, here) is simply declared without an index.

Equations

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) ;

Objective function and constraint equations are first declared by giving them names. Then their general algebraic formulae are described. GAMS now has enough information (from data entered above and from the algebraic relationships specified in the equations) to automatically generate each individual constraint statement - as you can see in the output report below. An extensive set of tools enables you to model any expression that can be stated algebraically: arithmetic, indexing, functions and exception-handling log (e.g. if-then-else and such-that constructs). 

=E= indicates 'equal to'
=L= indicates 'less than or equal to' 
=G= indicates 'greater than or equal to'

Model Statement

Model transport /all/ ;

The model is given a unique name (here, TRANSPORT), and the modeler specifies which equations should be included in this particular formulation. In this case we specified ALL which indicates that all equations are part of the model. This would be equivalent to MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . This equation selection enables you to formulate different models within a single GAMS input file, based on the same or different given data.

Solve Statement

Solve transport using LP minimizing z ;

The solve statement (1) tells GAMS which model to solve, (2) selects the solver to use (in this case an LP solver), (3) indicaties the direction of the optimization, either MINIMIZING or MAXIMIZING , and (4) specifies the objective variable.

The GAMS Output Report (excerpts only)

The full GAMS output report is much more extensive than the small excerpts shown here, and contains many aids for interpreting and diagnosing your model. Moreover, you can modify the output format to suit your particular purposes.

Equations Listing

---- cost  =E=  define objective function

cost..  - 0.225*x(Seattle,New-York) - 0.153*x(Seattle,Chicago)
     
      - 0.162*x(Seattle,Topeka) - 0.225*x(San-Diego,New-York)
     
      - 0.162*x(San-Diego,Chicago) - 0.126*x(San-Diego,Topeka) + z =E= 0 ;
     
      (LHS = 0)
     

---- supply  =L=  observe supply limit at plant i

supply(Seattle)..  x(Seattle,New-York) + x(Seattle,Chicago) + x(Seattle,Topeka)
      =L= 350 ; (LHS = 0)
     
supply(San-Diego)..  x(San-Diego,New-York) + x(San-Diego,Chicago)
     
      + x(San-Diego,Topeka) =L= 600 ; (LHS = 0)
     

---- demand  =G=  satisfy demand at market j

demand(New-York)..  x(Seattle,New-York) + x(San-Diego,New-York) =G= 325 ;
     
      (LHS = 0, INFES = 325 ****)
     
demand(Chicago)..  x(Seattle,Chicago) + x(San-Diego,Chicago) =G= 300 ;
     
      (LHS = 0, INFES = 300 ****)
     
demand(Topeka)..  x(Seattle,Topeka) + x(San-Diego,Topeka) =G= 275 ;
     
      (LHS = 0, INFES = 275 ****)

The equation listing shows the individual constraints that have been generated from the blocks specified in the GAMS input. In GAMS one can write down indexed equation blocks in a very compact form, that will generate a large amount of single equations. In our example we have specified three blocks of equations that generated six single equations.

Column Listing

---- x  shipment quantities in cases

x(Seattle,New-York)
                (.LO, .L, .UP, .M = 0, 0, +INF, 0)
       -0.225   cost
        1       supply(Seattle)
        1       demand(New-York)

x(Seattle,Chicago)
                (.LO, .L, .UP, .M = 0, 0, +INF, 0)
       -0.153   cost
        1       supply(Seattle)
        1       demand(Chicago)

x(Seattle,Topeka)
                (.LO, .L, .UP, .M = 0, 0, +INF, 0)
       -0.162   cost
        1       supply(Seattle)
        1       demand(Topeka)

REMAINING 3 ENTRIES SKIPPED

---- z  total transportation costs in thousands of dollars

z
                (.LO, .L, .UP, .M = -INF, 0, +INF, 0)
        1       cost

The column listing gives information on the individual variables that were generated. The variable X(I,J) expands to six single variables. When many variables are generated for one block the default listing shows only the first three (this can be changed by the user).

Solve Messages

MODEL STATISTICS

BLOCKS OF EQUATIONS           3     SINGLE EQUATIONS            6
BLOCKS OF VARIABLES           2     SINGLE VARIABLES            7
NON ZERO ELEMENTS            19


GENERATION TIME      =        0.000 SECONDS      4 MB


EXECUTION TIME       =        0.000 SECONDS      4 MB 


               S O L V E      S U M M A R Y

     MODEL   transport           OBJECTIVE  z
     TYPE    LP                  DIRECTION  MINIMIZE
     SOLVER  BDMLP               FROM LINE  32

**** SOLVER STATUS     1 Normal Completion         
**** MODEL STATUS      1 Optimal                   
**** OBJECTIVE VALUE              153.6750

 RESOURCE USAGE, LIMIT          0.047      1000.000
 ITERATION COUNT, LIMIT         4    2000000000

 BDMLP 1.3

 Originally developed by
  A. Brooke, A. Drud, and A. Meeraus,
  World Bank, Washington, D.C., U.S.A.
 MIP part added by
  A. Drud, ARKI Consult, Denmark
  M. Bussieck, GAMS Dev. Corp. U.S.A.
 Work space requested by solver --    0.03 Mb
 EXIT -- OPTIMAL SOLUTION FOUND.

The solve statement will generate the model (creation of single equations and variables corresponding to the specified model). First some statistics about the generated model are printed: number of equations, variables and non-zero elements. 

In the solve summary we see that BDMLP is called to solve this model. BDMLP found an optimal solution to this problem in 4 iterations and 0.184 seconds. The messages following the solve summary are coming from the solver.

Solution

                       LOWER     LEVEL     UPPER    MARGINAL

---- EQU cost            .         .         .        1.000      

  cost  define objective function

---- EQU supply  observe supply limit at plant i

             LOWER     LEVEL     UPPER    MARGINAL

Seattle       -INF    350.000   350.000      EPS       
San-Diego     -INF    550.000   600.000      .         

---- EQU demand  satisfy demand at market j

            LOWER     LEVEL     UPPER    MARGINAL

New-York   325.000   325.000     +INF      0.225      
Chicago    300.000   300.000     +INF      0.153      
Topeka     275.000   275.000     +INF      0.126      

---- VAR x  shipment quantities in cases

                      LOWER     LEVEL     UPPER    MARGINAL

Seattle  .New-York      .       50.000     +INF       .         
Seattle  .Chicago       .      300.000     +INF       .         
Seattle  .Topeka        .         .        +INF      0.036      
San-Diego.New-York      .      275.000     +INF       .         
San-Diego.Chicago       .         .        +INF      0.009      
San-Diego.Topeka        .      275.000     +INF       .         

                       LOWER     LEVEL     UPPER    MARGINAL

---- VAR z              -INF    153.675     +INF       .         

  z  total transportation costs in thousands of dollars


**** REPORT SUMMARY :        0     NONOPT
                             0 INFEASIBLE
                             0  UNBOUNDED

The solution is printed here. The marginals correspond to the duals for the equations and to the reduced costs for the variables. 

GAMS provides many more facilities to tailor the output to your needs and to generate management-style reports. In order to use the advanced report writing facilities of GAMS you don't need to learn yet another language. In GAMS both data manipulation, model specification and report writing is done in one single environment.

Reference

Dantzig G. B., Linear Programming and Extensions, Princeton University Press, Princeton, New Jersey, 1963, Chapter 3-3.

猜你喜欢

转载自blog.csdn.net/alphachx/article/details/85029277