46 Distribution

46.1.0 Major release (February 17, 2024)


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, Simon Wesley Bowen, Ruud Egging-Bratseth, Wolfgang Britz, Katja Jensen, Bruce McCarl, Scott McDonald, Evangelos Panos, Hailie Petrick, Alfonso Rodriguez Osuna, and Tom Rutherford.


  • As announced, dropped support for macOS 11 (Big Sur).

GAMS System


  • Added new put_utility commands stdOut and stdErr to send a message to standard output and error streams independent of the GAMS log file.
  • Added new command line parameter gdxSymbols to select symbols that get exported when command line parameter GDX is set.
  • Print warning to the log if execute_load or execute_loaddc is called without specifying any symbols to be loaded.
  • Changed default for option threads to 0. The new meaning of setting threads=0 is that the solver will decide on the number of processors to use. In particular, the following changes in behavior can be observed for threads=0:
    • MIP solvers called by BARON no longer use multiple processors.
    • CBC may use multiple processors in linear algebra subroutines, but not for parallelization in root node processing or the tree search.
    • COPT, CPLEX, GUROBI, KNITRO, and XPRESS now decide automatically on the number of processors to use.
    • IPOPT(H) and LINDO / LINDOGlobal use 1 processor.
    • MOSEK now uses the number of processor cores instead of the number of virtual processors to determine the number of threads (i.e., hyperthreading is disregarded).
    • SCIP now decides automatically on the number of processors to use in MILP presolving and LP solving. It uses 1 thread for some linear algebra routines.
    • MIP solvers called by SHOT now decide automatically how many processors to use.
  • Added new option value 22 for dumpOpt that writes processed input with all comments into a separate dump file for each block.
  • Removed misleading message about matched rows for CNS models.
  • Fixed a potentially wrong result of a sameAs statement, when it is used in a loop construct with a singleton set which gets changed in the loop execution.
  • Fixed a wrong dump file, when $onVerbatim was used with $onPut or EmbeddedCode.
  • Fixed a potential crash with dumpOpt and dumpOptGdx.


  • The McCarl GAMS User Guide will be dropped with the next major release.

Embedded Python Code Facility

  • As announced, the command line parameter pyMultInst has been dropped.
  • Fixed a problem with empty code blocks.

GAMS Connect

  • Added new option skip for the Concatenate agent that allows to indicate if sets or parameters should be skipped.
  • Added new ExcelReader and ExcelWriter agents for reading and writing Excel files.
  • PandasExcelReader and PandasExcelWriter are deprecated and will be removed in a future release. Use ExcelReader and ExcelWriter instead.
  • Harmonized the sorting behavior of Connect agents. Please check the Usage section for details.
  • Improved exception handling for GDXWriter with better error message in case of duplicate records and duplicateRecords set to all.
  • Fixed a bug where GAMSWriter would not raise an error in case of duplicate records and duplicateRecords set to all.
  • Fixed that GAMSWriter and GDXWriter agents were changing the Connect database when dropping duplicate records.


  • The Python version of GMSPython has been upgraded to 3.12.1.
  • Added the package scipy to GMSPython.


