33 Distribution

# 33.1.0 Major release (November 01, 2020)

## 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 Wolfgang Britz, Pablo Cachinero, Michael Ferris, and Ben Huebner.

## Platforms

• We plan to increase the minimal required GLIBC version of the distribution for GNU/Linux to 2.17 with the next major release.
• We plan to drop support for Mac OS X 10.13 (High Sierra) with the next major release.

## GAMS System

### GAMS

• Allow to set the .stage attribute for discrete variables as well. This can be useful for certain solvers like SCIP.
• The status of the Embedded Code Facility has been changed from beta to released and fully supported. The nature of embedded code (especially Python embedded code) prohibits a level of backward compatibility as we guarantee for intrinsic GAMS language features: The Python interpreter together with distributed packages are evolving. Moreover, the GAMS/Python communication (e.g. via gams.get()/set()) will be subject to necessary modifications.
• Allow multi-line Python strings constructed with triple quotes (''' or """) in embedded Python code without getting additional spaces from the internal extra indentation. For multiple lines of Python code that use the line continuation character \, extra indentation is not omitted.
• Added new dollar control options $on/offIDCProtect to control if symbols which are declared as external input can be changed at execution time. • Quoted text in a display statement adds now an entry to the navigation pane of the LST Viewer in GAMS Studio as well. • Print an extra log line when execute_load (or one of its variants) is executed. When running GAMS from one of the GAMS IDEs, this log line can be clicked to open the file loaded. Also the log lines generated for execute_unload[idx] were adjusted for better distinction. So adding these lines to a model execute_unload 't.gdx', f; execute_unloadidx 't.gdx', f; execute_load 't.gdx', f;  generates this log: --- GDX File (execute_unload) C:\t m p\t.gdx --- GDX File (execute_unloadidx) C:\t m p\t.gdx --- GDX File (execute_load) C:\t m p\t.gdx • Fixed a problem using captureModelInstance with solveLink=5/6/7; if captureModelInstance=1 and solveLink=6/7, solveLink will be reset to 3/4 automatically. • Fixed a problem with file names longer than 128 characters for option IDCGenerateJSON. ## Solvers ### AMPL, LINGO, MPECDUMP, PYOMO • We plan to drop the meta-solvers AMPL, LINGO, MPECDUMP, and PYOMO with the next major release. Convert will continue to produce model instances in these formats with the exception of MPECDUMP. ### ANTIGONE, IPOPT, SHOT, SCIP • Updated Intel MKL to version 2020.2 on Linux and Mac OS X. ### BARON • New libraries 20.10.16. • Performance improvements including faster automatic differentiation, improved probing, improved local search, and improvements in BARON's cutting plane routines. • Changed default of option WantDual to 1. That is, dual values are now provided by default for nonlinear problems, too. • CBC updated to 2.10.5. ### BDMLP • We plan to drop the LP/MIP solver BDMLP with the next major release. Other free alternatives like Cbc outperform BDMLP. ### BENCH • We plan to drop the meta-solver BENCH with the next major release. Scripting tools provide much better facilities to generate benchmarks. ### CONOPT • New library 4.21. • Added a warning if the unscaled residuals in a feasible model are large due to very large scale factors. • Updated the selection of definitional constraints and improved the numerical behavior. • Changed tolerances in the derivative debugger related to very large derivatives. • Logic for Definition constraints updated: • Infeasibilities are handled with a forward push routine and a backward pull routine. • The way dense fill-in is removed is updated and the runtime is improved. • Changed a tolerance in the Derivative debugger. • Fixed an error in one-dimensional search when there are large 2nd derivatives or discontinuous 1st derivatives. Tried to recover a point that did not exist. • Fixed an error with model hda: there was a conflict between monotonicity and a tolerance. • Fixed some occurrences of system errors 12371, 12372, 88120. • Fixed a problem with a very small pivot (non-default tolerance) that created an incorrect penalty constraint. • Fixed an error that could appear in models with very long constraints. ### Convert and ConvertD • Added support for semi-integer and semi-continuous variables and complementarity constraints to scalar JuMP output format. • Added information about discrete variables to the GDX files created by options hessian and jacobian for CONVERTD. • The hessian and jacobian option for CONVERTD report the .stage variable and equation attribute in the variable and equations records only. In the past, the .prior and .scale attributes were reported. • Fixed an error with suppressed complementarity constraints in Pyomo output. • Fixed handling of semicontinuous variables with lower bound equal upper bound when writing MPS files. ### Couenne • As announced, the solver Couenne has been removed from the GAMS system. For the time being, libraries of GAMS/Couenne are available at the COIN-OR GAMSlinks project. Note, that GAMS does not test or offer support for these libraries. ### CPLEX • The two solver links CPLEX and CPLEXD were merged under the name CPLEX. Features that were formerly available in only one of the two solver links are now all usable with the new CPLEX link. Those features include: • Formerly only CPLEX: • SOS1 and SOS2 sets • Branching priorities • Indicator constraints • Conflict refiner • Ranging / sensitivity analysis • Solution pool for mixed-integer (quadratic) problems • Formerly only CPLEXD: • Better handling of quadratic constraints (e.g. providing duals) • Hot start capability in GUSS • Solving multiple instances of GAMSModelInstance in parallel using GAMS APIs • Solvelink=solvelink.AsyncThreads • Cplex remote object and distributed MIP • Benders decomposition • New features: • Partial MIP starts: allow to only include variable levels to the MIP start that are integer (within the tolerance tryint, see mipstart) • Multiple MIP starts provided via GDX (see multimipstart) • Lower / upper bound ranging / sensitivity analysis (see bndrng) • Lazy constraints (see userlazyconcall or .lazy) • Added MIP statistics (e.g. number of nodes, solve time, objective lower and upper bounds) to BCH call via GDX files usergdxnameinc and usergdxname. • Added options: • Added option multimipstart for multiple MIP starts • Added option conflictdisplay • Added option multobjtolmip: the default value changes the behavior of the multi-objective optimization for continuous models • Added option bndrng: lower / upper bound ranging / sensitivity analysis • Added option indicoptstrict: handle erroneous indicator constraints • Added option userlazyconcall: adding lazy constraints using BCH • Added dot option .lazy: select linear constraints as lazy constraints • Added option mipstopexpr: custom MIP stopping criterion to terminate during branch-and-bound • Changed options: • Changed behaviour of rngrestart: If the specified file extension is GDX, the ranging results will be exported as GDX instead of GMS. • Changed behaviour of miptracenode and miptracetime: option has no effect and MIP trace is appended when the solver reports global progress • Changed behaviour of quality: added entries regarding indicator constraints and MIP condition numbers • Changed default of randomseed from 0 to 201909284 • Changed default of tuningtilim from 10000 to 1e75 • Changed default of tuningdettilim from 1e7 to 1e75 • Changed default of workmem from 128 to 2048 • Changed name rtlcuts to rltcuts • Added documentation for partial MIP starts to mipstart • Updated documentation for multiobjective optimization about CPLEX's two different strategies for continuous and discrete models (see also multobjtolmip). • Fixed an error in BCH user heuristics where a false objective function of the incumbent was reported to CPLEX (in former CPLEXD link). ### GUROBI • New libraries 9.1.0. • New option rngrestart: Export sensitivity information as GAMS readable format (GMS or GDX). • New option mipstopexpr: Custom MIP stopping criterion to terminate during branch-and-bound. • New option norelheurwork: controls NoRel heuristic. • New option norelheurtime: controls NoRel heuristic. • New option tunecleanup: Enables a tuning cleanup phase. • New option poolgapabs: Maximum absolute gap for stored solutions. • New option integralityfocus: Indicator for stricter enforcement of integrality constraints. • New option value -1 for option .lazy: Treat as a user cut. • Removed option norelheuristic. A finer control of Gurobi's NoRelHeuristic is done through the newly introduced options norelheurwork and norelheurtime. ### IPOPT • Changed default of option acceptable_iter from 15 to 0. This disables a heuristic in Ipopt to stop early with a solution that doesn't satisfy the usual termination tolerances when progress is slow. ### Kestrel • Fixed a bug that prevented job submission on Linux and Mac OS X due to a missing certificate. ### Lindo/LindoGlobal ### LocalSolver • New libraries 9.5 (20200923). ### LS • We plan to drop the least-square solver LS with the next major release. The Python method numpy.linalg.lstsq included in the GAMS distribution can be used within an embedded Python code section to efficiently minimize the sum of squared residuals. ### MOSEK • New libraries 9.2.28. ### ODHCPLEX • More features available in the GAMS link: • SOS1 and SOS2 sets • Branching priorities • Indicator constraints • Partial MIP starts: allow to only include variable levels to the MIP start that are integer (within the tolerance tryint, see mipstart). • Multiple MIP starts provided via GDX (see multimipstart) ### SCIP • New libraries 7.0 (5b13bda). • The workaround to assign a non-continuous variable to a block for problem decomposition (use suffix .prior without priorOpt=1) is not necessary anymore (.stage is now available for non-continuous variables). If one runs a model that continues to use this workaround with this version of GAMS, all non-continuous variables will end up in block 1 independent of the .prior value. ### SHOT ### SolveEngine • Dropped link to Satalia SolveEngine because Satalia retired SolveEngine Beta and a successor is not yet available. ### SoPlex • New libraries 5.0 (2afa64b6). ### XPRESS • New libraries 8.10.1. • Removed option mislpAlgorithmFinalSLP. • Removed option mislpAlgorithmNoFinalRounding. • Added option mislpCutStrategy. • Added option mipstopexpr: Custom MIP stopping criterion to terminate during branch-and-bound. ## Tools ### GAMS IDE and GAMS Studio • Fixed that Bonmin and Ipopt solver option files could not be created or edited via the options editor. ### GAMS Studio • New version 1.4.2. • New feature: Remote execution with GAMS Engine. • New feature: Allow to open $[bat|lib]include files by context menu, F2 shortcut, or holding Ctrl and click on the filename.
• Renamed About GAMS dialog to GAMS Licensing dialog to make it more clear, that this allows to install a GAMS license.
• Improved GAMS license detection during Studio start and in GAMS Licensing dialog; if the content of a license file is in the clipboard when starting Studio, a dialog to install the license is started.
• Added support for comma separated list as file filter in search dialog.
• Changed behavior of "Whole Words" search option: \$ is now considered a word boundary.
• Reworked NEOS integration, e.g.:
• Allowing to kill submitted active jobs.
• Moved NEOS control options into dialog.
• Changed default parameter from forceWork=1 to previousWork=1.
• Improved handling of network errors.
• Minor bug fixes and improvements, e.g.:
• Added Arrow Up/Down as shortcuts to jump to search results when Results View is focused.
• Added tooltips to options in search dialog.
• Syntax coloring improvements.
• Fixed file codec selection for the model assembly dialog.
• Fixed always use lowercase directory names for MIRO directories, e.g. data_mymodel instead of data_myModel.
• Fixed empty history on welcome page when starting Studio with no tabs open.
• Fixed potential crash if files are modified in the background while a dialog is open.

• Since GAMS does not support any 32bit platform anymore, this tool is compiled for x64 instead of Any CPU now.

### MODEL2TEX

• Deprecated command line parameter -e has been removed.

## APIs

### .NET

• Since GAMS does not support any 32bit platform anymore, the .Net DLL is compiled for x64 instead of Any CPU now.

### C++

• Adjusted compilation of examples to new handling of critical sections in expert level APIs.
• Adjusted some examples since GAMS/CplexD is now a synonym for GAMS/Cplex.

### Python

• New experimental API gams_magic that enables the use of GAMS in Jupyter notebooks has been added. This release of gams_magic should be considered a beta product and will be subject to changes in the future that may result in compatibility issues.
• New API gams_engine that allows the creation of Python clients for GAMS Engine has been added.

## Expert Level APIs

• The new files gcmt.c and gcmt.h are now required when compiling/linking C expert level API files (e.g. gdxcc.c/h) to protect critical sections in the interface for multi-threaded applications. On some platforms, this might also require linking against additional libraries, e.g. libpthread on Linux. Adding the define GC_NO_MUTEX when compiling the C expert level API files provides the old behavior.
• Added new call gdxStoreDomainSets to the GDX API to control the use of one-dimensional sets as domain sets. Disabling the storage of domain information for a one-dimensional set when writing to GDX saves memory but prevents the set from being used for domain checking.

New models:

New models: