21.4 Major release (September 06, 2004)


We would like to thank all of the users who have reported bugs or made suggestions in improving this release.

GAMS System

Model Library

  • The model library keeps on growing! A model that implements a column generation scheme for the cutting stock problem (cutstock) has been added. There are two examples that demonstrate the multiple solution feature in BARON (mhw4dxx and bchfcnet).
  • The model library also has the new category "GAMS Tools". Models in this category show how to use tools designed to help modelers in their daily work. Three models (awkqap, seders, and awktsp) demonstrate the routine process to take a raw file from a web site and manipulate the text file into a format suitable to be read by GAMS using Unix-style tools SED & AWK.
  • Five new models (mingamma, quantum, procmean, mlbeta, and mlgamma) have been added to demonstrate the new statistical functions (discussed below).


  • 33 new models were added to the test library.
  • Addition of solver-specific test suites. The models in a test suite are run not for all solvers but for the set of solvers associated with that particular suite.
  • Most of the new models test features in GAMS/Base.
  • A series of new models tests MCP syntax and matching rules.

Windows Setup.exe

  • A new Windows setup.exe installation program for GAMS is used adding new functionality and a more user friendly interface.
  • The McCarl GAMS User Guide is now part of the Windows installation (for UNIX platforms this must still be installed manually).

GDX Utilities

  • GDXrank, a standalone sorting utility for GDX files, is now part of the distribution (all platforms)
  • A wrapper for GDXrank, called rank.gms, written by Tom Rutherford, is included with the distribution and can be called using the $LIBINCLUDE directive.


  • The IDE recognizes https as www string
  • The menu Help | About shows current license file
  • If there is a GAMS license file on the ClipBoard, selecting Help | About will prompt to write the ClipBoard to a license file.
  • Library files can now have multiple files with a numeric extension; previously,it was the first file only.
  • A library file can have have an extension of '.ignore' which will be removed so we can protect '.zip' files.
  • After running gdxdiff, an empty difference file will not be shown.

Additional functions

  • gMilliSec(DayTime): milli seconds of a DayTime number
  • MaxExecError: a read/write access to the ExecError values
  • TimeElapsed: elapsed time in seconds since the start of a GAMS run
  • Gamma(a): Gamma function (DNLP)
  • LogGamma(a): Log Gamma function
  • GammaReg(x,a): Regularized gamma function
  • Beta(a,b): Beta function (DNLP)
  • LogBeta(a,b): Log Beta function
  • BetaReg(x,a,b): Regularized Beta function
    The definitions and notation for incomplete and regularized gamma and beta functions are not consistent, For example, note the differences with the definitions used in Mathematica:
      GAMS Mathematica
      Gamma(a) Gamma[a]
      LogGamma(a) LogGamma[a]
      GammaReg(x,a) GammaRegularized[a,0,x]
      Beta(a,b) Beta[a,b]
      LogBeta(a,b) Log[Beta[a,b]]
      BetaReg(x,a,b) BetaRegularized[x,a,b]

Speed-up for expressions containing constant indices or indices that are not in the natural order

  • Speed-up for expressions containing constant indices or indices that are not in the natural order
    • The option sys11 controls this new feature. When we use option sys11=1, GAMS will execute without speedup features as in previous versions; using option sys11=0 will cause GAMS to use procedures that execute some statements faster at the cost of increased memory use (This is now the default value). The following GAMS code illustrates some of the speedups.
        Sets i / i1*i700 /
             j / j1*j700 /
             k / k1*k500 /
        Parameters aij(i,j) bji(j,i), cjk(j,k), dij(i,j);
        ik(i,k)$(uniform(0,1) < 0.01) = yes;
        aij(i,j) = uniform(0,1);
        bji(j,i) = aij(i,j);
        cjk(j,k) = sum(ik(i,k), aij(i,j));
        dij(i,j) $(aij(i,'j700') > 0.5) = bji(j, 'i700')
      A comparison of the execution times in seconds:
        Assignment sys11=1 sys11=0
        Bji 2.7 0.36
        Cjk 25.0 2.38
        Dij 4.7 0.39
    • Faster execution of lag / lead operators. This improvement is visible for large sets only as illustrated in the following GAMS code:
        Set i /i1*i2000/,
            j /j1*j20000/;
        Parameter Ai(i),Bj(j);
        Ai(i - 1) = Ord(i);
        Bj(j - 1) = Ord(j);
      A comparison of execution times in seconds:
        Assignment previous current
        Ai 0.02 0.0
        Bj 3.2 0.0

Embedded set text and parameter values

  • The $on/offembedded option enables the use of embedded values in parameter and set data statements. For sets, the final text is concatenated with blank separators. For example, the element texts for the set and j will be identical:
      Set i(k,l) / a.a 'aaaa cccc dddd', b.a 'bbbb cccc dddd' /;
      Set j(k,l) / (a aaaa, b bbbb).(a cccc) dddd /;
    For parameters, the final value will be the product of the embedded values. If no value is specified, a value of 1 is assumed. For example, the values for x and y will be the same:
      Parameter x(k,l) / a.a 24, b.a 12, c.a 4, c.b 4, d.a 6, d.b 6 /;
      Parameter y(k,l) / (a 2, b).(a 3) 4, (c 2,d 3).((a,b) 2) /;

