45 Distribution

45.1.0 Major release (October 14, 2023)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Saran Chanpuang, Aidana Ermatova, Michael Ferris, Adderly Huerta, Auke Greijdanus, Mogens Bech Laursen, and Christoph Pahmeyer.

Platforms

  • We will drop support for macOS 11 (Big Sur) with the next major release.
  • Added support for macOS 14 (Sonoma).

GAMS System

GAMS

  • Added an additional note to the log about the expiration date of the license used.
  • Extended the $declareAndLoad capability to also declare new acronyms found in the input GDX file.
  • Minor performance improvement for execute_unload.
  • Fixed a bug which caused a wrong dump file when $onEmpty is active.
  • Fixed a broken message in the log when a $call gets executed with a command that exceeds 255 characters.
  • Fixed a data-dependent bug that resulted in an unexpected execution error and was triggered by re-loading data at execution time in a loop via Embedded Code.
  • Fixed sys15 being ignored in option statements.

Embedded Python Code Facility

  • We plan to drop the command line parameter pyMultInst with a future major release. The ability to maintain independent Python sessions can not be maintained in a reliable way.

GAMS Connect

  • The CSVWriter now supports unstacking multiple dimensions to header rows.

GMSPython

  • The Python version of GMSPython has been updated to 3.8.17.

Documentation

Installer

  • The Windows installer does not create the GAMS sub directory in the users documents directory anymore.

Solvers

CONOPT

  • New libraries 4.31.
    • Added option Flg_AdjIniP to disable sometimes expensive adjustments to initial point.
    • Added option Flg_NoDefc to disable definitional constraints.
    • Added evaluation of post-triangular constraints if a CNS model was interrupted.
    • Improved AttemptCNS.
    • Changed the logic for improving the conditioning of the basis to fix problems with superbasic slacks.
    • Function evaluation errors are made silent after ill-conditioned steps.
    • Reset reduced Hessian and superbasis after singularities or numerical problems.
    • Fixed a problem in SQP when a critical bound was infinite. This could have given huge steps and domain errors.
    • Fixed an error in the pre-processor where minimax constraints could be converted into an incorrect equality.

CONVERT

  • Fixed writing eps for 0 as variable coefficients in GAMS format.

COPT

  • New libraries 7.0.1.
    • Performance improvements.
    • New option BarStart: method to compute starting point for Barrier solver.
    • New option FAPHeurLevel: level of fix-and-propagate heuristic.

CPLEX, GUROBI, MOSEK, FICO XPRESS

Attention
The bare-bone link mode (previously OsiCplex, OsiGurobi, OsiMosek, OsiXpress), which required only a GAMS base license and a standalone solver license to solve LP or MIP, has been removed. Please contact sales@gams.com to arrange for a solver-link license to be added to your GAMS license.

GUROBI

  • New libraries 10.0.3.

HiGHS

Ipopt

  • New libraries METIS 5.2.1.
  • Fix in METIS adapter code used by HSL linear solvers.

MOSEK

SCIP Optimization Suite

  • New libraries PaPILO 2.1 (9ef45bfa).
  • New libraries SoPlex 6.0 (5a9b664d).
  • New libraries SCIP 8.0 (6c8c7c8d90).

SHOT

  • New libraries 1.1 (424b5e48).

Tools

GAMS Studio

  • New version 1.16.1.
    • Removed the "Go To" dialog, as the functionality is integrated into the Navigator.
    • Improvements for the GDX Viewer:
      • Added support for Shift + Left Click to select/deselect multiple labels in the GDX Viewer filters.
      • Added thousands separator to symbol record count and symbol number in GDX Viewer.
    • Added HTTPS support to check for update feature, removed dependency on C4U library.
    • Added authorization provider support to GAMS Engine.
    • Stability improvements, bug fixes, and minor enhancements, e.g.:
      • Improved performance of the Navigator for sessions with a lot of files.
      • Fixed check for GAMS license.
      • Fixed crash when reading a corrupted Reference File.
      • Fixed crash on using nested $echo commands.
      • Fixed partly saved auto-save files.
      • Fixed recovering outdated auto-save files.

