35 Distribution

35.1.0 Major release (April 29, 2021)


We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Matthew Adams, Jürgen Apfelbeck, Wolfgang Britz, Yacine Gaoua, Carolin Kellenbrink, Masoud Javadi, Bruce McCarl, Scott McDonald, Will Raymond, Tom Rutherford, Sebastian Spieker, and Kirk A. Yost.


  • macOS 11 (on Intel CPUs) has been added to the list of supported macOS versions.

GAMS System


  • Added new dollar control options gdxLoad and gdxUnload to load and unload symbols from and to GDX files in a single instruction at compile time.
  • Print an extra log line for echo dollar control options $echo, $echoN, and $onEcho, which write to an external file. When running GAMS from one of the GAMS IDEs, this log line can be clicked to open the file created.
  • Extended the report generated by dmpSym and dmpUserSym to include another column reporting a memory estimate for each set, parameter, variable, and equation.
  • Removed the columns DIM-OK, ACCESS, SPECVAL, EXTERN, TABLE, DOMAIN, and LAGLEAD from the report generated by dmpUserSym. This information is very technical and mostly of internal interest. These columns are still available with dmpSym.
  • The status of Multi-Threading for the Grid and Multi-Threading Solve Facility has been changed from beta to released and fully supported.
  • Fixed that the stars option was ignored for some messages in the output file.
  • Fixed a problem that causes default records in the data statement or when loaded from GDX (see $load) being ignored with implicit set definition. So with
    Set i;
    Parameter p(i<) / i0 0, i1 1, i2 2 /;
    only i1 and i2 made it into i. Now, i0 is added as well.
  • Fixed a problem, where $onDotL and $onDotScale were ignored in put statements.
  • Fixed a problem, where $onDelim was applied incorrectly to display and option statements.
  • Fixed a problem, where $onSymXRef and $onUElXRef were ignored when there were too many references.
  • Fixed and extended the behavior of $eval: If a GAMS function was hidden by a user defined symbol, $eval ignored the latter. This has been changed. Now, the GAMS function needs to be prefixed with system. to be accessed in this case. An example for this behavior is given here.
  • Fixed a potential problem when doing a filtered load of symbols with domain violations through EmbeddedCode.
  • Fixed an unwanted compilation error that happened if $onExternalInput or $onExternalOutput were used on the same line and after $if.
  • Fixed a problem where dumpOpt in combination with $onVerbatim skipped a leading substitution character in an $ifThen block.




  • Updated Intel MKL to version 2021.2.0 on Linux and macOS.



  • Fixed an issue where a problem with SOS constraints was rejected due to falsely detected negative variable bounds.


  • New libraries for CONOPT3: 3.17K
    • Fixed perturbations of the Jacobian for external equations where 2nd order derivatives are not available.
  • Fixed an issue resulting in insufficient CONOPT3 memory.
  • Fixed an issue with multi-threading in CONOPT 4.


  • New libraries
  • Added option usercallparmfile: Command-line parameter include file used in GAMS command-line calls triggered by BCH.
  • Fixed incorrect reporting of infeasible solutions of the unrelaxed model in feasopt mode.
  • Fixed incorrect variable matching for options objnreltol and objnabstol.
  • Fixed parsing of individual objective functions for multiobjective optimization (any ordering of equation definitions is allowed now).


  • Fix problem with handling of row/column patterns introduced in GAMS 34.3.


  • New libraries 9.1.2.
  • Added possibility to write a single GDX file with the solution pool (see solnpoolmerge).
  • Added the following options:
    • solnpoolmerge: Enable merged solution pool GDX.
    • solnpoolnumsym: Number of variable symbols in merged solution pool GDX.
    • solnpoolprefix: Prefix for variable symbols in merged solution pool GDX.
    • miptrace: Filename of MIP trace file (formerly hidden and undocumented).
    • miptracenode: Node interval when a trace record is written (formerly hidden and undocumented).
    • miptracetime: Time interval when a trace record is written (formerly hidden and undocumented).
  • Fixed incorrectly processed (hidden) options isvname and appname.

