### Table of Contents

# 25.0.1 Major release (January 17, 2018)

## 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, Jeff Dischler, Michael Ferris, Dhruv Gupta, Erwin Kalvelagen, Florian Landis, Andre Lemelin, Erfan Mohagheghi, Anthony Paul, and Nathan Sudermann-Merx.

## Platforms

- Due to the discontinuation of Cplex on Windows 32bit (with Cplex 12.7 in 2016) we are faced with potentially phasing out/dropping solvers depending on Cplex on Windows 32bit with the next major release. The most likely candidate for this is ANTIGONE. These solvers will still be available for 64-bit Windows and other supported platforms. Other solver vendors (e.g. Gurobi and FICO-Xpress) have also announced the discontinuation of their product on the Windows 32bit platform. If you rely heavily on the availability and support of the Windows 32bit platform please contact suppo to discuss your options. rt@g ams.c om
- As announced, dropped support for x86-64 Solaris.
- As announced, increased the minimal required MacOS X version to 10.11.
- As announced, increased the minimal required GLIBC version on Linux to 2.12.

## GAMS System

### GAMS

- Extended the
`$offEmbeddedCode`

facility to allow the use of a "projection operator":`$offEmbeddedCode {symbol[<[=]embSymbol[.dimX]]}`

More information can be found here. - Added support for the Object-oriented GAMS Python API in the Embedded Code Facility for Python. The method
`gams.set()`

accepts instances of type`GamsParameter`

,`GamsSet`

, etc. as data. Instances of`GamsWorkspace`

and`GamsDatabase`

can be retrieved using the properties`gams.ws`

and`gams.db`

. The property`gams.wsWorkingDir`

can be used to specify the working directory of the created GamsWorkspace. - Added
`$libinclude pyEmbMI`

to conveniently work with Python OO-API`GamsModelInstance`

from embedded code. See embmiex1.gms : Simple Embedded Code ModelInstance example. - Fixed a problem in embedded code when reading an empty scalar symbol.
- Fixed a problem when solving a model with solveLink 5, 6, or 7 with communicating scales without scaleOpt active.
- The EPS value in the Embedded Code Facility for Python has been changed to
`4.94066E-324`

. This is the same value that is used for EPS in the Object-oriented Python API. - New Put_Utility
`save`

: Writes a save file of the current state of execution. - Improvement for the Put_Utility Statement: It is no longer required to define a file and activate it, just to use a
`put_utility`

. - New command line option fileStemApFromEnv: Append a string read from an environment variable to the fileStem.
- Change to command line option fileStem: Create an immediate error when the value contains a "\" or "/" character to avoid problems later on.
- Fixed a bug with
`execute_unload`

, which could have caused a`set`

to be exported mistakenly as`alias`

to a different`set`

, if symbol renaming was used. - Fixed a bug which prevented to open more than 65,000 put files.
- Solves with scaleOpt=1 using GUSS or instantiations of OO-API GAMSModelInstances resulted in some circumstances in the report of scaled solutions or other erroneous behavior. Hence GAMS will now reset the modelname.scaleOpt attribute to NA before such a solve or GAMSModelInstance generation. As a consequence, models solved via GUSS or as a GAMSModelInstance in the OO-APIs will not be scaled by GAMS.
- Solving MCP models with scaleOpt=1 using the solvers AMPL or PYOMO creates an execution error now. In the past this lead to wrong results potentially.

## Solvers

### ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

- Updated Intel MKL libraries to version 2018.0 for Linux and Mac OS X and to version 2018.1 on Windows 64-bit.

### CBC

- New libraries.

### CONOPT

- New libraries 3.17G (Conopt3).
- New libraries 4.04 (Conopt4).
- Fixed a system error 65666.

### Couenne

- New libraries.
- Bugfixes and tuning for fixed point bound tightening.

- If Couenne does not find a feasible solution, but the initial point is feasible, then the initial point is now reported back to GAMS.

### CONVERT

- If the filename provided for the jacobian or hessian option contains the string
`novenames`

ConvertD will not export the original equation and variable names as set text to elements of sets i and j. Having the original equation and variable names can make the GDX file significantly larger and slow to write and read. - Fixed a problem when trying to write scaled MCP models.

### CPLEX

- New libraries 12.8.0.
- New parameters
- SubMIPScale: Parameter to scale the problem matrix when CPLEX solves a subMIP during MIP optimization
- SubMIPStartAlg: Starting algorithm for subMIP of a MIP
- SubMIPSubAlg: Algorithm for subproblems of a subMIP of a MIP
- DynamicRows: Switch for dynamic management of rows
- Sifting: Switch for sifting from simplex optimization

