38 Distribution

# 38.1.0 Major release (January 31, 2022)

## 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 Marcel Adenauer, Albert Brouwer, Arne Drud, Daniel Jungen, Scott McDonald, Tom Rutherford, Seyed Amin Sedgh, and Wenjin Zhou.

## Platforms

• As announced, dropped support for Mac OS X 10.14 (Mojave).
• Added support for Mac OS X 12 (Monterey).

## GAMS System

### GAMS

• Added new command line parameter dumpOptGDX to load the data needed in dumpOpt files from GDX instead of data statements.
• Added new command line parameter ReferenceLineNo to control the line numbers written to a reference file.
• We plan to drop the command line parameter freeEmbeddedPython with the next major release.
• Extended the Solve Summary written with asyncSolLst=1 to include information about controlling loop indices during job submission, name of the solver called, source line number of the solve statement, resource and iteration limit.
• Make handling of execution errors during model generation (e.g. division by zero in an equation) more consistent across different settings for the solveLink option. In the past, the error count was set to 0 automatically when returning from a solve with solveLink=0 only (which is equivalent to setting execError=0 after the solve statement). This is not done anymore.
• Write additional information about execution errors during model generation (e.g. division by zero error) to the lst file, e.g., the equation name and index causing the problem.
• Improve recognition of '/' as path delimiter on Windows.
• Pause automated time dependent log update while executing embedded code sections.
• Check for certain byte order marks (BOMs) in GAMS input files. Files with UTF8 BOM can be processed now, other BOMs generate a compilation error.
• Added support for (mixed-integer) quadratic models whose Q matrices contain more than $$2^{31}$$ = 2,147,483,648 nonzeros in their upper triangle. At this time, only the solver links for CPLEX and ODHCPLEX are capable of handling such large model instances.
• Changed system suffix isAlfaBeta to isAlphaBeta.
• Fixed a problem for EMP models with holdFixed model attribute.
• Fixed a problem where IDCGenerateGDXInput, IDCGenerateGDXOutput, IDCGDXOutput , and IDCGenerateGDX did not write a GDX file if the execution was stopped with abort[.noError].

### Extended Mathematical Programming (EMP)

• Stochastic EMP: Changed the stage behavior so that it creates an explicit error when a stage gets assigned twice for the symbol. In the past, this caused erratic behavior.

### Embedded Python Code Facility

• The Python version of GMSPython has been updated to 3.8.12.

### Extrinsic Function libraries

• With the next distribution we will drop the extrinsic function library parcclib.

## Solvers

### BARON

• New libraries 22.1.16.
• new presolve implementation with novel presolve techniques for linear and nonlinear optimization problems improves performance for many problem classes
• more classes of SOCPs are now recognized
• new lift-and-project implementation that extends the previous RLT implementations to generic NLPs and MINLPs and leads to substantial reduction of duality gaps for difficult problems
• improved tree management, including restarts of branch-and-bound search
• improved branching routines for the identification of most important branching variables
• dynamic LP algorithm selection strategy improves robustness for numerically difficult problems by automatically choosing between CPLEX (if licensed) and CLP/CBC and possibly switching during the search, see also option LPSol
• improved control on the effect of floating point round-off errors
• faster hashing routines
• the embedded FilterSD algorithm is now off by default
• better integration with GAMS NLP subsolvers
• improvements to CBC and IPOPT interfaces
• update the Xpress interface to work with FICO XPRESS 39
• Fixed reporting of proven irreducible infeasible sets ("IIS" instead of "(I)IS").

### CONOPT

• New libraries 4.25.
• General improvements in the construction of the initial basis and in the startup of the optimization process, especially for very large models.
• Many small improvements and corrections of errors found by users.

### DICOPT

• Fixed that non-default stage information was setup in sub-MIPs when prioropt=0.

### KNITRO