Antigone, CBC, Ipopt, SCIP, SHOT

  • Updated MKL to version 2024.0 on Linux and version 2023.0.0 on Windows.


  • New libraries 24.1.30.
    • Improved algorithms for integer linear and nonlinear programs, including local search, reformulations, relaxations, cutting planes, and presolve.


  • New libraries nauty 2.8.8.


  • New libraries 4.32.
    • Bounds larger than Lim_Variable will now be reset to inf (analogously for -inf). Previously, CONOPT terminated with an error.
    • Fixed projection of initial point into bounded interval after linear infeasibility model.
    • Fixed issue with Hessian evaluation when multithreading is enabled.
  • Solver alias conopt now equals conopt4. Use conopt3 to solve with CONOPT 3.


  • Added possibility to define multiple mipstopexpr in one option file. If any of the given stop expressions is true, the algorithm stops.


  • New libraries 11.0.0.
    • MINLP: Can now use spatial branching and outer approximation to solve models with non-linear constraints in a form that is supported by Gurobi, instead of using static piecewise-linear (PWL) approximations.
    • New option concurrentmethod: Chooses continuous solvers to run concurrently.
    • New option tunedynamicjobs: Enables distributed tuning using a dynamic set of workers.
    • New option mixingcuts: Mixing cut generation.
    • New option funcnonlinear: Controls whether general function constraints are treated as nonlinear functions or via PWL approximation.
    • New option solutiontarget: Specify the solution target for LP.
    • New option value -2 for tuneresults.
    • Changed both upper bound and default for option tunetimelimit to infinity.
    • Changed default for option nonconvex to accept models with non-convex objective or constraints.
    • Changed default for option dofuncpieces to use the relative error approach.
  • New option nlreform: Reform nonlinear equations to Gurobi general constraints.
  • Added possibility to define multiple mipstopexpr in one option file. If any of the given stop expressions is true, the algorithm stops.


  • In rare (mostly internal) places GUSS was previously called SCENSOLVER, e.g. in gmscmpun.txt files or the system attribute solverNames. This synonym has been removed and replaced by GUSS.


  • Update solution reporting for VI agents: for VI functions that have been flipped, the value of the matching variable is now returned in the equation marginal, instead of its negative.
  • Fixed model reformulation for VI agents: corrected reformulation in cases where VI constraints were flipped.


  • The client-side implementation now strictly enforces TLS 1.2 or later.


  • New libraries 14.0.0.
    • Performance improvements on mixed-integer and QP/QCQP problems.
    • Improvemed presolve.
    • Improvemed quasi-Newton Hessian approximations.
    • New option linsolver_nodeamalg: Controls the node amalgamation setting for the MA57, MA86, and MA97 linear solvers.
    • New option linsolver_ordering: Sets the ordering method used for the linear system solver.
    • New option linsolver_scaling: Enables scaling for the linear system solver.
    • New option scale_vars: Specifies the strategy for scaling variables.
    • New option presolveop_substitution_tol: Tolerance for applying a substitution.
    • New option presolveop_substitution: Determine whether or not to enable the Knitro presolve operation to substitute out variables when possible.
    • New option bar_globalize: Specifies the globalization strategy used in the interior-point algorithms.
    • New option bar_maxmu: Specifies the maximum allowable value for the barrier parameter \(\mu\) used with the barrier algorithms.
    • New option mip_cut_flowcover: Specifies rules for adding flow cover cuts.
    • New option mip_cut_probing: Specifies rules for adding probing cuts.
    • New option mip_heuristic_localsearch: Specifies whether or not to enable the MIP local search heuristic.
    • New option ms_initpt_cluster: The strategy for clustering initial points in multi-start.
    • New option value 4 for ms_terminate.
    • New option values -1 and 4 for blasoption.
  • For discrete models the initial point is now added as MIP start in addition to the root relaxation start.



  • Avoid multi-threaded Jacobian evaluation for models with external equations (aka =X= rows) as thread-safe external evaluation cannot be assumed.


  • Added sassy 1.1 (9847fa1) as graph preprocessor for symmetry detection.


  • Added possibility to define multiple mipstopexpr in one option file. If any of the given stop expressions is true, the algorithm stops.


$LibInclude files

  • As announced, the libinclude files gdxservice, linalg, and win32 have been removed. Please use the corresponding tools from the GAMS tools library instead.

Cholesky, Eigenvalue, Eigenvector, Invert


  • Fixed an error reading certain reference files.

GAMS Studio

  • New version 1.17.2.
    • Added install license button for the "GAMS Licensing" dialog.
    • Added highlighting of the system log tab when new messages are available. In case of warnings and errors the tab will be focused.
    • Added new options "Compare Defaults", "Compare Domains", and "Ignore Order" to the GDX Diff dialog.
    • Added the ability to resume to an ongoing GAMS Engine job after Studio is restarted.
    • Added symbol sub types to the "Type" column of the symbol table in the GDXViewer.
    • GDXViewer export improvements:
      • The dialog now uses the ExcelReader instead of the PandasExcelReader (deprecated). This changes the following aspects:
        • All GAMS special values are exported as string representation per default.
        • Visual appearance of the generated Excel files has changed.
        • Exported data does not contain the "value" and "element_text" headers anymore.
        • No extra blank row between column header and data anymore.
        • Labels are not written into merged cells anymore.
      • Added support for specifying custom values for GAMS special values.
    • Navigator improvements:
      • Improved performance after large searches.
      • Fixed duplicate entries for files that are also opened in a tab.
      • Fixed file navigation when starting path with ...
      • Fixed problem handling long path names.
      • Fixed directories being listed as files.
      • Fixed filesystem navigation for absolute path on Windows.
      • Fixed filesystem navigation improperly handling file switching.
      • Fixed that unnecessary spaces broke Navigator modes.
    • Stability improvements, bug fixes, and minor enhancements, e.g.:
      • Added Esc as a shortcut to abort the search.
      • Added abort of ongoing search when search dialog is closed (but not hidden).
      • Improved LST viewer performance.
      • Improved performance when searching very large folders.
      • Improved file handling for unexpected events while writing a file, i.e., write to temporary file and rename after success.
      • Fixed crash when closing a project during a GAMS debug run.
      • Fixed crash when opening file from welcome page.
      • Fixed crash when loading an empty lxi/lst file.
      • Fixed crash in lxiViewer with invalid model index.
      • Fixed crash in project explorer on macOS with invalid model index.
      • Fixed crash in Connect Editor when adding ExcelWriter schema data.
      • Fixed problem where "Replace All" in unopened files appended extra characters.
      • Fixed stop and interrupt button for macOS and Linux.
      • Fixed LST viewer sometimes jumping to wrong position in file.
      • Fixed help view showing empty page when document linked to a page in new tab or new window.
      • Fixed unresponsive Abort button in Search Dialog.
      • Fixed that search was not properly interrupted when pressing Abort.
      • Fixed deactivated search elements when project settings are focussed.
      • Fixed unwanted partial matches in the Search Dialog file filter section.
      • Fixed project explorer not updated when using "save as".
      • Fixed encoding resets to UTF-8 after restart.
      • Fixed Windows interrupt not working in some cases.
      • Fixed Open As Text button in Connect Editor not showing file contents in text editor.
      • Fixed Save for newly added data by drag and drop schema in Connect Editor.
      • Fixed overwritten clp when moving/copying a file from one project to another.


  • As announced, the tools gdx2har and har2gdx have been removed. The tools can be accessed from the CoPS web site.

GDXRank, GDXRename

  • As announced, the tools gdxrank and gdxrename have been removed. Please use the GDX service tools from the GAMS tools library instead.
  • The $libInclude rank functionality now uses executeTool 'alg.rank' to sort a one dimensional parameter instead of the gdxrank tool.



  • A new LibInclude tool moo has been added. It provides methods for multi-objective optimization in GAMS (e.g. Augmented Epsilon Constraint).

MSAppAvail and Shellexecute



  • Added client-side enforcement of TLS 1.2 or later in GAMSJob::runEngine.
  • New libraries curl 8.6.0.


  • As announced, the C4U API has been removed from the distribution.

GAMS Transfer Matlab

GAMS Transfer Matlab has been moved and restructured! The API
  • is located in api/matlab (previously: apifiles/Matlab/api) and
  • comes as the Matlab package gams.transfer (previously: GAMSTransfer).
  • Now available for macOS on ARM64 CPUs.
  • Added gams.transfer.setup and *.c MEX source files of internal interface to gams.transfer.cmex. Calling gams.transfer.setup allows to build GAMS Transfer Matlab from source. Check with mex -setup which C compiler is enabled in Matlab.

GAMS Transfer Python

  • Symbol property .container now holds a reference to the Container instead of a weakref.
  • Relaxed axis uniqueness requirement when setting records with uels_on_axes=True.
  • Fixed error encountered with non-unique axis elements when setting records with uels_on_axes=True.
  • Fixed that the pivot method failed for DataFrames with non-str column names.
  • Fixed failure with getSparsity by adding new isValid test to efficiently detect domain violations in certain situations.
  • Fixed bug that did not allow mixed case gdx file extensions.

