25.0 Distribution

25.0.1 Major release (January 17, 2018)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Wolfgang Britz, Jeff Dischler, Michael Ferris, Dhruv Gupta, Erwin Kalvelagen, Florian Landis, Andre Lemelin, Erfan Mohagheghi, Anthony Paul, and Nathan Sudermann-Merx.


  • Due to the discontinuation of Cplex on Windows 32bit (with Cplex 12.7 in 2016) we are faced with potentially phasing out/dropping solvers depending on Cplex on Windows 32bit with the next major release. The most likely candidate for this is ANTIGONE. These solvers will still be available for 64-bit Windows and other supported platforms. Other solver vendors (e.g. Gurobi and FICO-Xpress) have also announced the discontinuation of their product on the Windows 32bit platform. If you rely heavily on the availability and support of the Windows 32bit platform please contact support@gams.com to discuss your options.
  • As announced, dropped support for x86-64 Solaris.
  • As announced, increased the minimal required MacOS X version to 10.11.
  • As announced, increased the minimal required GLIBC version on Linux to 2.12.

GAMS System


  • Extended the $offEmbeddedCode facility to allow the use of a "projection operator": $offEmbeddedCode {symbol[<[=]embSymbol[.dimX]]}
    More information can be found here.
  • Added support for the Object-oriented GAMS Python API in the Embedded Code Facility for Python. The method gams.set() accepts instances of type GamsParameter, GamsSet, etc. as data. Instances of GamsWorkspace and GamsDatabase can be retrieved using the properties gams.ws and gams.db. The property gams.wsWorkingDir can be used to specify the working directory of the created GamsWorkspace.
  • Added $libinclude pyEmbMI to conveniently work with Python OO-API GamsModelInstance from embedded code. See embmiex1.gms : Simple Embedded Code ModelInstance example.
  • Fixed a problem in embedded code when reading an empty scalar symbol.
  • Fixed a problem when solving a model with solveLink 5, 6, or 7 with communicating scales without scaleOpt active.
  • The EPS value in the Embedded Code Facility for Python has been changed to 4.94066E-324. This is the same value that is used for EPS in the Object-oriented Python API.
  • New Put_Utility save: Writes a save file of the current state of execution.
  • Improvement for the Put_Utility Statement: It is no longer required to define a file and activate it, just to use a put_utility.
  • New command line option fileStemApFromEnv: Append a string read from an environment variable to the fileStem.
  • Change to command line option fileStem: Create an immediate error when the value contains a \ or / character to avoid problems later on.
  • Fixed a bug with execute_unload, which could have caused a set to be exported mistakenly as alias to a different set, if symbol renaming was used.
  • Fixed a bug which prevented to open more than 65,000 put files.
  • Solves with scaleOpt=1 using GUSS or instantiations of OO-API GAMSModelInstances resulted in some circumstances in the report of scaled solutions or other erroneous behavior. Hence GAMS will now reset the modelname.scaleOpt attribute to NA before such a solve or GAMSModelInstance generation. As a consequence, models solved via GUSS or as a GAMSModelInstance in the OO-APIs will not be scaled by GAMS.
  • Solving MCP models with scaleOpt=1 using the solvers AMPL or PYOMO creates an execution error now. In the past this lead to wrong results potentially.


ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

  • Updated Intel MKL libraries to version 2018.0 for Linux and Mac OS X and to version 2018.1 on Windows 64-bit.


  • New libraries.


  • New libraries 3.17G (Conopt3).
  • New libraries 4.04 (Conopt4).
    • Fixed a system error 65666.


  • New libraries.
    • Bugfixes and tuning for fixed point bound tightening.
  • If Couenne does not find a feasible solution, but the initial point is feasible, then the initial point is now reported back to GAMS.


  • If the filename provided for the Jacobian or Hessian option contains the string novenames ConvertD will not export the original equation and variable names as set text to elements of sets i and j. Having the original equation and variable names can make the GDX file significantly larger and slow to write and read.
  • Fixed a problem when trying to write scaled MCP models.



  • Fixed a problem for model with SOS variables but no constraints.


  • New options neos_username and neos_user_password can be used in the option file in order to submit authenticated jobs using a NEOS user account.


  • New libraries 7.5 (20171117) for Mac OS X and Windows.
    • Preprocessing entirely rewritten: size reduction by a factor up to 10 on some huge instances.
    • Combinatorial models based on booleans and integers: performance improvement and increased ability to prove optimality.
    • Continuous linear and nonlinear models: performance improvement through the integration of state-of-the-art algorithms.
  • Note, that to use LocalSolver 7.5, a machine-specific LocalSolver license is now required. See the solver manual on how to obtain such a license. Alternatively, it is still possible to use LocalSolver 7.0 by choosing LOCALSOLVER70 instead of LOCALSOLVER as solver.


  • New libraries


  • Fixed a bug introduced in 24.8 that prevents the infeasSeq option to work.



  • The GAMS time limit (reslim) is now passed to SolveEngine. Added solver option hardtimelimit to specify a time limit that is enforced on the GAMS side.


  • New libraries 3.1.0 (876e6e8).
    • New scaling method that combines geometric and equilibrium scaling. Use new value 6 for option int:scaler to activate this.
    • See also the release paper.


  • New libraries 32.01.05.




  • Sometimes, Excel is not ready (e.g. because some data needs to be refreshed, when a worksheet is opened), when a read request is sent by GDXXRW. This could cause an exception. With this release we changed the behavior of GDXXRW to wait a second and resend the request in this case. This basically mimics the behavior of setting RWait to 1000 in case of the mentioned exception.

