31 Distribution

31.1.0 Major release (May 01, 2020)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Christoph Böhringer, Wolfgang Britz, Andreas Lundell, Scott McDonald, Victor Nechifor, Renger van Nieuwkoop, A. Omidi, Christoph Pahmeyer, Soummya Roy, Thomas Rutherford, Alireza Soroudi, Tim Varelmann, and Elizabeth Wong.


  • As announced, dropped support for 32-bit MS Windows.

GAMS System


  • Extended the syntax of the model statement to allow to restrict the domain of variables used in the model at one spot.
  • Added dollar control options $on|offSuffixDLVars and command line parameter SuffixDLVars to control whether it is allowed to use suffixes on variables with limited domains in a model.
  • Added new command line parameters to initialize the state of certain dollar control options: Digit, Empty, EolCom, Filtered, InlineCom, Listing.
  • Extended the behavior of the command line parameter checkErrorLevel, so that it also initializes the state of the dollar control option $on/offCheckErrorLevel.
  • Extended the behavior of the command line parameter strictSingelton, so that it also initializes the state of the dollar control option $on/offStrictSingleton.
  • Added new command line parameters to set the default values for certain put file attributes: PutND, PutNR, PutPS, PutPW.
  • Removed the limit on the number of significant digits allowed in floating-point values in GAMS source.
    Historically, GAMS has run on widely different platforms where even the floating-point arithmetic varied. To ensure the precision specified in the GAMS input didn't exceed what could be stored and computed with as GAMS ran, we limited the amount of precision (i.e. the number of digits used for numbers in the GAMS source) that could be specified. This limit could be relaxed by using the $offDigit control.
    Modern computers all support IEEE double-precision arithmetic. It's a well-accepted and familiar standard, and the new behavior - to convert the decimal value in the GAMS source into the nearest double-precision value, regardless of the number of digits specified - is what is generally expected. There is a limit (currently 40) on the number of digits treated as significant: digits beyond this point are quietly treated as zero.
    For "nice" values (i.e. those with fewer than 17 digits of precision and exponents of limited size, like 3.14159 or 2.5032e10) there is no difference in the old and new behavior. But for values specified with 17 or more digits of precision or having exponents of large size, the double-precision values can vary slightly between the old and new systems. The new values are the correct ones.
    The new command line parameter sys18 has been added in case any users require the old behavior.
  • New options encryptKey and decryptKey to encrypt and decrypt source based on a key rather than a target license. This allows developers to create encrypted input files that can be executed with any GAMS license and the right key.
  • GAMS will search standard locations for the license file gamslice.txt including the GAMS system directory. The standard locations for your operating system are described in the installation notes. You can also continue to use the license command line parameter to point to a specific license file.
  • GAMS can now use a configuration file gamsconfig.yaml to specify default values for command line parameters and environment variables: see details in GAMS Configuration in YAML Format. This can be used to implement user-specific default option settings that are shared between different GAMS versions. In the future, we also expect to use this capability to support the setting of options and defaults that support backward compatibility: this will become important as we change GAMS defaults in significant ways to modernize the user experience in the light of current computing environments and user expectations.
  • Added system suffixes %system.licenseFileName%, %system.userConfigDir%, and %system.userDataDir%.
  • Embedded Python Code Facility:
    • Embedded Python code can be used with Python 3.6, 3.7, and 3.8. GMSPython is used for embedded code by default on the core platforms.
    • The GAMS command line parameter pySetup has been deprecated. The environment variable GMSPYTHONLIB that needs to point to the Python library (e.g. python38.dll on Windows) determines the Python installation to be used in embedded Python code.
    • The gams.set method to write data back to GAMS has a new argument mapKeys that allows to pass a callable to remap the elements of the key.
  • Removed GAMS return code 116 ("Could not find GMSPython").
  • Fixed the card operator for scalar symbols, so that it always returns 1 when the symbol has data. In the past it might have been wrong for symbols that had no data in the declaration, but just from an assignment.
  • Fixed issues where GAMS would crash on exceptionally large models (more than 268 million rows or columns) with certain non-default options selected.
  • Fixed a problem which allowed multiple declarations of the same equation or variable when $offMulti was active.
  • Fixed some 3-argument intrinsic functions whose third argument was optional (e.g. ncpVUSin) - these were not taking the default value for the third argument correctly into account when called with two arguments.
  • Fixed a bug which caused wrong execution of $onPut and embeddedCode after Programming Flow Controls that were not terminated with a semicolon.
  • Fixed a bug which caused variable and equation records fixed at 0 to be dumped incorrectly with dumpOpt.
  • Fixed incomplete warning when writing a non-default status of $on/offEmpty to a save file.
  • execMode did not prevent the execution of scriptExit. This has been fixed.


  • GMSPython has been upgraded from Python 3.6 to Python 3.8 and comes without Python package installer pip.


  • The libinclude file rank.gms, which is based on the gdxrank tool, got a complete overhaul. The temporary GDX files resides now in the scratch directory, so multiple GAMS models using rank.gms can coexist in the same working directory. Moreover, the percentile calculation works with sort values that may include +inf/-inf. Some checks have been added that result in execution errors in case the operation was not successful, e.g. if gdxrank failed to sort.
  • Fixed a bug in pyEmbMI.gms that prevented string options from being set properly.


  • Improved the layout. The new layout provides a more responsive view on a smaller screen.