Info-ZIP

  • Updated gmszip to Zip 3.0-13 on Linux and macOS.
  • Updated gmsunzip to UnZip 6.0-28 on Linux and macOS.

APIs

C

  • As announced, removed gcmt.h, gcmt.c, gclgms.c, and gcdllinit.h from apifiles/C/api.

C++

  • Added function GAMSJob::runEngine to run jobs on GAMS Engine, rather than locally.
  • Adjusted GAMSJob::run public function signature.
  • Added transportEngine example to show usage of new Engine feature.

C4U

  • We plan to remove the C4U API from the distribution with an upcoming major release.

GDX

  • The user-specified special value mapping set via gdxSetReadSpecialValues now also affects the type-specific default values (level, lower, upper, marginal, scale) for empty 0-dimensional (scalar) variables and equations.
  • Reverted gdxSetDomain to write 0 instead of -1 as domain index for unknown domains.
  • Adjust default behavior to store negative zero as zero. This is more space-efficient due to our internal storage scheme and is consistent with pre-GAMS-38 behavior.
  • Fixed incorrect default record for empty equation symbols with equation type different than "equals".

GMD

  • Added new function gmdFindUel (counterpart for gmdGetUelByIndex) which queries the UEL index for a given UEL label. Returns false on failure. UEL index is set to -1 in case the UEL label is not found in the UEL table.
  • Performance improvements when dealing with larger datasets due to more efficient symbol and UEL handling.

GMO

  • Fixed a bug in functions gmoGNLNZ64 and gmoGNLNZ: they computed counts incorrectly in case of degenerate quadratic forms like x * (1 + eps*y).

GAMS Transfer Matlab

  • Breaking: Renamed records field text of Sets to element_text.
  • Added symbol UniverseAlias to represent aliases to the universe set.
  • Added possibility to change symbol name case with Container.renameSymbol.
  • Added possibility to reorder UELs by record order with Symbol.reorderUELs (passing no arguments).
  • Added Container.getSets, Container.getParameters, Container.getVariables, Container.getEquations, and Container.getAliases to get list of symbol objects of corresponding type.
  • Added possibility to get/remove all symbols with Container.getSymbols or Container.removeSymbols, respectively.
  • Added Container.lowerUELs, Container.upperUELs, Symbol.lowerUELs, and Symbol.upperUELs to convert (all) UELs to lower or upper case, respectively.
  • Added columns where_min and where_max to output of Container.describeParameters.
  • Changed column names in output of Container.describe* methods: dimdimension, num_recsnumber_records, num_valsnumber_values, min_valuemin, max_valuemax, mean_valuemean.
  • Removed *_marginal, count_*, where_max_abs_value, and is_alias columns in output of Container.describe* methods.
  • Removed ConstContainer.
  • Added GDX library unload before each read/write operation.
  • Changed used GDX library to gdxcclib64.
  • Fixed bug that limited the number of used UELs in Symbol.transformRecords and Symbol.getUELs.
  • Fixed Container.eq in case of containers with different number of symbols.

