39 Distribution

39.1.0 Major release (May 03, 2022)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Marcel Adenauer, Wolfgang Britz, Rob Davies, Torbjoern Jansson, Bruce McCarl, and Yihe Zhuo.

GAMS System


  • Added basic model statistics (range of absolute non-zero values for the bounds, right hand sides and matrix coefficients) to the output file, and log.
  • Added model attributes to access the values of the basic model statistics also programmatically: rngBndMax, rngBndMin, rngMatMax, rngMatMin, rngRhsMax, rngRhsMin.
  • Added new command line parameter multi to initialize the state of $on/offMuli and $on/offMultiR.
  • Extended the syntax of $[on][off]Echo[S][V], $[on][off]Put[S][V], $[on][off]EmbeddedCode[S][V], and [end][pause]EmbeddedCode[S][V] with an optional suffix to allow nested use. Note that this might trigger an error for code that was OK before. In the following example, the suffix at $onEcho was ignored in the past. Now, this will result in an error, since there is no $offEcho with matching suffix:
    $onEcho.abc > x.txt
  • In embedded code Python, the Python interpreter stays alive even when the embedded code section ends with $offEmbeddedCode and endEmbeddedCode. So one has access to Python objects across embedded Python code sections. Nevertheless, the gams object gets newly initialized (with the exception of continueEmbeddedCode). Hence old references to gams or derived objects, e.g. sym = gams.get("sym") still exist in Python but the connected external resources are no longer available. Accessing these objects results in a crash as demonstrated in the following example:
    Set s1 / i1*i3 /, s2 / j1*j3 /;
    parameter p1(s1, s2);
    $onEmbeddedCode Python:
    s1 = gams.get('s1')
    s2 = gams.get('s2')
    $onEmbeddedCode Python:
    p1 = [(i, j, 3.14) for i,j in zip(s1, s2) ]
    gams.set('p1', p1)
    $offEmbeddedCode p1
    In the second embedded Python code section the object references s1 and s2 use unavailable external resources, and the code in the section will crash GAMS. There is no need to use gams or derived objects from previous embedded code sections, since one can always use the current gams object. For legacy code that makes use of this unintended feature, we allow the use of the deprecated (and hidden) command line option freeEmbeddedPython=0 for some time to get the old behavior. If you find yourself in need to set this option, you need to rework your embedded Python code section to prevent use of previous gams and derived objects. The option freeEmbeddedPython will (as announced) eventually be removed.
  • Added new command line parameter and option ECImplicitLoad, as well as related dollar control options $on/offECImplicitLoad.
  • Added new command line parameters ConnectIn and ConnectOut to instruct GAMS to pass the Connect YAML files provided by these option to the Connect framework at the beginning of a GAMS job (ConnectIn) and at the end (ConnectOut) of the GAMS job.
  • Added new put_utility command ECArguments to extend the embedded code arguments with a dynamic text.
  • Added explicit range checking for some Put File Attributes. In the past, unexpected values for some attributes (e.g. file.nr = 8;) could have led to unwanted output. Now, unacceptable values get projected to the nearest acceptable value.
  • Updated use of decimals (file.nd) value in floating-point put output. Previously, the decimals value was treated as a specification, with putfile error messages resulting if the output contained fewer decimals. We treat the decimals value as a limit now: it's not an error if fewer digits are shown because of the width limit or for other reasons.
  • Removed the GDX file gmspfmap.gdx that contained some partial mapping of files to components from the system directory.
  • There was a hidden option work. This cannot be used anymore. The command line parameter or model attribute workSpace should be used instead.
  • Allow holdFixed=1 for EMP, but not EMPSP models. The partly reverts the change of holdFixed for EMP models from GAMS 38.
  • Fixed a bug where the command line parameters holdFixed, nodLim, workFactor and workSpace took precedence over the related model attributes.
  • Fixed an error with constant evaluation in data statements for scalar symbols in a parameter statement.
  • Fixed output of very large negative numbers (e.g. -DBL_MAX) to trace files.
  • Fixed minor rounding and display issues with double-precision numbers. This is relevant to values displayed in the listing file, in put files, and less commonly in the GAMS log. Ties are now resolved using the round-to-even rule instead of round-towards-zero. This new tie-breaking rule is consistent with the display routines in C++, Python, Julia, and R. For example:
    • with option decimals=5, scalar p / 9999998.4 / was displayed as 1.000000E+7 – now as 9.999998E+6
    • with option dispwidth=9, decimals=5, scalar p / -8.123441235 / was displayed as -0.8123E+1 – now as -8.1234412
    • very small values (1e-250 or less) were displayed as 0 but are now displayed using E-format in the usual way
    • displaying 1.5 or 2.5 with zero decimals both now show 2, while previously 1.5 would display as 1
    • similarly, 1.75 with decimals=1 now displays as 1.8 instead of 1.7 as it did previously


  • We have added the Connect framework to the distribution. Connect gives unified and platform independent access to data exchange with different formats (e.g., CSV and Excel). The instructions how to access the various data sources are given in YAML syntax. Connect is available as a standalone command line utility (gamsconnect), via the GAMS command line parameters ConnectIn and ConnectOut, and via embedded Connect code. The Connect framework is currently in beta status.