Windows Installer

  • Default installation mode has been changed from All Users to Current User. This can be changed on the Advanced Options page or by providing /allUsers=yes when running the installer from a command prompt.
  • The default application used for associating GAMS (.gms) and GDX (.gdx) files has been changed from the GAMS IDE to GAMS Studio.
  • New command line argument /allUsers=yes|no (default:no) can be used in order to install for All Users instead of Current User.
  • New command line argument /noLicense=yes|no (default:no) can be used in order to prevent any GAMS license from being written.
  • New GAMS License page:
    • Allows to select a GAMS license to be used. The installer tries to find GAMS licenses in different locations and automatically selects a license to be used with the following precedence:
      • Clipboard
      • C:\Users\username\Documents\GAMS
      • Previous GAMS installation found from the registry (User)
      • Previous GAMS installation found from the registry (System)
    • A license file is written to C:\Users\username\Documents\GAMS when installing for Current User (default). Installing for All Users or checking Write License to System Directory will write the license to the system directory instead.


ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

  • Updated Intel MKL libraries to version 2020.0 on Windows.


  • New libraries 20.4.14.
    • Improved local search strategies.
    • Increased effectiveness of cut pool manager.
    • Improved relaxations for MIQPs.
    • Added new LP subsolver based on HSL's LA04.


  • GAMS/CBC did not use the default value for all parameters as documented and as used in the CBC standalone program. This has been fixed. To restore some of the previous behavior, the following parameter setting can be used:
    nodeStrategy hybrid
    preprocess off
    cuts off
    cliqueCuts off
    flowCoverCuts off
    gomoryCuts off
    knapsackCuts off
    mirCuts off
    twoMirCuts off
    probingCuts off
    zeroHalfCuts off
    heuristics 0
    feaspump off
    greedyHeuristic off
    roundingHeuristic off


  • New libraries 3.13L.
    • Added new facilities to print the variables changed by the pre-processor. See options prprec, rtpprec, and rtprel.
  • New libraries 4.19.
    • Some errors related to the duals and basic/nonbasic flags for some definitional constraints and forcing constraints have been corrected.
    • The two tolerances Tol_IFixed and Tol_DFixed for when a variables is fixed have been unified into a single tolerance, Tol_Fixed.
    • The routine for detecting definitional constraints has been simplified and some options from previous versions are no longer used (Flg_DC_Unique, Lim_DFVars, and Tol_Def_Ini) and Tol_Def_Mult has a new default value.


  • Added support for option headerTimeStamp, which was added for ConvertD before, in Convert.


  • We plan to drop Couenne with one of the next major releases.


  • Fixed incorrect display of selection of LPMethod when rerunning without presolve for infeasible model.
  • Fixed incorrect selection of LPMethod when rerunning without presolve for infeasible model in CplexD.


  • New libraries 9.0.2.
  • If GAMS/Gurobi is licensed, the setting of the environment variable GRB_LICENSE_FILE is ignored. The setting of this environment variable interfered with the GAMS/Gurobi licensing.


  • New libraries 3.13.2.
    • MA28 can no longer be loaded at run-time from a user-provided HSL library. Removed option 'ma28_pivtol'.
    • The default of option ma77_order has changed from 'amd' to 'metis'.
    • The default of option ma97_print_level has changed from 0 to -1.
    • The default of option mumps_pivot_order has been changed from 7 to 5 to work around a bug in MUMPS.
  • Updated MUMPS to version 5.3.1. MUMPS has been build with OpenMP support enabled.
  • Updated METIS (used by HSL codes and MUMPS) to version 5.1.0.


  • Fixed a problem with the control file version that prevented Kestrel from being used in GAMS 30.


  • Increased the number of allowed nonlinear nonzeros in the global solver from 30 to 50 when operating under a demo license.


  • New libraries 9.5 (20200409).
    • Performance improvements on mixed-variable models like unit commitment or network design problems.
    • Performance improvements on routing and scheduling problems like CVRPTW or jobshop scheduling problems.
    • Better and faster lower bounds for nonlinear problems as well as for combinatorial problems like TSP.
  • New parameter verbosity.
  • Fixed handling of semi-integer variables.


  • New libraries 9.2.4.
  • Avoid MOSEK error 1243 on general nonlinear models.


  • New libraries 7.0.0 (0bc4dc9c65).
    • The symmetry code has been completely restructured and modularity has been increased.
      • It is now possible to use orbitopes (i.e., polyhedral symmetry handling techniques) and orbital fixing on the same instance.
      • Branching decisions can now take symmetry information into account by filtering first variables from orbits (new parameter branching/relpscost/filtercandssym) and transfering pseudo cost information to variables in orbit (new parameter branching/relpscost/transsympscost).
      • Improved performance of orbital fixing and orbitope propagation.
      • Reduced memory usage of symmetry detection.
      • Improved detection of packing/partitioning orbitopes.
      • New possible value 3 for misc/usesymmetry and changed default from 2 to 3.
      • Renamed parameter propagating/orbitalfixing/enableafterrestart to propagating/symmetry/recomputerestart, which decides whether to recompute symmetries after a restart or not.
      • Changed default of constraints/orbitope/propfreq from 5 to 1.
      • Changed default of constraints/orbitope/sepafreq from 5 to -1.
      • Removed parameters constraints/orbisack/checkalwaysfeas, constraints/orbitope/checkalwaysfeas, constraints/symresack/checkalwaysfeas.
      • Removed parameters presolving/symmetry/maxgenerators, presolving/symmetry/checksymmetries, and presolving/symmetry/displaynorbitvars and added various new parameters in group propagating/symmetry.
      • Removed parameters presolving/symbreak/conssaddlp, presolving/symbreak/addsymresacks, presolving/symbreak/computeorbits, presolving/symbreak/detectorbitopes, and presolving/symbreak/addconsstiming.
      • Removed parameters propagating/orbitalfixing/symcomptiming, propagating/orbitalfixing/performpresolving, and propagating/orbitalfixing/recomputerestart.
      • New parameter constraints/orbitope/usedynamicprop to enable propagation of orbitope constraints by reordering the rows based on the branching strategy.
      • New parameter constraints/symresack/checkmonotonicity to enable upgrade to packing/partitioning symresacks even if the underlying permutation is not monotone.
      • New parameters constraints/orbisack/forceconscopy, constraints/orbitope/forceconscopy, and constraints/symresack/forceconscopy.
    • Presolve:
      • The presolve library PaPILO (Parallel Presolve for Integer and Linear Optimization) 1.0 has been integrated as additional presolver for mixed-integer linear programs.
      • Expressions of form \(|x|^px\) in a nonlinear constraint are now sometimes recognized and handled by abspower constraints.
      • Some more quadratic constraints are now recognized as second-order cone constraints.
      • New presolver dualsparsify that tries to combine variables to cancel nonzero coefficients in the constraint matrix of a MIP.
      • Improved performance of tworowbnd presolver. New parameters added. Changed default of presolving/tworowbnd/priority from -500000 to -2000.
      • Extended presolver dualinfer by the ability to perform convex combinations of continuous variables to calculate better bounds for the dual variables. New parameters added.
      • Huge clique tables are now avoided by restriciting the number of nonzero entries relative to the number of nonzeros in the problem. New parameter presolving/clqtablefac.
      • New parameter constraints/linear/extractcliques to turn clique extraction off.
      • Improved presolver "domcol" to not require a complete representation of all constraints in the matrix.
      • Enabling aggressive presolving now activates all available presolving plugins, and decreases parameter presolving/restartfac correctly with respect to default.
      • New parameter constraints/linear/maxdualmultaggrquot and constraints/linear/maxmultaggrquot to limit the maximum coefficient dynamism of an equation on which multiaggregation is performed. Smaller values make multiaggregations numerically more stable.
      • Changed default of constraints/quadratic/empathy4and from 0 to 2. This leads to stronger but larger reformulations for products of binary variables.
    • Primal heuristics:
      • New Large Neighborhood Search heuristic "Trust region", available as both a standalone heuristic and a neighborhood inside of Adaptive Large Neighborhood Search.
      • New heuristic Adaptive Diving, which registers all publicly available dive sets from other diving heuristics, learns online which divesets reach the best score, and executes them more frequently.
      • New penalty alternating direction heuristic PADM that splits the problem into several sub-SCIPs according to a user-provided decomposition (see below). The sub-SCIPs are solved on an alternating basis until a feasible solution of the original problem is found.
      • The GINS heuristic can make use of a user-provided decomposition (see below) by selecting a block of variables that maximizes the potential, and randomly selecting a start variable for the neighborhood and/or by selecting an interval of consecutive blocks as neighborhood, until fixing rate is reached. In this case, no variable is randomly selected. Several new parameters added for the use of a decomposition in GINS.
      • The LP face heuristic now wastes less time if it decides not to run.
      • Improved performance of Adaptive Large Neighborhood Search heuristic on merely continuous problems.
      • All primal heuristics that use sub-SCIPs are now disabled within the heuristics fast emphasis setting.
      • Replaced parameter heuristics/localbranching/useuct by heuristics/useuctsubscip, which affects all LNS heuristics.
      • New parameters heuristics/shiftandpropagate/minfixingratelp and heuristics/locks/minfixingratelp to stop the heuristics after propagating integer fixings if no sufficient fixing of the all variables (including continuous) could be achieved.
      • Changed default value of heuristics/coefdiving/freq from 10 to -1.
      • Changed default value of heuristics/conflictdiving/freq from -1 to 10.
      • Changed default value of heuristics/conflictdiving/lockweight from 1.0 to 0.75.
      • Changed default value of heuristics/rins/nodesquot from 0.1 to 0.3 (due to other code changes, this should not affect default behavior).
      • New value l available for heuristics/gins/potential to allow computation based on local LP solution.
      • The display column for memory usage ("mem") now shows the creator name for every new incumbent solution. The heuristic display characters now represents the type of the heuristic (diving, Large Neighborhood Search, propagation, etc.). Changed default of display/width from 139 to 143.
    • Branching:
      • New rule vanillafullstrong, mostly for scientific purpose.
      • Improved branching point selection when branching on nonlinear variables. Instead of using exactly the LP solution, a point closer to the middle of the variables domain is chosen. Added parameters branching/midpull and branching/midpullreldomtrig.
      • Many updates to parameters of lookahead branching rule.
      • New parameter branching/relpscost/degeneracyaware to switch degeneracy-aware hybrid branching, which adjusts weights of different scores in relpscost (hybrid) branching rule based on degeneracy information and skips strong branching for very high degeneracy rates.
    • Separation:
    • Approximations on the search tree completion and estimates on the tree size have been added.
      • The approximate search tree completion is shown in a new display column.
      • The tree size estimate is used to trigger a restart if, after a reasonable initialization, the estimated size of the remaining tree is large.
      • New parameter group branching/treemodel to specify the tree model.
    • SCIP can now store user decompositions. A GAMS user can specify one decomposition via the .stage variable suffix. Statistics regarding the decomposition are printed to the log before presolving (if display/statistics is enabled) and after presolving. New parameter decomposition/maxgraphedge.
    • Extended the dual proof analysis for infeasible LPs to consider also locally valid rows (new parameter conflict/uselocalrows).
    • If a reference value is given, the primal-reference and reference-dual integrals are calculated automatically and printed within the SCIP statistics.
    • Emphasis settings for numerically challenging instances have been added. They increase numerical stability of (mostly) presolving operations such as (multi-)aggregations at the cost of performance.
    • Renamed parameters misc/allowdualreds and misc/allowobjprop to misc/allowstrongdualreds and misc/allowweakdualreds, respectively.
    • Replaced parameter numerics/lpfeastol by numerics/lpfeastolfactor to specify which factor should be applied to the SCIP feasibility tolerance to initialize the primal feasibility tolerance of the LP solver.
    • New parameter lp/minmarkowitz to set the Markowitz stability threshold. High values sacrifice performance for stability.
    • Changed default of propagating/redcost/useimplics from TRUE to FALSE.
    • See also the full release notes and the release paper.
  • Symmetry detection and handling is now available on Windows, too.
  • Updated Ipopt to 3.13, see above.
  • Removed value soplex2 for option lp/solver. soplex is now the default if no CPLEX license is available.


  • New solver by Andreas Lundell (Åbo Akademi University, Finland) and Jan Kronqvist (Imperial College London, UK).
  • SHOT is a deterministic solver for mixed-integer nonlinear programming problems (MINLPs). It can solve convex and some nonconvex MINLP problems to global optimality. For other nonconvex problems, SHOT acts as a heuristic method, i.e., without providing guarantees of global optimality. For more information, see the GAMS/SHOT solver manual, the SHOT website, and the publications [169, 165].
  • SHOT 1.0.0 (527f1a11) is available for Linux, Mac OS X (≥ 10.13), and Windows. It can be used with a GAMS base system license.



  • New libraries v8.8.3 (aka Optimizer 35.01.04). It has been a longer-than-usual time since the previous library update, so the list of updates and improvements enhancing performance, stability, and correctness is extensive and not reproduced here. For details, visit and search the FICO Community page.



  • As mentioned above, we switched the default application to be associated with GAMS files on Windows from the GAMS IDE to GAMS Studio with this release. The classic GAMS IDE has been shipped with the GAMS system for the last 20 years and is still the workhorse for many GAMS programmers. However, it does not provide all the features we see in modern development environments.
    Both the GAMS IDE and GDXVIEWER rely on a rather old software stack, which is hard to maintain with current operating systems and will become even harder over time. So we plan to drop the GAMS IDE and GDXVIEWER with an upcoming major release.