Object Oriented APIs


  • Changed the compiler from GCC to Clang on Mac OS X.
  • Added support for Microsoft Visual Studio 2015 and Microsoft Visual Studio 2017 on Windows 64-bit.
  • API binaries have been moved to apifiles/C++/lib. On Windows, there are further subdirectories for different compiler versions.
  • Update of Visual Studio solutions for the examples on Windows. Three different solutions reflecting the supported versions of Microsoft Visual Studio are available (e.g. examples-vs2013.sln, examples-vs2015.sln, examples-vs2017.sln).
  • The GAMS C++ API tutorial has been reworked. Information about building the C++ API examples via cmake, qmake, and Microsoft Visual Studio has been added.
  • New example TransportGDX that shows how to import and export GDX files. A description has been added to the tutorial.


  • Changes for GAMSSymbol and GAMSSymbolRecord: Both classes got the IEquatable<T> Interface. As a result the behavior of the Equals function as well as the == and != operators were modified. For both classes Equals and == returns now true, if the internal data reference is the same. Here is an example:
    GAMSVariable x1 = db.GetVariable("x");
    GAMSVariable x2 = db.GetVariable("x");
    if(x1 == x2)
    Console.WriteLine("x1 == x2");
    Console.WriteLine("x1 != x2");
    if (x1.Equals(x2))
    Console.WriteLine("x1 equals x2");
    Console.WriteLine("x1 does not equal x2");
    GamsWorkspace db
    In previous versions we got this output:
    x1 != x2
    x1 does not equal x2
    Now we get:
    x1 == x2
    x1 equals x2
  • New example TransportGDX that shows how to import and export GDX files.


  • The minimum version requirement of the Java Runtime Environment for using the GAMS Java API is now Java SE 7.
  • New TransportGDX example to demonstrate how to import and export GDX files.
  • Removed method GAMSSymbol.compact, deprecated since 24.8.1 (December 2016).
  • Changed equivalence behavior of GAMSSymbol and GAMSSymbolRecord objects. As a result, two symbol objects with the same internal reference are now equivalent, similar to symbol record objects:

    • Two symbols are equivalent if and only if they have the same internal reference.
    • Two symbol records are equivalent if and only if they have the same internal reference.

    The behavior of operator == remains unchanged. The following exmaple illustrates the new equivalence behavior:

    GAMSVariable x1 = db.getVariable("x");
    GAMSVariable x2 = db.getVariable("x");
    GAMSVariable x3 = x1;
    assertTrue(x1.equals(x2)); // true, previously false
    assertFalse(x1 == x2); // false, previously false
    assertTrue(x1.equals(x3)); // true, previously true
    assertTrue(x1 == x3); // true, previously true


  • Added implementation of __eq__() and __ne__() to classes _GamsSymbol and _GamsSymbolRecord and its derived classes. As a result the behavior of the operators == and != has changed. == now returns True, if the internal data reference is the same. The behavior of is remains unchanged. The following example illustrates the change:
    x1 = db["x"]
    x2 = db["x"]
    print(x1 == x2) # now: True, before: False
    print(x1 is x2) # now: False, before: False
  • New example transport_gdx.py that shows how to import and export GDX files. A description has been added to the tutorial.