- In CplexD allow the BendersPartition to be set via the .stage variable suffix together with option BendersPartitionInStage.

### Gurobi

- Fixed a problem for model with SOS variables but no constraints.

### KESTREL

- New options
`neos_username`

and`neos_user_password`

can be used in the option file in order to submit authenticated jobs using a NEOS user account.

### LocalSolver

- New libraries 7.5 (20171117) for Mac OS X and Windows.
- Preprocessing entirely rewritten: size reduction by a factor up to 10 on some huge instances.
- Combinatorial models based on booleans and integers: performance improvement and increased ability to prove optimality.
- Continuous linear and nonlinear models: performance improvement through the integration of state-of-the-art algorithms.

- Note, that to use LocalSolver 7.5, a machine-specific LocalSolver license is now required. See here on how to obtain such a license. Alternatively, it is still possible to use LocalSolver 7.0 by choosing LOCALSOLVER70 instead of LOCALSOLVER as solver.

### Mosek

- New libraries 8.1.0.34.

### SBB

- Fixed a bug introduced in 24.8 that prevents the infeasSeq option to work.

### SCIP

- New libraries 5.0 (2b35b18).
- SCIP can now automatically detect and exploit symmetries in MIPs (Linux and MacOS X only)
- added parameter misc/usesymmetry to determine which symmetry handling should be used
- added parameter groups presolving/symmetry, presolving/symbreak, constraints/symresack, constraints/orbisack, constraints/orbitope

- Presolving
- new presolver sparsify that tries to cancel nonzero coefficients in linear constraints by adding multiples of linear equalities
- disabled reformulation of products of a binary variable with a linear term that does not solely involve binary variables
- added parameter constraints/quadratic/binreformbinaryonly to disable reformulation of products of binary and non-binary variables

- revised disaggregation of quadratic constraints: the number of created constraints can now be controlled and the disaggregated constraints are scaled in order to increase numerical accuracy
- replaced constraints/quadratic/disaggregate by constraints/quadratic/maxdisaggrsize to bound the total number of created constraints when disaggregating a quadratic constraint
- added parameter constraints/quadratic/disaggrmergemethod to change the strategy of how to merge independent blocks of quadratic constraints

- Primal Heuristics
- new primal heuristic ALNS that orchestrates eight different LNS heuristics adaptively using algorithms for the multi-armed bandit problem
- new primal heuristic MPEC that solves a MPEC reformulation of a mixed-binary nonlinear problem by regularized NLP reformulations
- improved the clique and variable bound pre-root heuristics, which are now often able to fix many more variables
- removed parameters heuristics/clique/{multiplier,initseed}
- replaced parameter heuristics/{clique,vbounds}/minfixingrate by heuristics/clique/minintfixingrate, heuristics/vbounds/minintfixingrate, heuristics/clique/minmipfixingrate, and heuristics/vbounds/minmipfixingrate, which check the fixing rate before LP solving and after sub-MIP presolve
- added parameters heuristics/clique/maxbacktracks and heuristics/vbounds/maxbacktracks to limit the number of backtracks in the fix-and-propagate phase
- added parameters heuristics/clique/uselockfixings and heuristics/vbounds/uselockfixings to enable fixing of additional variables based on variable locks
- added parameters heuristics/vbounds/feasvariant and heuristics/vbounds/tightenvariant to specify the fixing variants used by the vbounds heuristic
- changed default for parameters heuristics/clique/freq and heuristics/vbounds/freq from -1 to 0
- changed default for parameter heuristics/clique/priority from -1000500 to 5000
- changed default for parameter heuristics/vbounds/priority from -1100600 to 2501

- added parameters heuristics/completesol/beforepresol, heuristics/completesol/maxlpiter, and heuristics/completesol/maxcontvars
- changed default for parameter heuristics/indicator/oneopt from 1 to 0
- changed default for parameter heuristics/locks/minfixingrate from 0.25 to 0.65
- changed default for parameter heuristics/locks/priority from 2000 to 3000

- Separation (cutting planes)
- utilizing linear inequalities (computed in the OBBT propagator) to compute stronger linearizations for bilinear terms
- added parameters constraints/quadratic/usebilinineqbranch, constraints/quadratic/minscorebilinterms, and constraints/quadratic/bilinineqmaxseparounds
- added parameter constraints/quadratic/mincurvcollectbilinterms to change the minimal curvature of constraints to be considered when returning bilinear terms to other plugins
- added parameters propagating/obbt/itlimitfactorbilin, propagating/obbt/minnonconvexity, and propagating/obbt/createbilinineqs

- improved cut post-processing (apply coefficient tightening, enforce maximal dynamism), selection, and management
- added parameters separating/maxlocalbounddist, separating/maxcoefratio, and separating/intsupportfac
- removed parameter separating/orthofac
- changed default for parameter separating/cutagelimit from 100 to 80
- changed default for parameter separating/minefficacy from 0.05 to 0.0001
- changed default for parameter separating/minefficacyroot from 0.001 to 0.0001
- changed defaults for parameters separating/minortho and separating/minorthoroot from 0.5 to 0.9
- changed default for parameter separating/objparalfac from 0.0001 to 0.1
- changed default for parameter separating/poolfreq from 0 to 10

- MIP cutting planes are now separated within the tree search, too
- parameter separating/maxstallrounds only applies to nodes in the tree (not the root node, anymore); use the new parameter separating/maxstallroundsroot for the root node
- added parameters separating/∗/expbackoff to all separators, which increases the frequency exponentially over the depth in the tree
- added parameter separating/maxincrounds
- changed default for parameter separating/maxstallrounds from 5 to 1
- changed default for parameter separating/maxrounds from 5 to -1
- changed default for parameter separating/maxroundsrootsubrun from 1 to -1
- changed default for parameter separating/gomory/delayedcuts from 1 to 0
- changed default for parameter separating/gomory/freq from 0 to 10
- changed default for parameter separating/gomory/maxbounddist from 0 to 1
- changed default for parameter separating/impliedbounds/freq from 0 to 10
- changed default for parameter separating/impliedbounds/maxbounddist from 0 to 1
- changed default for parameter separating/strongcg/freq from 0 to 10
- changed default for parameter separating/strongcg/maxbounddist from 0 to 1
- changed default for parameter separating/strongcg/maxsepacuts from 50 to 20
- changed default for parameter separating/zerohalf/freq from -1 to 4
- changed default for parameter separating/zerohalf/maxbounddist from 0 to 1

- new implementation of zerohalf separator
- added parameters separating/zerohalf/badscore, separating/zerohalf/densityoffset, separating/zerohalf/goodscore, separating/zerohalf/maxcutcands, separating/zerohalf/maxrowdensity, separating/zerohalf/maxslack, separating/zerohalf/maxslackroot, and separating/zerohalf/minviol
- removed parameters separating/zerohalf/delayedcuts, separating/zerohalf/ignoreprevzhcuts, separating/zerohalf/maxcutsfound, separating/zerohalf/maxcutsfoundroot separating/zerohalf/maxdepth, separating/zerohalf/maxncalls, separating/zerohalf/maxtestdelta, separating/zerohalf/onlyorigrows, separating/zerohalf/relaxcontvars, separating/zerohalf/scalefraccoeffs, separating/zerohalf/trynegscaling, separating/zerohalf/usezhcutpool, separating/zerohalf/preprocessing/∗, and separating/zerohalf/separating/∗
- changed default for parameter separating/zerohalf/maxroundsroot from 10 to 20
- changed default for parameter separating/zerohalf/maxsepacuts from 50 to 20
- changed default for parameter separating/zerohalf/maxsepacutsroot from 500 to 100

- faster implementation of CMIR cut generation heuristic
- moved many parameters for flowcover and cmir separators to new parameter group separating/aggregation
- changed default for parameters separating/cmir/freq and separating/flowcover/freq from 0 to -1
- changed default for parameters separating/cmir/maxbounddist and separating/flowcover/maxbounddist from 0 to 1
- changed default for parameter separating/cmir/priority from -3000 to -100000
- changed default for parameter separating/flowcover/priority from -4000 to -100000

- additional parameter changes
- removed parameter separating/feastolfac
- removed parameter separating/cgmip/allowlocal
- removed parameters separating/{gomory,strongcg}/maxweightrange
- changed default for parameter separating/gomory/makeintegral from 1 to 0
- changed default for parameter separating/gomory/maxrank from 3 to -1
- changed default for parameter separating/gomory/sidetypebasis from 0 to 1
- added parameter constraints/indicator/maxsepanonviolated to stop separation after separation of non violated cuts
- removed parameters constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacysepa, constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacyenfofac, and constraints/soc/minefficacy

