24.9 Distribution

### Table of Contents

# 24.9.1 Major release (August 30, 2017)

## 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 Jan Abrell, Etienne Ayotte-Sauvé, Wolfgang Britz, Florian Habermacher, Florian Häberlein, Maximilian Held, Ignacio Herrero, Hanspeter Höschle, Erwin Kalvelagen, Toni Lastusilta, John Ross, Tom Rutherford, and Linus Schrage.

## Platforms

- The set of supported platforms has not changed, but we've divided it into the
*core*platforms (Windows 32-bit, Windows 64-bit, Linux, and Mac OS X) and the*peripheral*platforms (AIX, x86-64 Solaris, and Sparc64 Solaris). See Supported Platforms for more details. Please note, however, that we are*not*changing the content or behavior of GAMS based on this division: GAMS models will continue to work in the same cross-platform way for both core and peripheral platforms. - We will drop support for x86-64 Solaris with GAMS 25.0.
- We may increase the minimal required GLIBC version on Linux to 2.12 with GAMS 25.0.
- We may increase the minimal required MacOS X version to 10.11 with GAMS 25.0.

## GAMS System

### GAMS

- New feature, the Embedded Code Facility: This extends the connectivity of GAMS to other programming languages. It allows the use of Python code during compile and execution time. GAMS symbols are shared with the external code, so no communication via disk is necessary.

The embedded code feature is available on Linux, MacOS X, and Windows. For these platforms, a Python 3.6 installation is included with the GAMS distribution. If the user wants to work with a different Python 3.6, installed separately, for models with embedded code the new command line option pySetup needs to be set to 0.- Note
- This feature is currently in beta status. Any feedback to suppo is appreciated. rt@g ams.c om

- New command line option procDirPath: Specifies the directory where the process directory should be created.
- New compile time constants to set the model attribute
`solPrint`

:- 0 = %
`solPrint.Off%`

- 1 = %
`solPrint.On%`

- 2 = %
`solPrint.Silent%`

- 0 = %
- New compile time constants to set the model attribute
`solveOpt`

:- 0 = %
`solveOpt.Replace%`

- 1 = %
`solveOpt.Merge%`

- 2 = %
`solveOpt.Clear%`

- 0 = %
- Allow new string synonyms to set the integer values of the following command line options:
- Fixed a bug where the following dollar control options did not get written to the dump file when the command line parameter dumpOpt was used. Sometimes this caused an error in the generated file.
- Fixed an error which caused the loss of equation information when using the Grid facility in certain cases. This could have caused problems when a hot start should be performed.
- A parameter error is now created if the key of a 'double dash' GAMS parameter exceeds 63 characters (in the past, the key was truncated silently in this case).
- Fixed a crash which happened if the
`.tl`

suffix was used on an empty Singleton Set in a put statement. - Fixed a bug which could have caused a crash if nested loops where used in a particular combination.
- Fixed a bug with
`$onPut ... $offPut`

in a`for`

and`repeat`

structure: When`$onPut`

was the first statement inside one of these programming flow control features, it was executed just once and not repeatedly.

### Special Functions

- Several of the more exotic GAMS intrinsic functions (aka "special functions") were re-implemented to address some bug reports and to pass a more rigorous set of tests. The updated functions include the loggamma, gamma, logbeta, beta, and binomial functions. In general, the updated functions offer improved precision and a more consistent behavior in exceptional cases (e.g. overflows, singularities, and domain violations) compared to the previous versions. In addition, the gamma and beta functions are now classified as smooth (NLP) instead of nonsmooth (DNLP) and the domains of the beta and binomial functions have been changed.

### Documentation

- The contents of GAMS User's Guide and the McCarl (Expanded) User's Guide have been merged, revised, and reorganized as User's Guide as well as A GAMS Tutorial by Richard E. Rosenthal. Also other parts of the documentation has been reorganized and are now more closely integrated.
- The McCarl GAMS User Guide (CHM and PDF) can now be found in the
`mccarl/`