Embedded Code

  • Allow implicit loading of symbols in embedded code. In the past the embedded code had to "set" a symbol and the symbol has to be explicitly imported on the $off/end/pauseEmbeddedCode line. This is no longer necessary. By default, a symbol that has been "set" by the embedded code will be imported into GAMS. The behavior with respect to this implicit loading is controlled by the command line parameter ECImplicitLoad and the dollar control options $on/offECImplicitLoad.

Embedded Connect Code Facility

  • We added the new embedded code engine Connect. The embedded Connect code gives access to the Connect framework. The YAML formatted "code" can be utilized to import and export data with GAMS during compile and execution time.

Embedded Python Code Facility

  • The Python version of GMSPython has been updated to 3.8.13.
  • Added the packages cerberus and pyyaml-include to GMSPython.
  • Removed decoration (---) from log messages printed using gams.printLog() and fixed a bug that prevented long messages from being displayed correctly.

Extrinsic Function libraries

  • As announced the extrinsic function library parcclib has been dropped.
  • The mutex library mtxcclib, hidden in the system since 24.6, has now been documented and modified. With this version a mutex first has to be created via the function Create before it can be used (e.g. locked).

Windows Installer

  • The installer no longer creates a Desktop icon for the GAMS IDE by default.
  • Fixed bug that prevented command line parameter /desktopIcons=no from having an effect.



  • New libraries 3.17M.
    • Fixed issue with incorrect infeasibility reporting for infeasible CNS models or models with infinite post-triangular variables.
  • New libraries 4.27.
    • Improved preprocessor on models with very small coefficients and models with constant nonlinear Jacobian elements.
    • Improved detection of post-triangular parts in CNS models.
    • Improved speed of analyzing the numerical stability and density of definitional constraints.
    • Improved numerical stability of creating and testing the initial basis.
    • Added options:


  • New libraries 4.0.5.
    • Improved performance for LP and MIP solving.
    • Added support for convex quadratic equations in continuous problems (model types QCP and RMIQCP). Currently, marginals are not provided if quadratic constraints are present.
    • Added option to find an Irreducible Inconsistent Subsystem (IIS) for an infeasible LP or MIP. New options iis to enable the IIS finder and IISMethod to specify IIS finder method.
    • New parameter BarOrder to specify ordering algorithm in Barrier solver.
    • For GAMS/COPT-Link users: If no COPT license is available, COPT can still be used for non-commercial use and LPs with at most 10000 variables and 10000 constraints and for MIPs/QCPs with at most 2000 variables and 2000 constraints.


  • New libraries 22.1.0.
    • New options:
      • lowerobjstop: in a minimization MILP or MIQP, the solver will abort the optimization process as soon as it finds a solution of value lower than or equal to the specified value.
      • upperobjstop: in a maximization MILP or MIQP, the solver will abort the optimization process as soon as it finds a solution of value greater than or equal to the specified value.
    • Removed CPLEX Remote Object Server and Distributed MIP.
    • Removed options computeserver, polishtime, rampupdettimelimit, rampupduration and rampuptimelimit.
  • New option exactkappa: Report exact condition number in quality report. Note: Previously, the exact condition number has always been reported. Now, default is to not do it due to possibly high computation times.
  • Add previously hidden options:
    • iafile: secondary option file to be read in interactive mode triggered by iatriggerfile.
    • iatriggerfile: file that triggers the reading of a secondary option file in interactive mode.
    • iatriggertime: time interval in seconds the link looks for the trigger file in interactive mode.
    • ltol: basis identification primal tolerance.
    • mtol: basis identification dual tolerance.
    • readparams: read CPLEX parameter file.


  • Introduced an experimental and hidden option pipsStages to annotate the resulting deterministic equivalent with PIPS-IPM++ conforming block information.


  • For EMPSP models feasible empty rows will no longer be sent to the solver.


  • We plan to drop GLOMIQO with the next major release. The ANTIGONE solver (a superset of GLOMIQO) remains in the system.


  • GUSS/ScenarioSolver allows now to manually scale model instances via the .scale variable and equation suffix together with model attribute scaleOpt=1.


  • New libraries 3.14.6.


  • Added support for models with more than \(2^{31}\) entries in the coefficients matrix.
  • Changed handling of initial levels and marginals, see initvalues0 and initvalues.
  • Only scale the model instance if scaleOpt is set to 1.
  • Added options:
    • initvalues0: enable use of initial guess for levels and marginals (first solve).
    • initvalues: enable use of initial guess for levels and marginals (subsequent solve).


  • We plan to drop LGO with the next major release.


  • New libraries 13.0.340.


  • New libraries 9.3.20.
  • For GAMS/MOSEK and GAMS/OsiMosek, a separate MOSEK license is now required also for academic GAMS licenses that include a GAMS/MOSEK link license but no full GAMS/MOSEK license.


  • We plan to drop MSNLP with the next major release.


  • New libraries 4.3.1.
    • Fixed that GAMS options were ignored when a solver options file was specified.


  • New libraries 6.11.