GAMS Studio

  • New version 1.1.0.
    • Stability improvements.
    • Introduced new settings format.
      This required a reset of all settings. They are saved now in JSON format. As a consequence, Studio 1.0.0 cannot use settings that were written by Studio versions prior to 1.0.0 and vice versa.
    • Changed the default file encoding to UTF-8 for all platforms (this mostly affects Windows, there should be no change for other platforms).
    • Added option to change the default text encoding to Edit -> Encoding -> Select encodings.
    • Introduced Dark Theme for Windows and Linux as well (can be changed through Settings -> Editor).
    • Added editor for GAMS Configuration and menu entry for default GAMS Configuration file.
    • Added option to change display format of numerical values in GDX Viewer.
    • Changed location of default workspace and model library.
    • Changed location where gamslice.txt is put when created using the "About GAMS" dialog to the new standard locations searched by GAMS (see installation notes for details).
    • Improved shortcut layout:
      • Reintroduced "Open Terminal" shortcut as Ctrl+T.
      • Introduced shortcut for "Run MIRO base mode": F8.
      • Introduced shortcut for "Run MIRO hypercube mode": Shift + F8.
      • Introduced shortcut for "Run MIRO configuration mode": Shift + F7.
      • Changed shortcut for focus "Project Explorer" to Ctrl + 1.
      • Changed shortcut for focus "Editor" to Ctrl + 2.
      • Changed shortcut for focus "Parameter Editor" to Ctrl + 3.
      • Changed shortcut to extend and collapse "Parameter Editor" to Ctrl + Alt + 3
      • Changed shortcut for focus "Tab Browser" to Ctrl + 4.
      • Changed shortcut for focus "Process Log" to Ctrl + 5.
      • Changed shortcut of duplicate line to Ctrl+D.
      • Changed shortcut of "Toggle Comment" in "Parameter Editor" to Ctrl + *
      • Changed shortcut of action "Go to matching parentheses" to: Ctrl + B
      • Changed shortcut of action "Select to matching parentheses" to: Ctrl + Shift + B
      • Fixed shortcut on Mac OS X: block edit mode is now CMD+Shift+Arrow Key.


  • Fixed a problem when merging a GDX file with name .gdx.


  • Added new option dSetText to control the reading of explanatory text for set elements of domain sets.