- utilizing linear inequalities (computed in the OBBT propagator) to compute stronger linearizations for bilinear terms
- Propagation
- use disjoint set to reduce peak memory usage and time to compute clique table connectedness information
- added analysis of the clique table which identifies possible aggregations via the search for strongly connected components and may detect infeasible assignments on the way
- added parameter propagating/vbounds/minnewcliques to specify the minimum number of new cliques to trigger another clique table analysis
- added parameters propagating/vbounds/maxcliquesmedium and propagating/vbounds/maxcliquesexhaustive to limit the number of cliques relative to the number of binary variable for performing clique table analysis
- changed default for parameter propagating/vbounds/presolpriority from 0 to -90000
- changed default for parameter propagating/vbounds/presoltiming from 28 to 24

- extended conflict analysis by analyzing dual solutions of boundexceeding LPs and improved dual ray analysis
- removed parameters conflict/usemir and conflict/prefermir
- added parameter conflict/sepaaltproofs
- added parameter conflict/prefinfproof to determine whether to prefer infeasibility proof to boundexceeding proof
- changed default for parameter conflict/useboundlp to 'b'
- changed default for parameter conflict/maxvarsfac from 0.1 to 0.15
- changed default for parameter conflict/maxvarsfac from 30 to 0

- LP Relaxation
- use LP solution polishing during probing and diving mode to activate it during many primal heuristics; remains disabled during strong branching and OBBT
- only effective if using SoPlex as LP solver
- added value 3 for parameter lp/solutionpolishing to enable LP polishing only during probing and diving mode

- added parameter lp/refactorinterval to change the refactorization interval of the LP solver

- use LP solution polishing during probing and diving mode to activate it during many primal heuristics; remains disabled during strong branching and OBBT
- removed parameters constraints/{abspower,bivariate,nonlinear,quadratic,soc}/scaling
- added parameter groups "table/*" to control statistic output
- See also the full release notes, the changelog, and the release paper.

- SCIP can now automatically detect and exploit symmetries in MIPs (Linux and MacOS X only)
- Fixed a problem when solving a model with solveLink 6 or 7 with scaleOpt active.

### SolveEngine

- The GAMS time limit (reslim) is now passed to SolveEngine. Added solver option hardtimelimit to specify a time limit that is enforced on the GAMS side.

### SoPlex

- New libraries 3.1.0 (876e6e8).
- New scaling method that combines geometric and equilibrium scaling. Use new value 6 for option int:scaler to activate this.

### Xpress

- New libraries 32.01.05.

## Tools

### CDSP

### GDXXRW

- Sometimes, Excel is not ready (e.g. because some data needs to be refreshed, when a worksheet is opened), when a read request is sent by GDXXRW. This could cause an exception. With this release we changed the behavior of GDXXRW to wait a second and resend the request in this case. This basically mimics the behavior of setting RWait to 1000 in case of the mentioned exception.

## Object Oriented APIs

### C++

- Changed the compiler from GCC to Clang on Mac OS X.
- Added support for Microsoft Visual Studio 2015 and Microsoft Visual Studio 2017 on Windows 64-bit.
- API binaries have been moved to
`apifiles/C++/lib`

. On Windows, there are further subdirectories for different compiler versions. - Update of Visual Studio solutions for the examples on Windows. Three different solutions reflecting the supported versions of Microsoft Visual Studio are available (e.g. examples-vs2013.sln, examples-vs2015.sln, examples-vs2017.sln).
- The GAMS C++ API tutorial has been reworked. Information about building the C++ API examples via cmake, qmake, and Microsoft Visual Studio has been added.
- New example
`TransportGDX`

that shows how to import and export GDX files. A description has been added to the tutorial.

### .NET

- Changes for
`GAMSSymbol`

and`GAMSSymbolRecord`

: Both classes got the`IEquatable<T>`

Interface. As a result the behavior of the`Equals`

function as well as the`==`

and`!=`

operators were modified. For both classes`Equals`

and`==`

returns now true, if the internal data reference is the same. Here is an example:In previous versions we got this output:GAMSVariable x1 = db.GetVariable("x");GAMSVariable x2 = db.GetVariable("x");if(x1 == x2)Console.WriteLine("x1 == x2");elseConsole.WriteLine("x1 != x2");if (x1.Equals(x2))Console.WriteLine("x1 equals x2");elseConsole.WriteLine("x1 does not equal x2");Now we get:x1 != x2x1 does not equal x2x1 == x2x1 equals x2 - New example
`TransportGDX`