New suffixes for functions

  • New suffixes Grad and Hess have been introduced to get exact point derivatives from any function. These function suffixes are mainly intended for future testing of functions and cannot be used in equations.
  • The first argument gives the position of the element of the Hessian or gradient element desired in the form i or i:j, where i is the row element and j the column element.
  • The symbol ':' is used to separate the element position specification from the function argument list.
  • For example, the following will return the second derivative for the second and fourth argument, where 1,2,3,4,5 are the normal function arguments:
      h = EDist.hess(2:4:1,2,3,4,5);
    If the needed element position index is one, we can drop the argument as shown below:
      g = exp.grad(1:5) or g = exp.grad(5);
      h = log.hess(1:1:3) or h = log.hess(3);
      hess(i,j) = betareg.hess(ord(i):ord(j):expr1,expr2,expr3);

Some new minor and exotic features

  • New %system.xxx% and system.xxx for put statements
    • system.date1: different date format: Feb 04, 2004
    • system.tab: inserst a tab character
  • New File attribute
    • file.silent: will suppress the logging of put files
  • New $IF option allows testing for existing solver at compile time
  • $IF SOLVER command
  • $if NOT solver baron $goto nobaron
  • Underflow Control
  • Release 21.0 introduced new math routines that work over a much wider numerical range than the older systems. The pre 21.0 systems rounded small function return values (less than 1e-30) to zero.
  • Some older models may use this rounding to zero feature and will now give slightly different results.
  • The new GAMS parameter ZeroRes=real allows you to change the threshold value for internal rounding in the GAMS calculation and the GAMS parameter ZeroResRep=1 will cause GAMS to issue warnings whenever such a rounding occurs.


Global Packages

  • Similar to the NLP Packages (NLP-1 and NLP-2), GAMS now offers Global Packages: If you buy at least two of the Global solvers BARON, LGO, and MSNLP, the prices are reduced by 25%. Please check our pricelist or contact sales@gams.com.



  • New libraries (version 7.2)
  • Branch-and-cut implementation (available only when using CPLEX as the LP solver)
  • Automatic exploitation of convexity
  • Modeling construct permits user to supply convexity information to the solver
  • Modeling construct permits user to have relaxation-only constraints
  • Improved local search implementation for large-scale models
  • GDX dumps can be used to provide output for the K best solutions
  • Several algorithmic fixes and improvements


  • GAMS has added a link to the Computational Infrastructure Operations Research (COIN-OR). The COIN-OR project is an initiative to spur the development of open-source software for the operations research community.
  • The GAMS/COIN-OR link allows GAMS users to connect their customized solution approaches using the COIN-OR Open Solver Interface (OSI) in a seamless manner.
  • The GAMS/COIN-OR Link for LP and MIP problems is available in source and free of charge to any licensed GAMS system.
  • Potentially all solvers connected to the COIN-OR/OSI can be made available through the GAMS/COIN-OR link. Currently,
    • CoinGlpk: Gnu Linear Programming Kit
    • CoinSbb: simple branch and bound, a branch and cut code
  • are included in the latest Windows and Linux distributions. Please visit the GAMS/COIN-OR web page at https://github.com/coin-or/GAMSlinks for details.


  • New libraries are included which address minor fixes and improvements.


  • New libraries (MINOS 5.51 June 2004)
  • Fixed issues with scaled/unscaled infeasibilities/nonoptimal


  • MSNLP (Multi-Start NLP) is another stochastic search algorithm from Optimal Methods, Inc for global optimization problems. Like it's bigger brother OQNLP, MSNLP uses a point generator to create candidate starting points for a local NLP solver. Algorithm performance depends strongly on the starting point generator. MSNLP implements a generator creating uniformly distributed points and the Smart Random Generator. This generator uses an initial coarse search to define a promising region within which random starting points are concentrated. Two variants of Smart Random are currently implemented, one using univariate normal distributions, the other using triangular distributions. MSNLP also comes with the local NLP solver LSGRG. MSNLP is available in the Global Packages.


  • NLPEC has been promoted from beta solver status and has a write up in the solver documents.
  • The NLPEC solver for MPECs automates the process of model reformulation. NLPEC reformulates the original MPEC as an NLP (using one of 23 different reformulation strategies), solves the resulting NLP, and translates the results back for return as an MPEC solution.


  • PATHNLP has been promoted from beta solver status. The PATHNLP solver suitable is for NLP programs. PATHNLP solves an NLP by internally constructing the Karush-Kuhn-Tucker (KKT) system of first-order optimality conditions associated with the NLP and solving this system using the PATH solver for complementarity problems.
  • Some improvements from the beta version include:
    • In some cases where PATHNLP fails to find a solution, it can now return a feasible point where before it would return no solution information whatsoever.
    • Information about the Hessian and it's inverse is now available.


  • OQNLP's merit and distance filters, which are respondible for starting the NLP solver at a small fraction of the candidate starting points, while still finding the global solution to most problems, have been improved. The dynamic merit filter logic and the basin overlap fix provide mechanisms for decreasing the radii of some attraction basins, focusing on those which reject points most often and those which overlap. These dynamic filters lead to a substantial improvement in OQNLP's ability to obtain a global optimum, with some increase in the number of solver calls. The OptQuest point generator has been supplemented by two new point generators (see MSNLP).


  • Updated to use XPRESS 2004 libraries - highlights include:
    • MIP heuristics
    • Lift-and-project cuts to give improved bound information
    • Strong branching
    • Extensive benchmarking & resultant performance improvements