• New libraries 13.0.
• Introduces an updated, parallel, branch-and-bound solver for mixed-integer optimization. This updated solver is able to exploit parallelism and uses improved heuristics to solve mixed-integer problems much faster than before.
• Offers new initial point strategies for non-convex quadratic programs (QPs) and quadratically constrained quadratic programs (QCQPs). These new initial point strategies improve the likelihood of finding the global solution, and can be used in conjunction with the Knitro multi-start procedure to search for global or better local solutions for non-convex QP and QCQP models.
• Offers significant robustness and speed improvements on difficult nonlinear optimization problems.
• Offers improved performance when using the SQP and MISQP algorithms on larger models.
• ncvx_qcqp_init: Specifies the initialization strategy used for non-convex QPs and QCQPs.
• mip_cutoff: This value specifies the objective cutoff value for MIP.
• mip_heuristic_lns: Specifies whether or not to enable the MIP large neighborhood search (LNS) heuristics.
• mip_liftproject: Specifies rules for adding lift and project cuts.
• mip_multistart: Use to enable MIP multi-start at the branch-and-bound level.
• mip_numthreads: Specify the number of threads to use for MIP branch and bound.
• Renamed options (old option names still available as synonyms but deprecated):
• Changed option defaults:
• Fixed possible error of incorrect Jacobian for QCP models.

### Lindo/LindoGlobal

• New libraries 13.0.319.

### LocalSolver

• As announced, dropped LocalSolver and LocalSolver70.

### MOSEK

• New libraries 9.3.11.
• Added support for LPs and MIPs with more than $$2^{31}$$ entries in the coefficients matrix.

### Octeract

• New libraries 4.1.0.
• Reduced memory requirement and improved performance.

### SCIP Optimization Suite