subdirectory in the distribution. - The PDFs containing the solver manuals and the GAMS User's Guide have been replaced by a single PDF containing large parts of the current documentation. However, the main format for the documentation is HTML.

## Solvers

### BARON

- New libraries 17.8.7.
- New range reduction techniques and relaxations for quadratic constraints.
- New heuristics for finding feasible solutions of integer programs.
- Improvements in interfaces to local NLP solvers, including the use of second-order derivatives.
- FilterSQP added to the list of local solvers. New option AllowFilterSQP and added new possible value 14 for option NLPSol.
- Bugfixes.

### CBC

- New libraries.
- Fixed some problems with the handling of SOS type 2 in presolve.

- Added option dumpsolutionsmerged to write all found alternate solutions into a single GDX file.

### Conopt

- New libraries 3.17E and 4.03.
- Fixed a serious error in Conopt4 for exactly threads=8. Moreover, improved multi-threading performance.
- Major revisions to Conopt4 for reliability and performance.

- The option Rtzern is now user settable for Conopt3.

### CONVERT

- The GAMS equation and variable scale values (suffix
`.scale`

) will be communicated to CONVERT independent of the ScaleOpt model attribute.

### CPLEX

- Added option workerAlgorithm to select the method for optimizing Benders subproblems.
- Added option writeAnnotation to create Cplex annotation file.
- The header of MIP/solve trace files contains now the option number and the name of the model.

### DECIS

- DecisC, DecisM, and the EMP-SP solver Decis are now available for MacOS X.

### GAMSCHK

- The procedures that generate output in the listing file are summarized at the end of the GAMSCHK execution. If you use the IDE, these summary lines are clickable and locate the cursor to the corresponding subsection in the IDE. Moreover, the procedures are also entered in the listing file index after the Solution Report.
- The lower bound for options LevelFilt and MargFilt has been reset from 1 to -5.

### GUROBI

- New libraries 7.5.1.
- Fewer constraint violations in MIQP solutions: Gurobi has tightened the internal tolerances for MIQP models to reduce the number of cases where the solution exhibits small constraint violations.

- New parameter startNodeLimit provides additional control over how much is performed to complete a partial MIP start.
- Gurobi 7.5 will be the last Gurobi release that supports 32-bit Windows. You should plan to migrate your applications to 64-bit Windows in the future.
- The header of MIP/solve trace files contain now the active option number and the name of the model.

### GUSS/Scenario Solver

- Fixed a problem when initializing variables bounds to 0 (
`updateType=0`

) that have scenario update parameters for lower and upper bounds.

### Lindo/LindoGlobal

- New libraries 11.0
- LP Solver Improvements:
- With new enhancements made to the simplex solvers, the average performance on large instances has increased by 20% for the primal simplex and 15% for the dual simplex compared to the previous version.

- MIP Solver Improvements:
- New symmetry detection capabilities to reduce overall branch-bound effort. This may dramatically reduce the time needed to prove optimality on some models with integer variables.
- Perspective and soft-clique cuts effective on difficult MIQP and models with assignment constraints.

- Global Solver Improvements:
- Improved stability and robustness through several enhancements to quadratic recognition and range reduction.

- Nonlinear Solver Improvements:
- New major release of the nonlinear solver.
- Improved preprocessor.
- Use of interval function and derivative computations.
- Advanced scaling leading to improved solution quality.

- LP Solver Improvements:

### LocalSolver

- New libraries 7.0 (20170728).
- Reinforcement of mixed-integer linear programming (LP & MIP) techniques for combinatorial optimization.
- Reinforcement of nonlinear programming techniques (NLP) for numerical optimization.

### MINOS

- New libraries 5.6 (dated July 2016).
- Improved handling of singularites and empty cols in pivoting code.
- Further bug fixes and improvements.

- Fix improper handling of scaled CNS models.
- Fix handling of logging frequency.
- QUADMINOS, the quadruple-precision version of MINOS, has been available in previous releases (since 24.4). This release includes the library model [DQQ], an example of how to use MINOS and QUADMINOS together to compute greatly improved solutions at moderate cost.