GAMS Transfer Python

  • Officially removing the beta label.
  • Improved performance for both reading/writing of GAMS data from/to GDX and GMD.
  • Allow users to update symbol records by repeating calls to the symbol constructor (new objects will not be created).
  • Added new symbol/container methods to easily modify UEL strings (lowerUELs, upperUELs, lstripUELs, rstripUELs, stripUELs, capitalizeUELs, casefoldUELs, titleUELs, ljustUELs, and rjustUELs).
  • Added new container methods to retrieve symbol objects (getSets, getAliases, getParameters, getVariables, and getEquations).
  • Added support for reading data that originated with different encodings.
  • Enabled different GDX/GMD read/write modes (defaults should be used to maintain performance, except in rare instances).
  • Passing None (new default) to <container>.removeSymbols() will remove all symbols.
  • Passing None (new default) to <container>.getSymbols() will return a list of all symbol objects.
  • Renamed symbol property ref_container to container.
  • Added eps_to_zero=True (changes default behavior) argument to <container>.write() to control writing all GAMS EPS (i.e., -0.0 in GTP) special values to 0.0.
  • Enabled the symbol property name (and <container>.renameSymbol()) to change the casing of a symbol name.
  • Container property system_directory can now accept either str or PathLike objects.
  • Added symbols argument to Container methods (getDomainViolations, hasDomainViolations, countDomainViolations, dropDomainViolations, getDuplicateRecords, hasDuplicateRecords, countDuplicateRecords, dropDuplicateRecords, isValid).
  • Reorganized the describe* tables for clarity and brevity.
  • Added Container.hasSymbols() method to test for symbols in a container (can also use the in operator).
  • Updated the symbol summary properties for all symbol types.
  • Added a container summary property.
  • Added support for setting GAMS special values with str types when setting records with MultiIndex DataFrames.
  • Function setRecords no longer drops zero valued records when setting records with MultiIndex DataFrames.
  • Added new symbol methods to drop (potentially) unwanted records: dropZeros (parameters only), dropDefaults, dropNA, dropUndef, dropMissing, and dropEps.
  • Exposed a new public property default_records for variables and equations.
  • Added support for Pandas 2.1.0.
  • Function toDense now checks categorical ordering before creating an array (for relaxed domain symbols).
  • Fixed a bug when reading in an Alias symbol from GMD objects.
  • Fixed a bug where a symbol's UEL (categorical) order was not maintained from GDX.

GAMS Transfer R

  • New libraries 2.6.
    • Officially removing the beta label.
    • Breaking: removed all Const* classes. ConstContainer is no longer supported. Use Container instead.
    • Breaking: Symbol field refContainer renamed to container.
    • Breaking: removed getUniverseSet method from Container. Use getUELs instead.
    • Records columns that are not specified by the user in a dataframe are not auto completed to save memory. For example, a set with only the domain columns will now not have the element_text columns. A default value is assumed for the missing attributes.
    • New field defaultValues for symbols of type Parameter, Variable, and Equation.
    • Reorganized describe* Container methods for clarity and brevity.
    • Refined field summary for Symbol objects for clarity.
    • Container objects now have a summary field.
    • New convenience methods for Container objects: getSets, getAliases, getParameters, getVariables, and getEquations.
    • Enabled registering any UEL using uelPriority argument in Container method write.
    • Container method write now supports mapped write mode with the help of new argument mode.
    • Following Container methods do not support list input for symbols argument: describeSets, describeAliases, describeParameters, describeVariables, describeEquations, read, removeSymbols, getSymbols. Use vector inputs instead.
    • Argument types in the Container methods listVariables and listEquations does not support the input of type list. Use vector inputs instead.
    • Argument uelPriority in the Container method write does not support the input of type list. Use vector inputs instead.
    • Fixed bug in failed Symbol constructor call resulting in symbol being added to the Container.
    • Fixed bug in registering unused UELs when not all symbols from the container are written to a GDX file.
    • Fixed bug in read for Variable and Equation classes where the lower and upper attributes were interchanged.
    • Fixed bug in the Symbol method equals where identical domain symbols exist in different containers.
    • Fixed bug in Symbol methods reorderUELs and toDense for symbols with relaxed domain.

Jupyter Notebooks

  • The newly introduced back-end class gams.magic.GamsInteractive can be used to translate GAMS Jupyter notebooks into standalone Python scripts.

Matlab

PAL

  • Added new functions to query the expiration date for time-limited licenses (palLicenseGetEvalDate) and the maintenance end-date for perpetual licenses (palLicenseGetMaintDate).