• New libraries PaPILO 2.0.0.
• Added dual postsolve functionality for LPs.
• Immediate application of a presolvers reductions if run sequentially.
• Improvements in performance and functionality of many presolvers.
• For more details, see [37] and the PaPILO CHANGELOG.
• Updated TBB to version 2021.5.0.
• New libraries SoPlex 6.0.0.
• New libraries SCIP 8.0.0.
• Symmetry handling:
• New symmetry handling inequalities based on the Schreier Sims table, which are able to handle symmetries of arbitrary kinds of variables.
• The symmetry code can now heuristically search for orbitopes that do not completely handle a symmetry component and add certain Schreier Sims cuts to such components.
• In-tree restarts due to tree size estimation have been made compatible with orbital fixing.
• Improved performance of upgrades to packing/partitioning orbitopes, symresack cover separation, and propagation for orbisack and symresack.
• Symmetry handling has been extended to detect also symmetries between variables that also appear in nonlinear constraints.
• Cutting planes:
• New separator mixing to generate mixing cuts.
• New separator rlt to compute cuts via the reformulation-linearization technique (RLT).
• New separator minor to compute cuts from 2x2 minors of a violated semidefiniteness constraint that is implied by the extended formulation for bilinear products.
• New separator interminor to compute intersection cuts from 2x2 (not only principle) minors of a violated rank-one constraint that is implied by the extended formulation for bilinear products (currently disabled by default).
• Separator "aggregation" now uses the objective cutoff row as base row and separates lifted cover cuts based on newer lifting function of Letchford and Souli (2019).
• Separators "strongcg" and "gomory" now share the same computed basis.
• Primal Heuristics:
• New construction heuristic DPS which additionally needs a user-provided decomposition and splits the problem into several sub-SCIPs according to this decomposition. The sub-SCIPs are solved and updated repeatedly until a feasible solution of the original problem is found.
• PADM can now reoptimize found solution with original objective function.
• The RENS neighborhood in the heuristic ALNS now fixes fractional variables if necessary for reaching its target fixing rate.
• Revised and improved heuristic subNLP, in particular choice of NLP iteration limit and starting condition and reuse of subSCIP.
• The handling of algebraic expressions and nonlinear constraints has been rewritten:
• Support for trigonometric functions sine and cosine and for the entropy function has been added.
• Improved recognition of common subexpressions, in particular square and bilinear terms.
• All type of nonlinear constraints, including quadratic and second-order-cones, are now handled by the constraint handler for nonlinear constraints. The specialized constraint handlers have been removed. However, methods that work on a particular nonlinear structure are now implemented via nonlinear handlers (nlhdlr).
• Added nonlinear handler for quadratic, bilinear, convex, concave, and quotient expressions, second-order cone constraints, and perspective tightening for expressions in semi-continuous variables.
• As before, an extended formulation for nonlinear constraints is constructed. However, this formulation is now handled implicitly and used to construct the LP relaxation only, while the original formulation is used to check feasibility, propagate variable domains, etc. This difference should drastically improved the likelihood that a solution that satisfies the nonlinear constraints in the presolved problem is also feasible for the original problem.
• Products in nonlinear constraints are no longer disaggregated for the extended formulation.
• Improved analysis on which nonlinear variables in nonlinear constraints can be increased or decreased without harming feasibility by taking monotonicity into account.
• Improved linearization of (sums of) products of binary variables, e.g., clique information is now taken into account.
• When a variable appears in only one concave less-or-equal constraint, it will be fixed to one of its bounds in more cases now.
• New branching rule for variables in nonlinear constraints that scores candidates based on constraint violation, variable type, and pseudo-costs simultaneously. Variables that are added for the extended formulation of a nonlinear constraint are no longer branched on by default.
• New strategies to deal with weak estimators for nonlinear functions and small violations of nonlinear constraints.
• Improved under/overestimation of multidimensional vertex-polyhedral (e.g., multilinear or concave) functions by use of scaling and keeping the cut-generating LP around.
• Added tables to print statistics of nonlinear constraint handler, nonlinear handlers, and handlers for all supported functions.
• Revised and improved interfaces to Ipopt and CppAD, e.g.:
• Optimization of taped expressions and sparse Hessian evaluation of CppAD are used now.
• Added table to print statistics on NLP solvers.
• The interfaces to Gurobi and Mosek are thread-safe now.
• Parameters removed:
• gams/resolvenlp
• constraints/abspower/∗, constraints/bivariate/∗, constraints/quadratic/∗, constraints/soc/∗
• constraints/nonlinear/cutmaxrange, constraints/nonlinear/linfeasshift, constraints/nonlinear/reformulate, constraints/nonlinear/sepanlpmincont, constraints/nonlinear/enfocutsremovable, constraints/nonlinear/maxexpansionexponent, constraints/nonlinear/upgrade/abspower, constraints/nonlinear/upgrade/and, constraints/nonlinear/upgrade/bivariate, constraints/nonlinear/upgrade/quadratic
• constraints/orbitope/usedynamicprop
• heuristics/multistart/nlpminimpr
• heuristics/subnlp/iteroffset, heuristics/subnlp/iterquotient, heuristics/subnlp/nlpiterlimit, heuristics/subnlp/nlptimelimit, heuristics/subnlp/runalways, heuristics/subnlp/minimprove, heuristics/subnlp/nlpoptfile, heuristics/subnlp/resolvefromscratch, heuristics/subnlp/resolvetolfactor
• propagating/symmetry/disableofrestart
• separating/convexproj/nlptimelimit, separating/gauge/nlptimelimit
• separating/strongcg/dynamiccuts, separating/strongcg/maxrounds, separating/strongcg/maxroundsroot, separating/strongcg/maxsepacuts, separating/strongcg/maxsepacutsroot
• Parameters changed:
• For more details, see [37] and the SCIP release notes.
• Added support for GAMS functions sin, cos, and entropy for GAMS/SCIP.
• Since SCIP has dropped support for min and max, the GAMS/SCIP link reformulates GAMS functions min and max by use of abs now.
• Removed the feature that ran Ipopt from a returned solution that is recognized by SCIP to be not feasible in the original (non-presolved) nonlinear problem in order to obtain a feasible solution.

### XPRESS

• New libraries 39.01.03.
• Improved MIP performance:
• The Optimizer now uses an ML module to decide whether to use in-tree cutting. See autoCutting.
• Improved separation of Mixed Integer Rounding (MIR) cuts.
• Improved cut activation and deactivation strategies.
• Improved application of strong branching during the tree search.
• The 'R' local search heuristic will now be called more frequently in the early phase of a MIP solve.
• Improved crossover performance after a Barrier solve through automatic objective perturbation. See barObjPerturb.
• Improved Barrier performance for large problems on CPUs that support AVX2 (requires setting cpuPlatform to -2).
• New options:
• autoCutting: Automatically decide whether to generate cutting planes at local nodes in the tree.
• barObjPerturb: Defines how the barrier perturbs the objective.
• ioTimeout: Maximum number of seconds to wait for an I/O operation before it is cancelled.
• maxStallTime: Maximum time in seconds that the Optimizer will continue to search for improving solution after finding a new incumbent.
• preCliqueStrategy: Determines how much effort to spend on clique covers in presolve.
• siftPresolveOps: Determines the presolve operations for solving the subproblems during the sifting algorithm.
• Changed option default of xslp_mipDefaultAlgorithm: 1.
• Added option fixoptfile: name of option file which is read just before solving the fixed problem.
• Changed default value of option mipAddCutoff and mipRelCutoff to 0.
• Fixed unnecessary solve of fixed MIP (see mipCleanup) when solving a linear program as MIP.

## Tools

### BIB2GMS

• As announced, dropped the tool bib2gms.

### CSV2GDX

• Check for certain byte order marks (BOMs) in input files. Files with UTF8 BOM can be processed now, other BOMs generate an explicit error.

### GAMS Studio

• New version 1.9.4.
• Added possibility to create an empty project.
• Added selection of user instances on GAMS Engine SaaS.
• Added selection of namespaces on GAMS Engine Server.
• Stability improvements, bug fixes, and minor enhancements, e.g.:
• Expanded MIRO installation location on Mac OS X if AppBundle has been selected.
• Adjusted check if the MIRO data contract is available before the MIRO app is deployed.
• Changed mouse wheel behavior in tab bars:
• Mouse Wheel Up/Down: moves active tab
• Ctrl + Mouse Wheel Up/Down: changes active tab
• Added highlight in LST file for current section header of LXI viewer.
• Changed behavior of search in selection: the search selection is now only set once until the user resets it.
• Changed "Clear" button to remove search selection on first click when present.
• Fixed non-overridden recurrence of immediate options on command line parameters.
• Fixed jump behavior of search when using "This File" and navigating different files.
• Fixed Find Next broken for results across multiple files.
• Fixed crash on showing "Project Options" for a project without a runnable gms file.
• Fixed search not updating cache when document has changed.
• Fixed Clear Selection button not working as intended, when search scope was set to anything but "Selection".
• Fixed random crash in Search and Replace dialog.
• Fixed that checks for file type did not ignore casing (gms, Gms, GMS are all valid).
• Fixed that the default file filter in search dialog expected files to include a '.' character on non-windows platforms.
• Fixed file filter in search dialog not being ignored for scopes "This File" and "Selection".
• Fixed search jump behavior when current file is excluded by file filter.
• Fixed completer and syntax help activation for user defined GAMS source files.

### GDXDIFF

• Reduce size of output GDX file in case of input files without differences.

### GDXMRW

• We mark GDXMRW as deprecated and may remove it in a future release. Please use GAMS Transfer Matlab instead. If you encounter issues with the transition to GAMS Transfer Matlab or if you have any feature requests for GAMS Transfer Matlab, do not hesitate to contact us through support.

### HEXDUMP

• As announced, dropped the tool hexdump.

## APIs

### C++ high-level API

• Removed conversion of mapped network drives to UNC paths.
• Fixed addition of GAMS system directory to PATH on Windows.

### GAMS Transfer Python

• GAMS Transfer now works with Embedded Python Code.
• New read-only Container type called ConstContainer (high reading performance).
• New argument types for methods listVariables() and listEquations() to filter by variable or equation type, respectively.
• The method listSets() does not include aliases in the returned list anymore.
• The Container.read() argument values has been renamed to records.
• Fixed bug in SpecialValues.isNegInf() that did not properly detect scalar -inf.
• Fixed error handling when invalid records are set directly with .records.

### GDX