### MOSEK

- New libraries 8.1.0.23.
- Performance of the presolve has been improved slightly.
- Multi-thread performance of the conic optimizer has been improved for certain large models.
- Changed scaling for quadratic and quadratically constraint optimization problems.
- Bugfixes.

### MPSGE

- The MPSGE $sysInclude
`mpsgeset`

allows now for an optional argument`-mt=0`

or`1`

after the model name. The default value for the argument`mt`

can be controlled via the double dash option`--MPSGEMT=0`

or`1`

. If the`mt`

option is set to 1 the`MODEL.GEN`

file is created in the GAMS scratch directory. Hence the`$include`

before the solve needs to read`$include "%gams.scrdir%MODEL.GEN"`

. This allows to run multiple MPSGE jobs with the same model in the same working directory. The default of this option is 0. The model hansmge demonstrates the use.

### SBB

- The header of MIP/solve trace files contains now the option number and the name of the model.

### SCIP

- New libraries 4.0 (9d3c1b1).
- Improved conflict analysis through central conflict pool and dual ray analysis for primal infeasible LPs.
- New solution polishing to improve integrality of LP solutions when using SoPlex as LP solver.
- Added adaptive solving behavior of SCIP based on solving phases and heuristic transitions.
- Revised pseudo random number generation and introduced central random seed for all plugins.
- Randomized tie-breaking in different parts of the code to reduce performance variability.
- New primal heuristics GINS, LP face, Complete Sol, Locks, Repair, and Multistart.
- The 1-opt heuristic is now iterated as long as new incumbents are found.
- Improved tuning of heuristic timings.
- Reduced memory usage of primal heuristics that use problem copies.
- New presolving steps that disaggregate SOC constraints, reformulate QP's by adding KKT conditions, and treat variables appearing only in a single quadratic constraint with proper square coefficients.
- New separators for gauge cuts, convex projection cuts, and perspective cuts for indicator constraints.
- Improved knapsack approximation algorithms, greedy knapsack solution for the flow cover separation, clique partitioning, and clique separation.
- New propagator for OBBT on convex NLP relaxation.
- Tuned propagation methods of several constraint handlers and propagation timings.
- Improved and extended stuffing for linear constraints.
- Changed handling of coupling constraints for indicator constraints.
- See also the full release notes, the changelog, and the release paper.
- Changed parameters:
`presolving/components/`

* moved to`constraints/components/`

*`conflict/depthscorefac`

renamed to`conflict/graph/depthscorefac`

`misc/permutationseed`

renamed to`randomization/permutationseed`

`misc/permuteconss`

renamed to`randomization/permuteconss`

`misc/permutevars`

renamed to`randomization/permutevars`

`branching/random/seed`

: default changed from 0 to 41`constraints/indicator/sepacouplingcuts`

: default changed from 0 to 1`constraints/SOS1/perfimplanalysis`

: default changed from 1 to 0`heuristics/ofins/freq`

: default changed from -1 to 0`heuristics/reoptsols/freq`

: default changed from -1 to 0`heuristics/trivialnegation/freq`

: default changed from -1 to 0`heuristics/clique/initseed`

: default changed from 0 to 61`lp/solver`

: default changed from soplex to soplex2, if CPLEX is not licensed`presolving/abortfac`

: default changed from 0.001 to 0.0008`separating/clique/cliquedensity`

: default changed from 0.05 to 0`conflict/usesb`

: default changed from 0 to 1

- Added option gams/dumpsolutionsmerged to write all found alternate solutions into a single GDX file.
- Changed default for timing/clocktype to wallclock time.
- Initial variable levels can now be passed as partial solution to SCIP. To control the various possibilities, the type of option gams/mipstart has changed from bool to integer. See also subsection Starting point in the GAMS/SCIP solver manual.

### SolveEngine