GUSS/Scenario Solver

  • Measure time internally rather then relying on solvers' reported resUsd to determine the overall running time.


  • New GAMS/Knitro link using the KN interface.
  • Enabled the possibility to use solvelink = 5 on Linux (other platforms were already enabled).
  • Added support of variable and equation scaling.
  • Added options:
    • names: Enable to pass variable and equation names to Knitro.
    • blasoptionlib: Specifies a dynamic library name that contains object code for BLAS/LAPACK functions.
    • bndrange: Specifies max limits on the magnitude of constraint and variable bounds.
    • cg_pmem: Specifies the amount of nonzero elements per column of the Hessian of the Lagrangian which are retained when computing the incomplete Cholesky preconditioner.
    • cg_precond: Specifies whether an incomplete Cholesky preconditioner is applied during CG iterations in barrier algorithms.
    • cg_stoptol: Specifies the relative stopping tolerance used for the conjugate gradient (CG) subproblem solves.
    • convex: Declare the problem as convex by setting to 1 or non-convex by setting to 0.
    • cpuplatform: Specify the target instruction set architecture.
    • initpenalty: Specifies the initial penalty parameter used in the Knitro merit functions.
    • linesearch: Indicates which linesearch strategy to use for the Interior/Direct or SQP algorithm to search for a new acceptable iterate.
    • newpoint: Specifies additional action to take after every iteration in a solve of a continuous problem.
    • presolve_level: Set the level of presolve operations to enable through the Knitro presolver.
    • presolve_initpt: Control whether the Knitro presolver can shift a user-supplied initial point.
    • presolve_passes: Set a maximum limit on the number of passes through the Knitro presolve operations.
    • presolveop_tighten: Determine whether or not to enable the Knitro presolve operation to tighten variable bounds.
    • restarts: Specifies whether or not to enable automatic restarts in Knitro.
    • restarts_maxit: When restarts are enabled, this option can be used to specify a maximum number of iterations before enforcing a restart.
    • strat_warm_start: Specifies whether or not to invoke a warm-start strategy.
    • findiff_relstepsize: Specifies the relative stepsize used for finite-difference gradients.
    • findiff_terminate: Specifies the termination criteria when using finite-difference gradients.
    • infeastol_iters: The optimization process will terminate if the relative change in the feasibility error is less than infeastol for infeastol_iters consecutive infeasible iterations.
    • xtol_iters: The optimization process will terminate if the relative change in all components of the solution point estimate is less than xtol for xtol_iters.
    • bar_conic_enable: Enable special treatments for conic constraints when using the Interior/Direct algorithm (has no affect when using the Interior/CG algorithm).
    • bar_initpi_mpec: Specifies the initial value for the MPEC penalty parameter \(\pi\) used when solving problems with complementarity constraints using the barrier algorithms.
    • bar_linsys: Indicates which linear system form is used inside the Interior/Direct algorithm for computing primal-dual steps.
    • bar_maxcorrectors: Specifies the maximum number of corrector steps allowed for primal-dual steps.
    • bar_slackboundpush: Specifies the amount by which the barrier slack variables are initially pushed inside the bounds.
    • bar_switchobj: Indicates which objective function to use when the barrier algorithms switch to a pure feasibility phase.
    • act_lpfeastol: Specifies the feasibility tolerance used for linear programming subproblems solved when using the Active Set or SQP algorithms.
    • act_lppenalty: Indicates whether to use a penalty formulation for linear programming subproblems in the Knitro Active Set or SQP algorithms.
    • act_lppresolve: Indicates whether to apply a presolve for linear programming subproblems in the Knitro Active Set or SQP algorithms.
    • act_parametric: Indicates whether to use a parametric approach when solving linear programming (LP) subproblems when using the Knitro Active Set or SQP algorithms.
    • act_qppenalty: Indicates whether to use a penalty formulation for quadratic programming subproblems in the Knitro SQP algorithm.
    • mip_clique: Specifies rules for adding clique cuts.
    • mip_cutfactor: This value specifies a limit on the number of cuts added to a node subproblem.
    • mip_heuristic_terminate: Specifies the condition for terminating the MIP heuristic.
    • mip_intvar_strategy: Specifies how to handle integer variables.
    • mip_mir: Specifies rules for adding mixed integer rounding cuts.
    • mip_selectdir: Specifies the MIP node selection direction rule (for tiebreakers) for choosing the next node in the branch and bound tree.
    • mip_zerohalf: Specifies rules for adding zero-half cuts.
    • ma_outsub: Enable writing algorithm output to files for the multi-algorithm (algorithm=5) procedure.
    • ms_num_to_save: Specifies the number of distinct feasible points to save in a file named knitro_mspoints.
    • ms_outsub: Enable writing algorithm output to files for the parallel multistart procedure.
    • ms_savetol: Specifies the tolerance for deciding if two feasible points are distinct.
    • par_msnumthreads: Specify the number of threads to use for multistart (when ms_enable = 1).
    • out_csvinfo: Controls whether or not to generates a file knitro_solve.
    • out_csvname: Use to specify a custom csv filename when using out_csvinfo.
    • out_hints: Specifies whether to print diagnostic hints (e.g. about user option settings) after solving.
    • outappend: Specifies whether output should be started in a new file, or appended to existing files.
    • outdir: Specifies a single directory as the location to write all output files.
    • outmode: Specifies where to direct the output from Knitro.
    • outname: Use to specify a custom filename when output is written to a file using outmode.
  • Added values to the following options:
  • Updated the following options to KNITRO defaults:
  • Deprecated options:
  • Removed formerly deprecated options:
    • maxcrossit
    • mu
    • feasible
    • feasmodetol
    • barrule
  • Removed unused option reform.
  • Fixed an issue with options not being forwarded to Knitro.


  • New libraries 13.0.262:
    • LP Solver Improvements:
      • With new enhancements made to the simplex solvers, the average performance on large instances where the number of variables is several times larger than the number of constraints has increased by several folds compared to the previous version.
      • Improved performance on LP’s when using multiple cores with concurrent execution of Primal, Dual, and Barrier.
    • MIP (Mixed Integer Program) Solver:
      • Improved selection of defaults for cuts and heuristics.
    • Global Solver Improvements:
      • Highly improved ability to recognize convexity of various composite functions, especially involving logarithms and sums, which can gives a performance improvement of one order-of-magnitude in these cases.
      • Performance improvement for convex-concave type functions.
      • Enhanced capabilities for converting nonlinear functions to linear forms.
      • Substantial performance improvement for non-convex quadratic models.


  • New libraries 10.0 (20210330).
  • We plan to drop LocalSolver and LocalSolver70 by the end of 2021.


  • New libraries 9.2.41.


  • Increased the internal MAXFUN limit (from 5000 to 10000) on the number of components (inputs, outputs, taxes, etc.) in any MPSGE row.


  • New libraries 5.34.


  • Added option usercallparmfile: Command-line parameter include file used in GAMS command-line calls triggered by BCH.


  • New libraries 7.0 (c53330372e).


  • New libraries 7.7.7 and new GAMS/SNOPT link.
  • Changed option value to SNOPT default for the following options:
  • Removed the following parameters:
    • Start Objective Check
    • Start Constraint Check
    • Stop Objective Check
    • Stop Constraint Check
    • Derivative Level



