24.9 Distribution

24.9.1 Major release (August 30, 2017)


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.


  • 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


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


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



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


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


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


  • The GAMS equation and variable scale values (suffix .scale) will be communicated to CONVERT independent of the ScaleOpt model attribute.


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


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


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


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


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


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


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


  • New libraries
    • 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.


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


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


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


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


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


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



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


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


  • 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().


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


  • New functions GAMSWorkspace.AddJobFromApiLib, GAMSWorkspace.AddJobFromNoaLib to create GAMSJob from models from the GAMS API Library and the Nonlinear Optimization Applications Library.


  • 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

GAMS Model Library

GAMS Test Library