24.9 Distribution

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

## 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) to recognize and better describe how the two sets of platforms have evolved. The user communities for core platforms are large, active, and well-identified, but not so for the peripheral platforms. For the core platforms, we'll continue to make each new release of GAMS directly available for download, while the peripheral platforms will be available by request only. Finally, we expect that any change in the availability of core platforms will be announced well in advance of the event, while changes to support for peripheral platforms may occur with little or no notice. 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.nosp@m.rt@g.nosp@m.ams.c.nosp@m.om is appreciated.
• 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%
• New compile time constants to set the model attribute solveOpt:
• 0 = %solveOpt.Replace%
• 1 = %solveOpt.Merge%
• 2 = %solveOpt.Clear%
• Allow new string synonyms to set the integer values of the following command line options:
• solPrint: Off (=0); On (=1); Silent (=2)
• sysOut: Off (=0); On (=1);
• If the command line parameter dumpOpt is used, the following dollar control options get written to the dump file now:
• 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.

### 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.
• 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 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.