Object Oriented APIs

  • Option pySetup has been removed from the class GAMSOptions.
  • Removed GAMS return code 116 ("Could not find GMSPython") from the enumerate type representing the GAMS return code.
  • Fixed a memory leak with GAMSModelInstance.solve.


  • As announced, dropped support for Microsoft Visual Studio 2013.


  • GAMS Python API is now distributed in source code under the MIT open source license.
  • To access the GAMS API, the Python interpreter needs to find files in <GAMS Systemdirectory>/apifiles/Python/api_XY and <GAMS Systemdirectory>/apifiles/Python/gams, where XY corresponds to the Python version X.Y, e.g. 3.7. The GMSPython installation is already set up to find all required files. The documentation section Let Python find the GAMS Python files gives details on how to use an external Python system with GAMS.
  • There is a different directory structure in <GAMS Systemdirectory>/apifiles/Python. The content of the api directory has been moved to different places:
    • api_27 for the binary Python 2.7 API files,
    • src for the files required to build the expert-level API files from source,
    • gams for source files of the GAMS Python API plus a few extra Python source files for working with indexed EMP syntax, e.g. emppython1, and
    • thirdparty for the Python package ply for processing of indexed EMP syntax.

Expert Level APIs

  • We plan to remove the GAMSX API with one of the next major releases.
  • Added palSetSystemName to setup a generic auditline in PAL. Increased PAL API version to 3.