Python

  • As announced, dropped support for Python 3.7.
  • The gams.numpy API has been moved to gams.transfer.numpy and is now considered an internal API of gams.transfer. The documentation as well as the examples g2np_example[1|2].py have been removed and users are encouraged to use gams.transfer as a replacement.
  • Renamed the gams Python wheel to gamsapi, this change will not impact import statements, but users will need to use install differently with pip install gamsapi.
  • New optional parameter container for gams.connect.ConnectDatabase constructor that allows to use an already existing instance of gams.transfer.Container.
  • Fixed wrong model_status/solver_status after calling gams.control.GamsModelInstance.solve() with debug=True.

Model Libraries

GAMS API Library

GAMS Data Library

GAMS Model Library

GAMS Test Library

Solver/Platform availability matrix

x86 64bit
MS Windows
x86 64bit
Linux
x86 64bit
macOS
arm 64bit
macOS
ALPHAECP 2.11
ANTIGONE 1.1
BARON
CBC 2.10
CONOPT 3
CONOPT 4
COPT 7.0
CPLEX 22.1
DECIS
DICOPT 2
GUROBI 10.0
GUSS
IPOPT 3.14
HiGHS 1.6
KESTREL
KNITRO 13.2
LINDO 14.0
LINDOGLOBAL 14.0
MILES
MINOS 5.6
MOSEK 10
NLPEC
OCTERACT 4
ODHCPLEX 7
PATH
QUADMINOS 5.6
SBB
SCIP 8.0
SHOT 1.1
SNOPT 7.7
SOPLEX 6.0
XPRESS 41.01

45.2.0 Minor release (October 30, 2023)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release.

Solvers

CBC

  • New libraries Cbc 2.10.11 and Clp 1.17.9.

COPT

  • New libraries 7.0.2.
    • New option SolTimeLimit to set a timelimit (for the whole solve) that is only effective after a feasible solution has been found.

APIs

C++

  • Added CMake option USE-GCC for example subproject to change library selection to prefer GCC over clang.

GAMS Transfer R

  • New libraries 2.8.
    • Fixed bug in reading symbols from GDX with unused UELs from domain.
    • Fixed bug in symbol method getDomainViolations when the domain symbol has NULL records.

Java

  • Fixed wrong ModelStatus/SolveStatus after calling GAMSModelInstance.solve() with debug option set to true.

.Net

  • Fixed wrong ModelStatus/SolveStatus after calling GAMSModelInstance.Solve() with debug=true.

45.3.0 Minor release (November 11, 2023)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release.

GAMS System

GAMS

  • Fixed a problem with command line parameter etLim which was ignored in many cases at compile time.

Solvers

Ipopt

  • New libraries Ipopt 3.14.13.
  • New libraries MUMPS 5.6.2.

MOSEK

  • New libraries 10.1.16.

SCIP Optimization Suite

  • New libraries SCIP 8.0 (6f841064d0).
  • New libraries PaPILO 2.1 (ee0677c4).

Tools

GAMS Studio

  • New version 1.16.2 with bug fixes and minor enhancements:
    • Enhanced GAMS Engine dialog:
      • Compute remaining time depending on instance factor and always show remaining seconds.
      • Added support for JobTag for job identification.
      • Fixed alignment.
      • Fixed error message when server not found.
    • Fixed rare crash in search.
    • Fixed search result not clickable after changing search term.

GAMS Tools Library

  • Modified tool ExcelTalk to provide better error messages. Moreover, the matching of the workbook name is done on the base name (without the path) of the file.

APIs

Python

  • Added support for Python 3.12.

Control

  • Fixed unwanted side effect when passing engine_options dictionary to gams.control.GamsJob.run_engine() method.
  • gams.control.GamsJob.run_engine() now correctly handles the response status code 429 Too Many Requests from the server.

Transfer

  • Fixed a bug that prevented syncing of records (in jupyter environments) when setting records with a tabular dataframe or int/float data type.

45.4.0 Minor release (November 27, 2023)

Acknowledgments

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