that shows how to import and export GDX files.

### Java

- The minimum version requirement of the Java Runtime Environment for using the GAMS Java API is now Java SE 7.
- New
`TransportGDX`

example to demonstrate how to import and export GDX files. - Removed method
`GAMSSymbol.compact`

, deprecated since 24.8.1 (December 2016). Changed equivalence behavior of

`GAMSSymbol`

and`GAMSSymbolRecord`

objects. As a result, two symbol objects with the same internal reference are now equivalent, similar to symbol record objects:- Two symbols are equivalent if and only if they have the same internal reference.
- Two symbol records are equivalent if and only if they have the same internal reference.

The behavior of operator

`==`

remains unchanged. The following exmaple illustrates the new equivalence behavior:

### Python

- Added implementation of
`__eq__()`

and`__ne__()`

to classes`_GamsSymbol`

and`_GamsSymbolRecord`

and its derived classes. As a result the behavior of the operators`==`

and`!=`

has changed.`==`

now returns`True`

, if the internal data reference is the same. The behavior of`is`

remains unchanged. The following example illustrates the change:x1 = db["x"]x2 = db["x"]print(x1 == x2) # now: True, before: Falseprint(x1 is x2) # now: False, before: False - New example
`transport_gdx.py`

that shows how to import and export GDX files. A description has been added to the tutorial.

## Expert Level APIs

- As announced, the expert-level C++ API files were removed from the distribution. Users should switch to the expert-level C API files. The object-oriented C++ API introduced in the last major release could also be a good alternative for replacement if the user C++ code exchanges data and runs a GAMS model.
- The expert-level Java API files now ensure the load of jni libraries in the similar order as those employed by the Object Oriented Java API: first load from
`java.library.path`

, if neither specified nor found then from the directory where the API classes are located.

### GDX

- Do not allow empty filename as argument for
`gdxOpenAppend`

,`gdxOpenRead`

,`gdxOpenWrite`

, and`gdxOpenWriteEx`

. This will create an error right away now.

## Model Libraries

### GAMS Model Library

- embmiex1.gms : Simple Embedded Code ModelInstance example (417)
- spbenders1.gms : Stochastic Benders - Sequential GAMS Loop (418)
- spbenders2.gms : Stochastic Benders - Async Subsolve GAMS Loop (419)
- spbenders3.gms : Stochastic Benders - Sequential GamsModelInstance (420)
- spbenders4.gms : Stochastic Benders - Parallel MPI (421)
- spbenders5.gms : Stochastic Benders - Parallel MPI with GAMSModelInstance (422)
- Most models in the GAMS Model library have been refurbished to reflect a common syntax style and features introduced since the model was added.
- prime: Make use of the
`break`

statement for a little nicer and faster formulation.

### GAMS Test Library

- scensol7.gms : Test GUSS Option ReportLastScen (737)
- emp27.gms : Test LOGMIP/EMP on x.fx=0 handling (738)
- embpy03.gms : Test projection operator when loading data from embedded code (739)
- qcp11.gms : Test dual solution of SOCP (740)
- put11.gms : Put_Utility without file handle (741)

# 25.0.2 Maintenance release (January 31, 2018)

## 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 Tom Rutherford.

## GAMS System

### GAMS

- Bugfix: $offEmbeddedCode does not ignore $onUNDF anymore.
- Bugfix: Special values (NA, EPS, INF, ...) are correctly communicated from embedded code back to GAMS.
- Bugfix: Took care about a problem, which caused an unexpected execution error for certain uses of Put_Utility.
- Fixed a bug in GMSPython on Mac OS X which prevented the Python interpreter from working. This problem occurred with the DMG installer only.

## Solvers

### ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

- On Linux, removed the MKL libraries that were optimized to certain x86 instruction sets (AVX, etc.) as this resulted in errors when running ANTIGONE or SCIP, probably due to library conflicts.

### CPLEX

- Option Tuning can be repeated in a GAMS/Cplex option file to provide a larger number of model instances for tuning. Before this change the number was restricted by the maxium line length of an option line (256 characters).

### LocalSolver

- New libraries 7.5 (20180119) for Mac OS X and Windows.

## Tools

### CSDP

### CSV2GDX

- Bugfix: Reading sets (no Value or Values option) with the option AutoRow works again.