GAMS Transfer R

  • New libraries 3.0.0.
    • GDX API changed to the new GDX C++ API, which allows for significant performance improvements.
    • Performance improvements in reading GDX file.
    • The systemDirectory argument in the Container constructor is deprecated and will be removed in the future.
    • Bug fix: Container property summary changed from a method to active binding.
    • Bug fix: Symbol method equals incorrectly returned FALSE when the symbol records contain NA.
    • Fixed overriding PKG_CXXFLAGS in Makevars.


  • New libraries 7.10.1 (synchronized with open-source release of GDX expert-level API):
    • Added gdxAllowBogusDomains as boolean option to toggle allowing potentially unsafe writing of records to symbols with one dimensional sets as domain, when GDX has no lookup table for the elements of this set. This can happen when gdxStoreDomainSets was disabled by the user to save memory. For backwards compatibility, this is enabled by default. When the user explicitly disables it, e.g. via gdxAllowBogusDomainsSet(false), then using a one dimensional set as domain will cause a GDX error (ERR_NODOMAINDATA).
    • Added boolean property gdxMapAcronymsToNaN (disabled by default) that maps all acronym values to special value "Not a Number" (NaN).


  • Add alternative function gevSwitchLogStatEx to better handle cases where the current log/status destination is independent of the one switched to.


  • Added gmoObj_None to enum gmoObjectiveSense for model instances without objective. This return value of gmoSense() was possible before, but is used more consistently now.


The (object-oriented) Matlab API has been renamed, moved and restructured! The API
  • is now called GAMS Control (previously: object-oriented GAMS API),
  • is located in api/matlab (previously: apifiles/Matlab/api),
  • comes as the Matlab package gams.control or its alias gc (previously: GAMS),
  • now has sub-packages gams.control.engine, gams.control.globals and gams.control.options, and
  • removed GAMS from class names. For example, use gams.control.Workspace (or the alias gc.Workspace) instead of GAMS.GAMSWorkspace. The old class names are still available as aliases to the new names, but are deprecated and may be removed in an upcoming release. See also mapping of old to new class names.
Furthermore, the enumeration classes have changed. They are now normal classes that behave like enumeration classes for better support of software products that do not support enumerations, e.g., Octave. This has changed:
  • Enumeration values are now constant properties of the class. Syntax for using those values does not change.
  • The new enumeration-like classes have properties select and value that store the current selection (name of the enumeration value) and value of the enumeration, respectively. These properties can be changed to other enumeration selections or values. Use select when printing the enumeration.
  • Removed method lookup. Use the class constructor instead.
  • Removed method value. Use the property value instead.
  • Setting the environment variable GAMS_MATLAB_ENUM_ALT has no effect anymore.
  • Added option value SplitBlocksDumpWithComments to option DumpOpt: Write processed input with all comments into a separate dump file for each block.
  • Removed option PyMultInst.


  • Changed the TargetFramework of the GAMS .Net API and all dependent examples from 4.5 to 4.6.2.


  • Added routine palExistingConfigFiles() that returns an ordered list of GAMS configuration files.


  • The gams.transfer.numpy API has been moved to gams.core.numpy.
  • Added new value KeepFilesOnError to DebugLevel which keeps temporary files only in case of an error. Its internal numerical value is 1 and all values for DebugLevel.KeepFiles or greater have been increased by one.
  • Changed the default of GamsWorkspace from DebugLevel.Off to DebugLevel.KeepFilesOnError with the effect that temporary files do not get deleted anymore in case of an error.
  • The client-side implementation of gams.control.GamsJob.run_engine() now enforces TLS 1.2 or later when using urllib3 prior to version 2.0.
  • Improved log output of GamsJob.run() to be always live (per line).
  • Fixed log output of GamsJob.run() containing duplicate carriage returns for line endings on Windows.
  • Fixed GamsOptions.optdir property used with GamsModelInstance.instantiate() having no effect in GamsModelInstance.solve().

Model Libraries

FIN Library

GAMS Data Library

GAMS Model Library

GAMS Test Library

PSOPT Library