MPSGE

  • Fixed issues solving MPSGE-generated problems with multithreading enabled due to incorrect parallel Jacobian evaluation.

Solvers

COPT

  • New libraries 7.0.3.

MINOS and SNOPT

  • Fixed incorrect global optimal model status for non-convex models with linear constraints.

Tools

GAMS Studio

  • New version 1.16.3 with bug fixes and minor enhancements:
    • Relaxed boundaries of the GDX Viewer splitter to allow for more resizing flexibility.
    • Reduced allowed SSL warnings when the user accepts self-certified GAMS Engine connection.
    • Fixed that command line changes were lost when switching to another project.
    • Fixed that a double click on a .gsp-file did not activate the project.
    • Fixed that the position of the search dialog was not saved when closing with close button in titlebar.

GAMS Tools Library

  • Fixed a bug in tool ExcelMerge when accessing the number of sheets in a workbook and improved error messages.

APIs

GEV

  • Disable multi-threaded Jacobian evaluation in gevEvalJacLegacyX for model instances with external equations (aka =X= rows): it cannot be assumed that the user-provided evaluation function is thread-safe.

Python

  • Fixed a Python 3.12 SyntaxWarning in the Control API.

45.5.0 Minor release (December 14, 2023)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Rob Davies, Gabriel Homsi, and Sherman Robinson.

GAMS System

GAMS Connect

  • Fixed a bug in the PandasExcelReader that prevented reading columns containing both numerical values and dates.

Solvers

MOSEK

SCIP

  • New libraries 8.1.0.

Tools

GAMS Tools Library

  • Fixed a bug in tool ExcelTalk when Excel files are located in (sub)directories.
  • Added command open and named argument quit=0|1 to tool ExcelTalk.

APIs

GMD

  • Fixed memory leak related to not freeing a symbol record iterator when updating a symbol inside a model.

Python

  • Fixed a potential memory leak in the control API observed when iterating multiple times over the same symbol. This was also affecting GAMSModelInstance.solve().
  • Fixed a warning when building the gamsapi wheel using the source distribution.

45.6.0 Minor release (January 04, 2024)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Simon Wesley Bowen, Rob Davies, and Mart Saluri.

GAMS System

GAMS

  • Changed $loadDCR to not complain anymore when it should be used to clear a set, that is used as domain, if that set had no data so far.
  • Fixed a bug which could have caused a wrong dump file with an empty data statement when dumpOptGDX is set.
  • Fixed a bug which could have caused a wrong dump file when $loadM is used while dumpOptGDX is set.
  • Fixed a potentially wrong result of a sameAs statement, when it is used in a loop construct with a singleton set which is empty when entering the construct and gets a value in it.

GAMS Connect

  • Improved exception messages of several agents when handling symbols that do not exist.

Solvers

COPT

  • New libraries 7.0.4.

SCIP

  • New libraries 8.1 (0dff9f8a3e).

Tools

GAMS Studio

  • New version 1.16.4 with bug fixes:
    • Fixed that check for update crashed when Studio is opened and immediately closed.
    • Fixed check for update redirect policy (NoLessSafeRedirectPolicy) and check for update behavior when disabled.
    • Fixed wrong sorting behavior in the export dialog of the GDX Viewer.

45.7.0 Minor release (January 18, 2024)

Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release.

GAMS System

GAMS

  • Fixed MIIMode to implicitly set keep=1 as expected.
  • Fixed a problem when loading from a GDX file at compile time which could have caused an incomplete load of data, if the data depends on a domain set that was reloaded before from the same file replacing already existing records.
  • Fixed a bug which could have caused a broken dump file with certain data statements.

GMSPython

  • Packages Jinja2 and urllib3 have been updated to version 3.1.3 and 2.1.0, respectively, which include fixes for known vulnerabilities.

Solvers

COPT

  • New libraries 7.0.6.

IPOPT

  • New libraries 3.14.14.

MOSEK

  • Reduce overhead when calling MOSEK for final solve and avoid its output to stdout when it should have been disabled.