• Internal adjustment to detection of special values when writing to GDX. The updated GDX behavior will allow better differentiation between distinct double-precision values that the user wants mapped to distinct special values. For example, -0.0 is no longer confused with +0.0, and different IEEE NaN values can map to different GAMS special values.

### GMO

• Added routines gmoGetRowQNZOne64, gmoMaxQNZ64, and gmoObjQMatNZ64 to get element counts as 64-bit integer.
• Adjust routines gmoGetRowQNZOne, gmoMaxQNZ, and gmoObjQMatNZ to return -1 if the element count is too large for a 32-bit integer.
• Added routines gmoLNZEx and gmoLNZEx64 to get the exact count of linear nonzeros in the Jacobian matrix, and adjusted the description of gmoLNZ and gmoLNZ64 to make clear that these are legacy routines returning an overestimate of this count, especially when gmoUseQ is true.
• Fix gradient intervals for functions involving power(x,i) for i >= 4 and even.

### High-level APIs

• The GAMSDatabase GDX export method now writes regular instead of just relaxed domain information if available.

### PAL

• Added function palIsAlpha. palIsAlfa has been deprecated.

### Python

• Added support for Python 3.10.
• We plan to drop support for Python 3.6 in a future GAMS release.

New model:

New models:

x86 64bit
MS Windows
x86 64bit
Linux
x86 64bit
Mac OS X
ALPHAECP 2.11
ANTIGONE 1.1
BARON
BONMIN 1.8
CBC 2.10
CONOPT 3
CONOPT 4
COPT 3.0
CPLEX 20.1
DECIS
DICOPT 2
GLOMIQO 2.3
GUROBI 9.5
GUSS
IPOPT 3.14
KESTREL
KNITRO 13.0
LGO
LINDO 13.0
LINDOGLOBAL 13.0
MILES
MINOS 5.6
MOSEK 9
MSNLP
NLPEC
OCTERACT 4
ODHCPLEX 6
PATH
SBB
SCIP 8.0
SHOT 1.1
SNOPT 7.7
SOPLEX 6.0
XA
XPRESS 39.01

# 38.2.0 Minor release (February 17, 2022)

## 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 Gwendal Nivanen.

## GAMS System

### GAMS

• Fixed an incorrect evaluation of intrinsic functions (and their derivatives) having a variable number of arguments (e.g. edist or poly). This error did not occur in all cases: it depended on a missing or incorrect initialization in the calling environment.
• Fixed a problem in the extrinsic function declaration which required <FuncName> to be case sensitive.

## Solvers

### BARON

• New libraries 22.2.3.

### CONOPT

• New libraries 4.26.
• Removed option "Flg_Crash_Basis".
• Changed default of option Lim_Start_Degen from 10 to 100.

### CONVERT

• Fix missing semi-colon at end of comment in lingo output.
• Fix unary minus in lingo output.

### CPLEX

• Fix solution pool export: Previously the solution pool was only exported if CPLEX terminated successfully with a solution. Now, the solution pool GDX is exported independent of the CPLEX termination status, but may contain no solution. solnpoolpoprepeat and solnpoolpopdel still don't have any effect if CPLEX terminated unsuccessfully.

### GAMSCHK

• Add a missing initialization for the case where no subsolver is called. Without this initialization, incorrect output would occur.

### Ipopt

• New libraries 3.14.5.
• Fixed that marginals were always zero if Ipopt stopped due to reaching a timelimit.

### XPRESS

• New libraries 39.01.04.

## APIs

### High-level APIs

• Fixed a problem with GAMSModelInstance.Instantiate complaining about a missing dictionary file. This happened when a (default) solver for the model type of the instance is active which does not use a dictionary.

### GAMS Transfer Python

• Added new property shape to Parameter, Variable, and Equation to report the corresponding matrix shape if toDense or toSparseCoo are called.
• Fixed bug with array generation (1D symbols): toDense will now generate a (n,) array instead (1,n); harmonized this behavior with toSparseCoo.
• Fixed behavior: when toDense is called on a scalar symbol an array of shape () will be returned instead of a float.
• Fixed behavior: when toSparseCoo is called on a scalar symbol a sparse coo_matrix of shape (1,1) will be returned instead of a float.
• Better handling of numeric domain information within setRecords methods: numeric entries are now converted to str and generate categories from the str equivalents.