- New solver SolveEngine to solve LP and MIP problems remotely via the Satalia SolveEngine. The SolveEngine aggregates different solution algorithms for optimization problems and automatically selects an algorithm that seems to suite best for a given model instance.
- GAMS/SolveEngine comes free of charge with any licensed GAMS system. Users must have an API key for the Satalia SolveEngine to submit jobs.

### SoPlex

- New libraries 3.0 (c32c55a).
- Added a new scaling implementation Least squares (Curtis-Reid scaling).
- Added persistent scaling to keep scaled LP for multiple reoptimizations.
- Added an experimental version of a decomposition based approach to avoid degeneracy in the dual simplex method. This feature is activated by setting the parameter bool:decompositiondualsimplex to true, which sets the basis representation to 'row' and the algorithm to 'dual'.
- New parameter bool:computedegen to enable computation of the degeneracy of the basis in each iteration.
- New parameter int:printcondition to enable printing the condition number of the basis during solve.
- Automatically use the row representation for problems with more than 20% more constraints than variables.
- Changed default for parameter int:factor_update_max from 200 to new value 0.
- See also the full release notes and the release paper.

- Changed default type of timer to wallclock time.

### XPRESS

- New libraries: Optimizer 31.01.09 (aka XPRESS 8.3). There are many improvements and additions:
- The parallel MIP code has been completely rewritten to improve performance and scalability.
- Reduced overhead for small, easy MIPs.
- Reduced the memory usage for very large MIPs, especially those that are significantly reduced during the initial preprocessing.
- Heuristics can now be run in parallel with cutting in deterministic mode. Previously, heuristics would only be run in parallel after cutting.
- Improved implementation of zero-half cutting.
- Aggregated Mixed Integer Rounding cuts have been improved for network-type problems.

- New presolve reductions, strengthenings and reformulations for convex quadratic problems.
- Improved performance and numerical stability of crossover.
- Code support for AVX2 in the barrier solver: use option cpuPlatform to select the target instruction set.
- Crossover after a barrier solve is now multi-threaded: see option crossoverThreads for details.

- The parallel MIP code has been completely rewritten to improve performance and scalability.
- The header of MIP/solve trace files contains now the option number and the name of the model.

## Tools

### CSV2GDX

- New option
`ValueDim`

: Indicate if an extra dimension for values is added even if there is just one value column. This is ignored, if there is no value column.

### GDXDUMP

- Fixed a problem with writing a scalar variable or equation in CSV format with all fields.

### GDXMERGE

- Improved feedback about problems when processing input files.

## Object Oriented APIs

- Fixed a bug regarding
`SymbolUpdateType.Zero`

that prevented records from being updated in`GAMSModelInstance.Solve()`

.

### C++

- This release contains a beta version of the object-oriented C++ API that can be used to control GAMS from within C++11 and later. It allows the seamless integration of GAMS into C++ applications by providing appropriate classes for the interaction with GAMS. The GAMSDatabase class for in-memory representation of data can be used for convenient exchange of input data and model results. Models written in GAMS can be run with the GAMSJob class and by using the GAMSModelInstance class a sequence of closely related model instances can be solved in an efficient way.
- The API is available in the distributions for Linux, MacOS X, and Windows.
- Futhermore, the C++ API is published under MIT license and is hosted at the GAMS GitHub organization.
- To use this API please check the GAMS API documentation.

### .NET

- New functions
`GAMSWorkspace.AddJobFromApiLib`

,`GAMSWorkspace.AddJobFromNoaLib`

to create GAMSJob from models from the GAMS API Library and the Nonlinear Optimization Applications Library.

### Python

- New functions
`GamsWorkspace.add_job_from_apilib`

,`GamsWorkspace.add_job_from_noalib`

to create GamsJob from models from the GAMS API Library and the Nonlinear Optimization Applications Library. - Added a version check for the setup.py scripts to avoid unintentional installation of wrong versions.

## Expert Level APIs