GAMS Studio

  • New version 1.6.1.
    • New feature: Static Code Completion which can be activated by pressing Ctrl + Space.
    • New feature: Allow to move multiple lines up and down using Ctrl + Shift + Arrow.
    • New feature: Allow to close view tabs using the middle mouse button.
    • Added instant update of tab size in editor when changing corresponding setting.
    • Added word under cursor as default search entry when no text selection is present.
    • Allow to move block selections using the arrow keys.
    • Added *.inc as common extension for GAMS files.
    • Added user defined extensions for GAMS files.
    • Added automatic reloading of files that appear in the GAMS log.
    • Added setting for user defined extensions for files to be automatically reloaded.
    • Added auto-reload button to file-changed dialog.
    • Added Studio Documentation entry in Help menu.
    • Added setting to change default open file behavior (new group or current group) and adjusted menu entry for alternative file opening behavior.
    • Hotkey F1 jumps to the corresponding documentation entry for Project Explorer, Process Logs, GDX Diff Dialog, and Search Widget.
    • Improved GDX Viewer, e.g.:
      • Added facility to access domains and filters in Table View.
      • Show original index position of domains in both list view and table view.
      • Improved automatic column widths.
    • Stability improvements and minor bug fixes, e.g.:
      • Fixed crash when LST file is missing (e.g. because of setting output=NUL).
      • Fixed "Reset View" not resetting splitter in the LST/LXI-Viewer.
      • Fixed crash related to comment shortcut in solver option editor when pressing it multiple times.
      • Fixed wrong sort order after resetting GDX Viewer.
      • Fixed GAMS engine not appending /api to the URL on macOS when clicking OK directly after editing the URL.
      • Fixed eolCom not working in some dollar control option lines (like $include).
      • Fixed jump to next search result if the result is in a different file and the current one has no results.
      • Fixed jump to search result occasionally not working.
      • Fixed Find Next/Prev behavior for .opt files.


  • Added a new line at the end of the file, which was missing if the option noHeader is set.


  • Added command line option strict. When set to true, gdxmerge will terminate with an error in case input files cannot be found or the output file already exists.


  • Fixed a potential missing initialization if incRC is set for symbols with either cDim or rDim equal 0.



  • With the next major release the last argument opt: pointer of function cfgAlgReadyAPI will be dropped.


  • Functions dctLoadWithHandle, dctSymDomIdx, dctDomNameCount, and dctDomName have been deprecated and will be removed in the near future.


  • Improved error handling.
  • New optional parameter domains for gdxWriteSymbolStr and gdxWriteSymbolRaw that can be used to specify the domains of the symbol. Parameter needs to be a list of strings.


  • Updated to better handle cases where quadratic structure is explicitly detected (i.e. useQ is set) and some but not all of the nonlinear equations are quadratic. Several new functions have been added. In addition, some existing functions have been renamed - the new names are more descriptive and/or more consistent with new and existing function names. The old names are still available as deprecated synonyms - we expect to remove these synonyms in the near future and potentially without warning.
    • Updated API version to 20 - compatible with some older API versions.
    • New read-only properties:
      • gmoObjLNZ: Number of linear nonzeros in objective gradient.
      • gmoObjNLNZEx: Number of GMOORDER_NL nonzeros in objective gradient.
      • gmoObjQNZEx: Number of GMOORDER_Q nonzeros in objective gradient.
      • gmoObjCVecNZ: Number of nonzeros in c vector of objective (-1 if Q information not used).
      • gmoObjConstEx: Objective constant - this is independent of useQ.
      • gmoObjQConst: Constant in solvers quadratic objective.
    • New functions:
      • gmoGetObjCVec: Get c vector of quadratic objective.
      • gmoGetObjSparseEx: Get information for gradient of objective function (sparse).
      • gmoGetRowStatEx: Get Jacobian row nonzero counts: total and by GMOORDER_XX.
      • gmoGetRowCVecNZOne: Number of nonzeros in c vector of row si (-1 if Q information not used).
      • gmoGetRhsOneEx: Get individual equation RHS - independent of useQ.
      • gmoGetRowSparseEx: Get info for one row of Jacobian (sparse).
      • gmoGetRowCVec: Get c vector of the quadratic form for one row.
      • gmoGetRowQConst: Get the constant of the quadratic form for one row.
    • New read-write properties:
      • gmoHessInclQRows: if useQ is true, this boolean property toggles the inclusion of GMOORDER_Q rows in the Hessian.
        The default was originally true but has accidentally been changed to false with this release (35.1.0). That is, if useQ is set, then the Hessian does not include entries from quadratic equations anymore. The default is changed back to true in GAMS 38.2.0.
    • Renamed properties/functions:
      • gmoObjQNZgmoObjQMatNZ: Number of nonzeros in lower triangle of Q matrix of objective (-1 if useQ is false).
      • gmoGetObjQgmoGetObjQMat: Get lower triangle of Q matrix of objective.
      • gmoGetRowQgmoGetRowQMat: Get lower triangle of Q matrix of one row.