Model Libraries

GAMS API Library

GAMS Data Library

New models:

GAMS Model Library

GAMS Test Library

New models:

PSOPT Model Library

31.1.1 Maintenance release (May 16, 2020)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Jan Abrell, Michael Ferris, Nick Sahinidis, and Karlo Šepetanc.

GAMS System


  • Fixed a bug where loading an empty universe from a GDX file caused an error.
  • Fixed a bug in gamsinst that is used by the IDE to display available solvers.
  • GAMS continues to search directories for the license and configuration file even if the construction of some directory names fails due to the absence of some environment variables, e.g. HOME.

GAMS Data Exchange (GDX)

  • Fixed a bug where domain violations in higher dimensions might have been undetected when writing symbols to GDX.



  • Fixed a bug introduced with 31.1.0 where the GRB_LICENSE_FILE environment variable was incorrectly dropped.


  • New libraries 9.2.7.


GAMS Studio

  • New version 1.1.1.
    • Added command line parameter editor warnings for missing values.
    • Fixed problem with command line parameters not being updated when changing group.
    • Fixed behavior of Ctrl - End shortcut in process log and lst file view.
    • Fixed settings export not working when file already exists.
    • Fixed numpad not working when running Studio from an AppImage on Linux.
    • Fixed Shift+Arrow Key not working when running Studio from an AppImage on Linux.

Object Oriented APIs

  • Fixed a bug in the Python API when exporting options (GAMSOptions.export()) that contain defines.

Model Libraries

GAMS Test Library