SCIP Optimization Suite

  • New libraries PaPILO 2.0 (60ab076).
  • New libraries SoPlex 6.0 (f084e555).
  • New libraries SCIP 8.0 (899dc92dda).


  • We plan to drop XA with the next major release.


  • New libraries 39.01.06.


GAMS Studio

  • New version 1.10.1.
    • New feature: Added pin view: The main edit area can be split vertically or horizontally to show a second editor.
      • Ctrl + Left Click on a tab creates a vertical split.
      • Ctrl + Shift + Left Click on a tab creates a horizontal split.
    • Added new search scope: Folder (aka Find in Files).
      • This allows users to search a directory on disk without having to load the whole directory in Studio first.
    • Some rework of the "Search and Replace" dialog:
      • Added file exclusion pattern input field and functionality.
      • Added info about number of files searched to search dialog.
      • Changed default position of search dialog to top right.
      • Search now respects open file behavior settings when jumping to results in unopened files.
      • Fixed crash in search when current editor has no file associated.
      • Fixed search not being interruptible when searching many small files.
    • Added GDX Viewer tab to the settings dialog.
    • Added new setting to specify the default symbol view of the GDX Viewer.
    • User model libraries have been moved to the first tab of the Model Library Explorer.
    • Stability improvements, bug fixes, and minor enhancements, e.g.:
      • Configuration editor now displays gamsconfig.yaml file only.
      • Added search related group to project explorer when files where found that were unknown to Studio.
      • Added automatic deactivation of search selection when leaving "Selection" search scope.
      • Added feedback for empty search term, invalid regex, and invalid path in search dialog.
      • Added completer handling for $offEcho.
      • Changed behavior of completer: Allow all keywords after opening a paired dollar control option (DCO) and showing closing DCOs first.
      • Ensure unique project name and keep log name in sync with project name.
      • Fixed crash in ModelLibrary dialog on Ctrl-rightClick on entry.
      • Fixed white table headers in dark mode.
      • Fixed code completer activation issues.
      • Fixed broken syntax in data statements with division.


  • The tool has been reimplemented and now uses the MPS reader of the HiGHS solver.
  • If the MPS file appears to be in fixed form (row or character names with spaces and at most 8 characters), then parsing in fixed form is attempted.
  • GDX and GMS files are now also written if no GDX and GMS filenames are provided explicitly.
  • Dropped support for writing an MPS file.
  • Dropped support for OBJNAME section.
  • Sections SOS and SETS are now assumed to follow the format used by CPLEX, GUROBI, and FICO XPRESS.
  • Dropped parameters NAME, N, RHS, RANGES, BOUNDS, MPSOut, Trace.
  • Added parameter COLUMNINTVARSAREBINARY to specify how to handle integer variables that appear first in COLUMNS section.
  • Quadratic coefficient matrices are no longer written in symmetric form. Zero coefficients (eps) that were written to GDX in certain situations are now omitted.
  • See also the MPS2GMS documentation.