### GMO

• The default for the property gmoHessInclQRows was accidentally changed to false with GAMS 35.1.0. With this release, it has been changed back to its original setting of true. That is, also if useQ is set, the Hessian will include information on quadratic equations by default again.

# 38.2.1 Maintenance release (February 19, 2022)

## Solvers

### CONOPT

• Fixed warning about unknown option name "FLG_CRASH_BASIS" (introduced with GAMS 38.2.0).

### Octeract

• Avoid that an ObjEst of ±1.797693134E308 is reported as 1797693134 in GAMS tracefile.

# 38.3.0 Minor release (April 05, 2022)

## 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 Daniel Dias, Antti Lehtila, Scott MacDonald, Evangelos Panos, Richard Waltz and Eric Williams.

## GAMS System

### GAMS

• Fixed wrong numbers about infeasibilities (e.g., in the report summary) when bounds with value EPS are involved.
• Fixed potential unwanted domain violation error when implicit set definition is used while \$onMulti is active to allow a redefinition of symbol data.

## Solvers

### BARON

• New libraries 22.3.21.

### CONVERT

• Fixed export of variable attribute stage for discrete variables when using option DumpGDX.
• Fixed that coefficients in QCMATRIX section were wrong. They had only half its value.
• Fixed missing asterisk for bilinear terms in CplexLP format.

### COPT

• Fixed that indicators from solver options file were ignored.

### CPLEX

• Fixed bug with registering an advanced basis.
• Fixed CPLEX solution status CPX_STAT_NUM_BEST. This status is mapped to GAMS model status feasible.
• Fixed interactive mode (when no trigger file is set).

### GUROBI

• New libraries 9.5.1.

### IPOPT

• Fixed that names for vector entries corresponding to inequality equations (as shown with print_level ≥ 8) could be incorrect due to a wrong mapping of indices.

### KNITRO

• Fixed unnecessary calls to Knitro evaluation callbacks for linear or quadratic constraints.

### Mosek

• New libraries 9.3.18.

### Octeract

• New libraries 4.2.0.
• Improved performance, in particular for problems with quadratic structures.
• CPLEX is now automatically chosen as subsolver, if licensed.

### XPRESS

• New libraries 39.01.05.
• Changed option default of xslp_iterLimit: -1 (auto).

## Tools

### MODEL2TEX

• Fixed a crash that occurred when SameAs was used in equations.

### MPS2GMS

• Fixed that variables in SOS of type 2 were written as SOS of type 1 to GDX file.
• Fixed that upper bounds of 100 for (semi)integer variables were lost.
• Fixed that N-rows that did not specify objective functions were not omitted in parameter p (equation right-hand sides).
• Fixed that nonzero coefficients with absolute value at most 1e-20 were lost.
• Fixed that C-rows had arbitrary right-hand side value in GDX file (though this value was not accessed from the GAMS model).
• Fixed that an objective constant (nonzero RHS for objective row in MPS file) was lost.
• Fixed that off-diagonal elements in QUADOBJ and QSECTION sections were not handled correctly.

### GAMS Studio

• New version 1.9.6 with various bug fixes, stability improvements, and minor enhancements, e.g.:
• Added Page-up/-down keys to extend block edit selection.
• Added separator line on Windows in horizontal headers of tables and tree views.
• Remote jobs now can be kept active on Studio exit.
• Fixed crash in GDX Viewer related to reading a file containing negative UELs.
• Fixed empty log file when using logOption=2.
• Fixed search not properly counting search results across multiple files.
• Fixed "Replace All" preview wrongfully including read-only files.
• Fixed "Search" not always jumping to a result outside current file.
• Fixed NEOS freezing when the GMS file is not located in the working directory.

## APIs

### GAMS Transfer Python

• Fixed memory leak associated with gams2numpy.
GAMS Development Corp.
GAMS Software GmbH

General Information and Sales
U.S. (+1) 202 342-0180
Europe: (+49) 221 949-9170