High-Level APIs

  • We might drop support for macOS 10.14 for the C++ API with the next major release.
  • Fixed an issue with an updater symbol that tries to update a non-existing symbol in the model instance. This used to make the solve method of GAMSModelInstance fail, but now just increases the no-match count.
  • Fixed GAMSOptions.Output (.NET), GAMSOptions.setOutput (Java), and GamsOptions.output (Python) parameter being ignored in GAMSJob::Run().

Low-Level APIs

  • For the next major releases, some clean-up of the distributed APIs is planned. In particular, it is planned to remove all Delphi variants but the dcp version (i.e. gdxdcpdef.pas) and all Fortran variants but the f9 version (i.e. gdxf9def.f90). Please contact us, if that causes any trouble for your operation.


  • Added functions palDataDirs and palConfigDirs to retrieve standard locations searched by GAMS.

Model Libraries

GAMS Model Library

GAMS Test Library

New models:

Solver/Platform availability matrix

x86 64bit
MS Windows
x86 64bit
x86 64bit
CBC 2.10
CPLEX 20.1
IPOPT 3.13
LINDO 13.0
SCIP 7.0
SHOT 1.0
XPRESS 36.01

35.2.0 Minor release (June 02, 2021)


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, Johannes Hedtrich, Bruce McCarl, Evangelos Panos, Thomas Rutherford, and Kirk A. Yost.