GAMS Transfer Matlab

  • New version 0.2.0:
    • Improved documentation.
    • Added "equals" method to Container and Symbol classes to compare containers or symbols, respectively.
    • Added "copy" method to Symbol classes to copy symbols to another container.
    • Added support to read symbols directly from Container (not just ConstContainer).

GAMS Transfer Python

  • GAMS Transfer will now accept any mixed-case string representations of special values for undef, na, and eps (i.e., Undef or UnDeF are now valid).
  • Performance enhancements associated with reading/writing GAMS special values.
  • Performance enhancement in .removeSymbols(): isValid check flag is no longer reset for all symbols in the Container if removing a Parameter, Variable or Equation.
  • Fixed bug when replacing string special values in a dataframe whose index was not uniformly spaced.
  • Fixed bug when testing scalar values with .isUndef.


  • Special value -0.0 for EPS is now properly recognized.
  • gmdCopySymbol allows to copy parameter, variable, and equation symbols into a set symbol.
  • Added gmdGetUserSpecialValues to access special values GMD currently accepts.


  • Added properties gmoHessNZ64, gmoHessMaxNZ64, and gmoHessLagNZ64 and functions gmoHessStruct64 and gmoHessValue64 to get Hessian element counts as 64-bit integer.
  • Added properties gmoQNZ64 and gmoGNLNZ64: all properties returning 32-bit Jacobian nonzero counts now have 64-bit counterparts.
  • Fixed a memory leak in the Hessian evaluation: the leak occurred during speculative Hessian evaluations, i.e., evaluations with a tight memory limit intended to see how memory-intensive Hessian evaluation is and if Hessians should be used by the solver.

High-level APIs

  • GamsModelInstance.solve() falls back to a warm start in case a hot start fails.
  • Added read property for GAMSSet.SetType (.NET, Python) and GAMSSet.getSetType (Java) to distinguish multi and singleton sets.
  • New optional argument setType=SetType.multi in GAMSDatabase.AddSet() (.NET), GamsDatabase.add_set() and GamsDatabase.add_set_dc() (Python), and GAMSDatabase.addSet (Java) to set type of set.
  • Fixed defined enumerated value for options FDOpt and DumpOpt in Java interface.

Model Libraries

GAMS Model Library

GAMS Data Library

GAMS Test Library

FIN Library

PSOPT Library