Expert Level APIs

  • As announced, the expert-level C++ API files were removed from the distribution. Users should switch to the expert-level C API files. The object-oriented C++ API introduced in the last major release could also be a good alternative for replacement if the user C++ code exchanges data and runs a GAMS model.
  • The expert-level Java API files now ensure the load of jni libraries in the similar order as those employed by the Object Oriented Java API: first load from java.library.path, if neither specified nor found then from the directory where the API classes are located.


  • Do not allow empty filename as argument for gdxOpenAppend, gdxOpenRead, gdxOpenWrite, and gdxOpenWriteEx. This will create an error right away now.

Model Libraries

GAMS Model Library

GAMS Test Library

Solver/Platform availability

x86 32bit
MS Windows
x86 64bit
MS Windows
x86 64bit
x86 64bit
Mac OS X
Sparc 64bit
IBM Power 64bit
CBC 2.9
CPLEX 12.8 12.6 12.6
IPOPT 3.12
LINDO 11.0
OQNLP 32bit
SCIP 5.0
XPRESS 32.01 29.01

25.0.2 Maintenance release (January 31, 2018)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Tom Rutherford.

GAMS System


  • Bugfix: $offEmbeddedCode does not ignore $onUNDF anymore.
  • Bugfix: Special values (NA, EPS, INF, ...) are correctly communicated from embedded code back to GAMS.
  • Bugfix: Took care about a problem, which caused an unexpected execution error for certain uses of Put_Utility.
  • Fixed a bug in GMSPython on Mac OS X which prevented the Python interpreter from working. This problem occurred with the DMG installer only.


ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

  • On Linux, removed the MKL libraries that were optimized to certain x86 instruction sets (AVX, etc.) as this resulted in errors when running ANTIGONE or SCIP, probably due to library conflicts.


  • Option Tuning can be repeated in a GAMS/Cplex option file to provide a larger number of model instances for tuning. Before this change the number was restricted by the maxium line length of an option line (256 characters).


  • New libraries 7.5 (20180119) for Mac OS X and Windows.




  • Bugfix: Reading sets (no Value or Values option) with the option AutoRow works again.

25.0.3 Minor release (March 21, 2018)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Dominik Bongartz, Wolfgang Britz, Erwin Kalvelagen, Maria Kannavou, Hans Mittelmann, Christoph Pahmeyer, Gilles Scouvart, and Hermann Westerholt.

GAMS System


  • Bugfix for Put_Utility: If a put_utility statement was used as the first statement to mark a file as active (so no statement like put fx; was used before) and following put or put_utility statements did not mention this file explicitly, then the file association got lost.
  • Bugfix: Avoid a crash when one of the following attributes was used on an empty Singleton Set: .len, .uel, .val (an execution error is generated instead now)
  • Bugfix for command line option fileStemApFromEnv: In the past, if the input file was defined including a file extension, the value of this option was extended to the extension and not to the file stem as intended. This is fixed now.
  • Bugfix for $if exist File on Windows: In the past, if a file was specified as <Drive>:/<File>, e.g., C:/t.txt (note the forward slash '/' after the colon ':'), this always returned false, even if the file exists. That has been fixed now.



BONMIN(H), CBC, Couenne

  • Branch-and-bound now checks wallclock-time, if running with multiple threads.


  • New libraries 4.05.
    • Improved the selection of post-triangular variables when there are multiple candidates.


  • Bugfix: If the Cplex conflict refiner (triggered by option iis) could not identify a conflict the behavior was erratic. This has been fixed.
  • Bugfix: Value 6 for option MIPStart was documented but got rejected. This has been fixed.


  • Fixed setup of NLP projection problem in feasibility pump.
  • Fixed stopping criterion when using stop on crossover: DICOPT was stopping as soon as the relative gap between the objective value of the best known solution and the bound provided by the MIP relaxation was below 0.001, thus might have declared suboptimal solutions as optimal. With this release, DICOPT will use the value of GAMS option optcr as optimality tolerance. Note, that the default for this option is 0.1 (!).


  • New libraries.


  • No update, but be aware that Mosek announced to drop the convex nonlinear optimizer in their next major release (Mosek 9). Thus, in a future GAMS release, GAMS/Mosek will not accept models with model types NLP or DNLP anymore. Note, that linear or quadratic problems (LP, MIP, (MI)QCP) are not affected.


  • New libraries 5.0.1 (227c4c7).
    • New option presolving/symmetry/displaynorbitvars.


  • New libraries 3.1.1 (ab921a5).



  • Added support for singleton sets.
  • Fixed a dependency bug on Mac OS X which prevented model2tex from working.
  • Fixed a bug regarding SOS variables.
  • Fixed a bug regarding domain jumps.
  • Added support for Python 3 on Linux and Mac OS X.