GAMS System


  • Allow to write point files with asynchronous solves as well.
  • Moved the log line pointing to a reference file from the end of the compilation phase to the end of the run, to make it easier to recognize.
  • Automatically deactivate holdFixed if a model is solved asynchronously, since this could lead to inconsistent solutions otherwise. Note that this can make a square model non-square as in cns01. Also note, that this could require some adjustment to models which actually relied on the fact, that models solved like this did not update the solution for fixed variables. Such a change was done for the model jacobi.
  • Fixed a problem where the file path specified with $gdxIn or $gdxLoad was ignored when inputDir was applied.
  • Fixed a potentially broken work file written with previousWork.
  • Fixed the default for command line parameter empty. It should be on but was off.
  • Fixed the dollar control options $setComps, $setNames, and $splitOption: They should generate scoped compile-time variable but generated local ones.
  • Fixed potentially wrongly reported bounds for models solved with solveLink=6.
  • Fixed missing info about objective variable with solveLink = 3 and asyncSolLst = 1.


  • Fixed handling of the empty UEL in the EMP info file


  • Removed package tqdm.



  • New library with some minor bug fixes.


  • Fixed exporting of variable scale attribute in DumpGDX format.


  • Fixed incorrect model status for feasible models after time out in multi-objective optimization.


  • Fixed incorrect model status for KNITRO return code "All nodes have been explored. Integer feasible point found." (KN_RC_MIP_EXH_FEAS).


GAMS Studio

  • New version 1.6.2. with various bug fixes, stability improvements and minor enhancements, e.g.:
    • Fixed issues with enumerated parameters in extended parameter editor.
    • Fixed issues with "set", "option", and "table" in code-completer.
    • Fixed code-completer opening in non-code files.
    • Fixed "Open in current group" not being used for "User Model Library" and "New file".



  • Fixed a bug in the GDX expert-level API that required gdxSymbolGetDomain to be called in a read context (e.g. after gdxDataReadStrStart).
  • Fixed a bug in gams2numpy functions gdxReadSymbolStr and gdxReadSymbolRaw that altered the case of the symName argument.


  • Fixed broken function dctSymDomNames for symbols that have the universe as part of their domain. This caused a crash in sensitivity analysis of CPLEX and Gurobi for models with such variable or equation symbols.

Model Libraries

GAMS Model Library