- With GAMS 25.0, the expert-level C++ API files will be removed from the distribution. Users should switch to the expert-level C API files. The object-oriented C++ API introduced in this release could also be a good alternative for replacement if the user C++ code exchanges data and runs a GAMS model.

### GAMS Modeling Object

- Changed the function
`gmoGetModelTypeTxt`

: Added argument for model type number instead of using the model type of the stored model.

## Model Libraries

### GAMS Data Library

- embeddedSort.gms : Sorting of numerical data using the embedded code facility (108)
- embeddedSplit.gms : Splitting of labels using the embedded code facility (109)
- embeddedMultiInstance.gms : Handling multiple instances of the embedded code facility at once (110)

### GAMS Model Library

- dqq.gms : Warm-starting quad-precision MINOS (414)
- cbenders.gms : Cplex Benders for a Simple Facility Location Problem (415)
- robustlp.gms : Robust linear programming as an SOCP (416)

### GAMS Test Library

- mpsge14.gms : MPSGE sync test: .GEN/integer1/nsolves (713)
- fnsincosintrv.gms : Test sin/cos func/grad interval evals (714)
- procdir1.gms : Test correct behavior of procDir, scrDir and procDirPath (715)
- empbp06.gms : Bilevel model with phantom vars owned by leader (716)
- fnslexp.gms : Test correctness of slexp intrinsic (717)
- fnslexp2.gms : Test correctness of slexp intrinsic (718)
- fnsqexp.gms : Test correctness of sqexp intrinsic (719)
- fnsqexp2.gms : Test correctness of sqexp intrinsic (720)
- fnsllog10.gms : Test correctness of sllog10 intrinsic (721)
- fnsllog102.gms : Test correctness of sllog10 intrinsic (722)
- fnsqlog10.gms : Test correctness of sqlog10 intrinsic (723)
- fnsqlog102.gms : Test correctness of sqlog10 intrinsic (724)
- fnslrec.gms : Test correctness of slrec intrinsic (725)
- fnslrec2.gms : Test correctness of slrec intrinsic (726)
- fnsqrec.gms : Test correctness of sqrec intrinsic (727)
- fnsqrec2.gms : Test correctness of sqrec intrinsic (728)
- fnloggamma.gms : Test correctness of loggamma intrinsic (729)
- fnbinomial.gms : Test correctness of binomial intrinsic (730)
- breakcont2.gms : Advanced test for break and continue statements (731)
- fnlogbeta.gms : Test correctness of logbeta intrinsic (732)
- fnbeta.gms : Test correctness of beta intrinsic (733)
- ssuffix.gms : List of all System Suffixes (734)
- embpy01.gms : Test for embedded code facility (735)
- embpy02.gms : Test for embedded code facility (736)

## Solver/Platform availability

x86 32bit MS Windows | x86 64bit MS Windows | x86 64bit Linux | x86 64bit Mac OS X | x86 64bit SOLARIS | Sparc 64bit SOLARIS | IBM Power 64bit AIX | |
---|---|---|---|---|---|---|---|

ALPHAECP | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

ANTIGONE 1.1 | ✔ | ✔ | ✔ | ✔ | |||

BARON | ✔ | ✔ | ✔ | ✔ | |||

BDMLP | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

BONMIN 1.8 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

CBC 2.9 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

CONOPT 3 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

CONOPT 4 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

COUENNE 0.5 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

CPLEX 12.7 | 12.6 | ✔ | ✔ | ✔ | 12.6 | 12.6 | ✔ |

LINDO 11.0 | ✔ | ✔ | ✔ | ✔ | |||

DECIS | ✔ | ✔ | ✔ | ✔ | ✔ | ||

DICOPT | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

GLOMIQO 2.3 | ✔ | ✔ | ✔ | ✔ | |||

GUROBI 7.5 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

GUSS | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

IPOPT 3.12 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

KESTREL | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

KNITRO 10.2 | ✔ | ✔ | ✔ | ✔ | |||

LGO | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |

SBB | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

LINDOGLOBAL 11.0 | ✔ | ✔ | ✔ | ✔ | |||

LOCALSOLVER 7.0 | ✔ | ✔ | ✔ | ✔ | |||

MILES | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

MINOS | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

MOSEK 8 | ✔ | ✔ | ✔ | ✔ | |||

MSNLP | ✔ | ✔ | ✔ | ✔ | ✔ | ||

NLPEC | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

OQNLP | ✔ | 32bit | |||||

PATH | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

SCIP 4.0 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

SNOPT | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

SOLVEENGINE | ✔ | ✔ | ✔ | ✔ | |||

SOPLEX 3.0 | ✔ | ✔ | ✔ | ✔ | ✔ | ||

XA | ✔ | ✔ | ✔ | ||||

XPRESS 31.01 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 29.01 |

# 24.9.2 Minor release (November 14, 2017)

## 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, Paul Buckland, William N. Caballero, Xin Fang, Christophe Gouel, Fabricio Porras-Ortiz, Shigeru Tsubakitani, and Haoshui Yu.

## GAMS System

### GAMS

- Added prefixing of
`PYTHONPATH`

with the site-packages directory of the GAMS Python 3.6 installation in`GMSPython`

. - Added support for Python sets in the Embedded Python Code method
`gams.set()`

. - Speed up detection/extraction of quadratic terms for QCP models.
- Do not allow the use of Embedded Code if execMode is set to 2 or higher.

### Installer

- Removed the execution of a Python script during the Windows installation process that patches the path of certain Python programs in
`GMSPython\Scripts`

.

## Solvers

### BARON

- New libraries 17.10.16.
- Due to a problem with the Ipopt interface in BARON on Mac OS X, the use of Ipopt in BARON is currently disabled on Mac OS X.
- GAMS can now pass a term like
`(negativeConstant)**negativeIntegerVariable`

to BARON.- Note
- By default, GAMS correctly rejects such a formulation, though. To work around this,
`MaxExecError`

needs to be set to a positive number and the option sys12 needs to be set to 1. Here is an example, how this could be used:`scalar a /-2/; integer variable x; x.lo = -3; x.up = 3; variable z; equation e; e.. z =e=a**x; model m /e/; x.l=1; MaxExecError = 10; option sys12 = 1; solve m min z use minlp;`

### CPLEX

- Removed any limits on the number of Threads in a GAMS/CPLEX option file. Previously, the maximum for option Threads was 128.

### CONOPT

- New libraries 3.17F.
- Fixed an infinite loop when using option LMMXSF.

### CONVERT

- Fix for variables with negative lower and infinite upper bound in LINGO output. The LINGO output has been changed to always use the
`@Bnd`

keyword to write variable bounds.

### GUROBI

- New libraries 7.5.2.

### GUSS/Scenario Solver

- Added the GUSS option
`ReportLastScen`

. If this is set to 1 the solution of the last scenario will be reported back to GAMS rather than solution of the base case. This is particularly useful when GUSS is used to implement a homotopy approach where the shock to a parameter is sliced in several small shocks and hence the last scenario represents the solution to the shocked system.

### Lindo/LindoGlobal

- New libraries 11.0.300.

### LogMIP

- Fixed improper handling of variables fixed at zero that occurred if they were used in nonlinear equations in a disjunction reformulated via the convex hull.

### Mosek

- New libraries 8.1.0.31.
- Fixed dual solution for conic quadratic problems.

### SCIP

- New libraries 4.0 (#22b4564).

### SoPlex

- New libraries 3.0 (#3bfa247).

## Object Oriented APIs

### C++

- Added a try/catch block around the code that uses the classes from the GAMS C++ OO-API in all examples. Without this, the exceptions thrown by the methods of the GAMS classes will not be reported and
*harmless*exceptions, like a compilation or execution error in the GAMSJob.run method result in application crashes.

### Python

- Fixed a bug in the setup script that prevented files from being installed in the correct location in certain cases.