35 Distribution

### Table of Contents

# 35.1.0 Major release (April 29, 2021)

## 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 Matthew Adams, Jürgen Apfelbeck, Wolfgang Britz, Yacine Gaoua, Carolin Kellenbrink, Masoud Javadi, Bruce McCarl, Scott McDonald, Will Raymond, Tom Rutherford, Sebastian Spieker, and Kirk A. Yost.

## Platforms

- macOS 11 (on Intel CPUs) has been added to the list of supported Mac OS X versions.

## GAMS System

### GAMS

- Added new dollar control options gdxLoad and gdxUnload to load and unload symbols from and to GDX files in a single instruction at compile time.
- Print an extra log line for echo dollar control options $echo, $echoN, and $onEcho, which write to an external file. When running GAMS from one of the GAMS IDEs, this log line can be clicked to open the file created.
- Extended the report generated by dmpSym and dmpUserSym to include another column reporting a memory estimate for each set, parameter, variable, and equation.
- Removed the columns
`DIM-OK`

,`ACCESS`

,`SPECVAL`

,`EXTERN`

,`TABLE`

,`DOMAIN`

, and`LAGLEAD`

from the report generated by dmpUserSym. This information is very technical and mostly of internal interest. These columns are still available with dmpSym. - The status of Multi-Threading for the Grid and Multi-Threading Solve Facility has been changed from beta to released and fully supported.
- Fixed that the stars option was ignored for some messages in the output file.
- Fixed a problem that causes default records in the data statement or when loaded from GDX (see $load) being ignored with implicit set definition. So with

only`Set i; Parameter p(i<) / i0 0, i1 1, i2 2 /;`

`i1`

and`i2`

made it into`i`

. Now,`i0`

is added as well. - Fixed a problem, where $onDotL and $onDotScale were ignored in put statements.
- Fixed a problem, where $onDelim was applied incorrectly to
`display`

and`option`

statements. - Fixed a problem, where $onSymXRef and $onUElXRef were ignored when there were too many references.
- Fixed and extended the behavior of $eval: If a GAMS function was hidden by a user defined symbol,
`$eval`

ignored the latter. This has been changed. Now, the GAMS function needs to be prefixed with`system.`

to be accessed in this case. An example for this behavior is given here. - Fixed a potential problem when doing a filtered load of symbols with domain violations through EmbeddedCode.
- Fixed an unwanted compilation error that happened if $onExternalInput or $onExternalOutput were used on the same line and after $if.
- Fixed a problem where dumpOpt in combination with $onVerbatim skipped a leading substitution character in an $ifThen block.

## Solvers

### AlphaECP

- New version 2.11.01.
- New options:
- ECPtoltype: AlphaECP termination criterion.
- MIPoptcrlimtype: Strategy to increase MIPoptcrlim.
- MIPoptimaliter: MIP is solved to optimality with this frequency.
- TOLoptcr: Relative termination tolerance for MINLP.

- Minor bugfixes.
- For more information, see the release paper.

- New options:

### ANTIGONE, IPOPT, SHOT, SCIP

- Updated Intel MKL to version 2021.2.0 on Linux and Mac OS X.

### BARON

- The NLP solver selected with option extNLPSolver is used in case NLPSol is set to -1 or 6 (and AllowExternal is 1). In the previous releases Conopt was used with NLPSol value -1.

### BONMIN

- Fixed an issue where a problem with SOS constraints was rejected due to falsely detected negative variable bounds.

### CONOPT

- New libraries for CONOPT3: 3.17K
- Fixed perturbations of the Jacobian for external equations where 2nd order derivatives are not available.

- Fixed an issue resulting in insufficient CONOPT3 memory.
- Fixed an issue with multi-threading in CONOPT 4.

### CPLEX

- New libraries 20.1.0.1.
- Added option usercallparmfile: Command-line parameter include file used in GAMS command-line calls triggered by BCH.
- Fixed incorrect reporting of infeasible solutions of the unrelaxed model in feasopt mode.
- Fixed incorrect variable matching for options objnreltol and objnabstol.
- Fixed parsing of individual objective functions for multiobjective optimization (any ordering of equation definitions is allowed now).

### GAMSCHK

- Fix problem with handling of row/column patterns introduced in GAMS 34.3.

### GUROBI

- New libraries 9.1.2.
- Added possibility to write a single GDX file with the solution pool (see solnpoolmerge).
- Added the following options:
- solnpoolmerge: Enable merged solution pool GDX.
- solnpoolnumsym: Number of variable symbols in merged solution pool GDX.
- solnpoolprefix: Prefix for variable symbols in merged solution pool GDX.
- miptrace: Filename of MIP trace file (formerly hidden and undocumented).
- miptracenode: Node interval when a trace record is written (formerly hidden and undocumented).
- miptracetime: Time interval when a trace record is written (formerly hidden and undocumented).

- Fixed incorrectly processed (hidden) options
`isvname`

and`appname`

.

### GUSS/Scenario Solver

- Measure time internally rather then relying on solvers' reported resUsd to determine the overall running time.

### KNITRO

- New GAMS/Knitro link using the KN interface.
- Enabled the possibility to use solvelink = 5 on Linux (other platforms were already enabled).
- Added support of variable and equation scaling.
- Added options:
- names: Enable to pass variable and equation names to Knitro.
- blasoptionlib: Specifies a dynamic library name that contains object code for BLAS/LAPACK functions.
- bndrange: Specifies max limits on the magnitude of constraint and variable bounds.
- cg_pmem: Specifies the amount of nonzero elements per column of the Hessian of the Lagrangian which are retained when computing the incomplete Cholesky preconditioner.
- cg_precond: Specifies whether an incomplete Cholesky preconditioner is applied during CG iterations in barrier algorithms.
- cg_stoptol: Specifies the relative stopping tolerance used for the conjugate gradient (CG) subproblem solves.
- convex: Declare the problem as convex by setting to 1 or non-convex by setting to 0.
- cpuplatform: Specify the target instruction set architecture.
- initpenalty: Specifies the initial penalty parameter used in the Knitro merit functions.
- linesearch: Indicates which linesearch strategy to use for the Interior/Direct or SQP algorithm to search for a new acceptable iterate.
- newpoint: Specifies additional action to take after every iteration in a solve of a continuous problem.
- presolve_level: Set the level of presolve operations to enable through the Knitro presolver.
- presolve_initpt: Control whether the Knitro presolver can shift a user-supplied initial point.
- presolve_passes: Set a maximum limit on the number of passes through the Knitro presolve operations.
- presolveop_tighten: Determine whether or not to enable the Knitro presolve operation to tighten variable bounds.
- restarts: Specifies whether or not to enable automatic restarts in Knitro.
- restarts_maxit: When restarts are enabled, this option can be used to specify a maximum number of iterations before enforcing a restart.
- strat_warm_start: Specifies whether or not to invoke a warm-start strategy.
- findiff_relstepsize: Specifies the relative stepsize used for finite-difference gradients.
- findiff_terminate: Specifies the termination criteria when using finite-difference gradients.
- infeastol_iters: The optimization process will terminate if the relative change in the feasibility error is less than infeastol for infeastol_iters consecutive infeasible iterations.
- xtol_iters: The optimization process will terminate if the relative change in all components of the solution point estimate is less than xtol for xtol_iters.
- bar_conic_enable: Enable special treatments for conic constraints when using the Interior/Direct algorithm (has no affect when using the Interior/CG algorithm).
- bar_initpi_mpec: Specifies the initial value for the MPEC penalty parameter \(\pi\) used when solving problems with complementarity constraints using the barrier algorithms.
- bar_linsys: Indicates which linear system form is used inside the Interior/Direct algorithm for computing primal-dual steps.
- bar_maxcorrectors: Specifies the maximum number of corrector steps allowed for primal-dual steps.
- bar_slackboundpush: Specifies the amount by which the barrier slack variables are initially pushed inside the bounds.
- bar_switchobj: Indicates which objective function to use when the barrier algorithms switch to a pure feasibility phase.
- act_lpfeastol: Specifies the feasibility tolerance used for linear programming subproblems solved when using the Active Set or SQP algorithms.
- act_lppenalty: Indicates whether to use a penalty formulation for linear programming subproblems in the Knitro Active Set or SQP algorithms.
- act_lppresolve: Indicates whether to apply a presolve for linear programming subproblems in the Knitro Active Set or SQP algorithms.
- act_parametric: Indicates whether to use a parametric approach when solving linear programming (LP) subproblems when using the Knitro Active Set or SQP algorithms.
- act_qppenalty: Indicates whether to use a penalty formulation for quadratic programming subproblems in the Knitro SQP algorithm.
- mip_clique: Specifies rules for adding clique cuts.
- mip_cutfactor: This value specifies a limit on the number of cuts added to a node subproblem.
- mip_heuristic_terminate: Specifies the condition for terminating the MIP heuristic.
- mip_intvar_strategy: Specifies how to handle integer variables.
- mip_mir: Specifies rules for adding mixed integer rounding cuts.
- mip_selectdir: Specifies the MIP node selection direction rule (for tiebreakers) for choosing the next node in the branch and bound tree.
- mip_zerohalf: Specifies rules for adding zero-half cuts.
- ma_outsub: Enable writing algorithm output to files for the multi-algorithm (algorithm=5) procedure.
- ms_num_to_save: Specifies the number of distinct feasible points to save in a file named
`knitro_mspoints`

. - ms_outsub: Enable writing algorithm output to files for the parallel multistart procedure.
- ms_savetol: Specifies the tolerance for deciding if two feasible points are distinct.
- par_msnumthreads: Specify the number of threads to use for multistart (when ms_enable = 1).
- out_csvinfo: Controls whether or not to generates a file
`knitro_solve`

. - out_csvname: Use to specify a custom csv filename when using out_csvinfo.
- out_hints: Specifies whether to print diagnostic hints (e.g. about user option settings) after solving.
- outappend: Specifies whether output should be started in a new file, or appended to existing files.
- outdir: Specifies a single directory as the location to write all output files.
- outmode: Specifies where to direct the output from Knitro.
- outname: Use to specify a custom filename when output is written to a file using outmode.

- Added values to the following options:
- blasoption: 2 (dynamic)
- bar_pencons: -1 (auto), 3 (equalities)
- hessopt: 7 (gauss_newton)
- honorbnds: -1 (auto)
- ma_terminate: 3
- mip_knapsack: 3 (all)
- mip_outlevel: 2 (iterstime), 3 (root)
- mip_rootalg: 4 (sqp), 5 (multi)
- scale: 2 (user_none), 3 (internal)

- Updated the following options to KNITRO defaults:
- fstopval: maxdouble
- honorbnds: -1 (auto)
- par_blasnumthreads: 0
- par_lsnumthreads: 0
- xtol: 1e-12
- bar_pencons: -1 (auto)
- bar_switchrule: -1 (auto)
- mip_maxnodes: 0
- mip_maxsolves: 0
- mip_rounding: -1 (auto)

- Deprecated options:
- bar_maxbacktrack: Use linesearch_maxtrials instead.
- maxcgit: Use cg_maxit instead.
- pivot: Use linsolver_pivottol instead.

- Removed formerly deprecated options:
- maxcrossit
- mu
- feasible
- feasmodetol
- barrule

- Removed unused option
`reform`

. - Fixed an issue with options not being forwarded to Knitro.

### Lindo/LindoGlobal

- New libraries 13.0.262:
- LP Solver Improvements:
- With new enhancements made to the simplex solvers, the average performance on large instances where the number of variables is several times larger than the number of constraints has increased by several folds compared to the previous version.
- Improved performance on LP’s when using multiple cores with concurrent execution of Primal, Dual, and Barrier.

- MIP (Mixed Integer Program) Solver:
- Improved selection of defaults for cuts and heuristics.

- Global Solver Improvements:
- Highly improved ability to recognize convexity of various composite functions, especially involving logarithms and sums, which can gives a performance improvement of one order-of-magnitude in these cases.
- Performance improvement for convex-concave type functions.
- Enhanced capabilities for converting nonlinear functions to linear forms.
- Substantial performance improvement for non-convex quadratic models.

- LP Solver Improvements:

### LocalSolver

- New libraries 10.0 (20210330).
- We plan to drop LocalSolver and LocalSolver70 by the end of 2021.

### MOSEK

- New libraries 9.2.41.

### MPSGE

- Increased the internal MAXFUN limit (from 5000 to 10000) on the number of components (inputs, outputs, taxes, etc.) in any MPSGE row.

### ODHCPLEX

- New libraries 5.34.

### SBB

- Added option usercallparmfile: Command-line parameter include file used in GAMS command-line calls triggered by BCH.

### SCIP

- New libraries 7.0 (c53330372e).

### SNOPT

- New libraries 7.7.7 and new GAMS/SNOPT link.
- Changed option value to SNOPT default for the following options:
- Linesearch Tolerance: 0.9
- LI Singularity Tolerance: 3.2e-11

- Removed the following parameters:
`Start Objective Check`

`Start Constraint Check`

`Stop Objective Check`

`Stop Constraint Check`

`Derivative Level`

### XPRESS

- Added support for choosing a different algorithm than primal simplex for solving the fixed MIP (see mipCleanup). The algorithm can be chosen with defaultAlg and lpFlags.
- Deprecated the following options:
`algorithm`

: Use defaultAlg or lpFlags instead.`extraPresolve`

`lpThreads`

- Added the following options:
- algAfterCrossover: Algorithm to be used for the final clean up step after the crossover.
- autoPerturb: Simplex: Indicates whether automatic perturbation is performed.
- autoScaling: Whether the Optimizer should automatically select between different scaling algorithms.
- backtrackTie: Branch and Bound: Specifies how to break ties when selecting the next node to work on when a full backtrack is performed.
- barCores: If set to a positive integer it determines the number of physical CPU cores assumed to be present in the system by the barrier algorithm.
- barFailIterLimit: Newton barrier: Maximum number of consecutive iterations that fail to improve the solution in the barrier algorithm.
- barFreeScale: Defines how the barrier algorithm scales free variables.
- barGapTarget: Newton barrier: Target tolerance for the relative duality gap.
- barKernel: Newton barrier: Defines how centrality is weighted in the barrier algorithm.
- barObjScale: Defines how the barrier scales the objective.
- barOrderThreads: If set to a positive integer it determines the number of concurrent threads for the sparse matrix ordering algorithm in the Newton barrier method.
- barPresolveOps: Controls the Newton barrier specific presolve operations.
- barRegularize: Determines how the barrier algorithm applies regularization on the KKT system.
- barRhsScale: Defines how the barrier scales the right hand side.
- branchChoice: Once a global entity has been selected for branching, this control determines which of the branches is solved first.
- branchDisj: Branch and Bound: Determines whether the optimizer should attempt to branch on general split disjunctions during the branch and bound search.
- branchStructural: Branch and Bound: Determines whether the optimizer should search for special structure in the problem to branch on during the branch and bound search.
- cacheSize: Newton barrier: L2 or L3 (see notes) cache size in kB (kilobytes) of the CPU.
- choleskyAlg: Newton barrier: Type of Cholesky factorization used.
- choleskyTol: Newton barrier: Tolerance for pivot elements in the Cholesky decomposition of the normal equations coefficient matrix, computed at each iteration of the barrier algorithm.
- conflictCuts: Branch and Bound: Specifies how cautious or aggressive the optimizer should be when searching for and applying conflict cuts.
- coresPerCpu: Used to override the detected value of the number of cores on a CPU.
- cpuTime: How time should be measured when timings are reported in the log and when checking against time limits.
- crossoverAccuracyTol: Newton barrier: Determines how crossover adjusts the default relative pivot tolerance.
- crossoverIterLimit: Newton barrier: Maximum number of iterations that will be performed in the crossover procedure before the optimization process terminates.
- crossoverOps: Newton barrier: Bit vector for adjusting the behavior of the crossover procedure.
- cutFactor: Limit on the number of cuts and cut coefficients the optimizer is allowed to add to the matrix during global search.
- cutSelect: Bit vector providing detailed control of the cuts created for the root node of a global solve.
- dualGradient: Simplex: Dual simplex pricing method.
- dualize: Whether presolve should form the dual of the problem.
- dualizeOps: Bit-vector control for adjusting the behavior when a problem is dualized.
- dualPerturb: Factor by which the problem will be perturbed prior to optimization by dual simplex.
- dualStrategy: Bit-vector control specifies the dual simplex strategy.
- elimFillin: Amount of fill-in allowed when performing an elimination in presolve.
- elimTol: Markowitz tolerance for the elimination phase of the presolve.
- feasibilityPump: Branch and Bound: Decides if the Feasibility Pump heuristic should be run at the top node.
- feasTolPerturb: Determines how much a feasible primal basic solution is allowed to be perturbed when performing basis changes.
- feasTolTarget: Target feasibility tolerance for the solution refiner.
- forceParallelDual: Dual simplex: Specifies whether the dual simplex solver should always use the parallel simplex algorithm.
- genConsDualReductions: Parameter specifies whether dual reductions should be applied to reduce the number of columns and rows added when transforming general constraints to MIP structs.
- heurBeforeLp: Branch and Bound: Determines whether primal heuristics should be run before the initial LP relaxation has been solved.
- heurDiveIterLimit: Branch and Bound: Simplex iteration limit for reoptimizing during the diving heuristic.
- heurDiveRandomize: Level of randomization to apply in the diving heuristic.
- heurDiveSoftRounding: Enables a more cautious strategy for the diving heuristic.
- heurDiveSpeedUp: Branch and Bound: Changes the emphasis of the diving heuristic from solution quality to diving speed.
- heurDiveStrategy: Branch and Bound: Chooses the strategy for the diving heuristic.
- heurForceSpecialObj: Branch and Bound: Whether local search heuristics without objective or with an auxiliary objective should always be used, despite the automatic selection of the Optimizer.
- heurFreq: Branch and Bound: Frequency at which heuristics are used in the tree search.
- heurSearchEffort: Adjusts the overall level of the local search heuristics.
- heurSearchFreq: Branch and Bound: How often the local search heuristic should be run in the tree.
- heurSearchRootCutFreq: How frequently to run the local search heuristic during root cutting.
- heurSearchRootSelect: Bit vector control for selecting which local search heuristics to apply on the root node of a global solve.
- heurSearchTreeSelect: Bit vector control for selecting which local search heuristics to apply during the tree search of a global solve.
- heurStrategy: Branch and Bound: Heuristic strategy.
- historyCosts: Branch and Bound: How to update the pseudo cost for a global entity when a strong branch or a regular branch is applied.
- indLinBigM: Indicator constraints can be internally converted to regular rows (i.e. linearized) using a BigM coefficient whenever the BigM coefficient is smaller or equal to this value.
- indPreLinBigM: During presolve, indicator constraints can be internally replaced with regular rows (i.e. linearized) using a BigM coefficient whenever the BigM coefficient is smaller or equal to this value.
- l1Cache: Newton barrier: L1 cache size in kB (kilo bytes) of the CPU.
- lnpBest: Number of infeasible global entities to create lift-and-project cuts for during each round of Gomory cuts at the top node (see gomCuts).
- lnpIterLimit: Number of iterations to perform in improving each lift-and-project cut.
- localChoice: Controls when to perform a local backtrack between the two child nodes during a dive in the branch and bound tree.
- lpFlags: Bit-vector control which defines the algorithm for solving an LP problem or the initial LP relaxation of a MIP problem.
- lpFolding: Simplex and barrier: Whether to fold an LP problem before solving it.
- lpLogDelay: Time interval between two LP log lines.
- lpLogStyle: Simplex: Style of the simplex log.
- lpRefineIterLimit: Simplex iteration limit the solution refiner can spend.
- markowitzTol: Markowitz tolerance used for the factorization of the basis matrix.
- maxCutTime: Maximum amount of time allowed for generation of cutting planes and reoptimization.
- maxImpliedBound: Presolve: When tighter bounds are calculated during MIP preprocessing, only bounds whose absolute value are smaller than maxImpliedBound will be applied to the problem.
- maxLocalBacktrack: Branch-and-Bound: How far back up the current dive path the optimizer is allowed to look for a local backtrack candidate node.
- maxMemoryHard: Sets the maximum amount of memory in megabytes the optimizer should allocate.
- maxMemorySoft: When resourceStrategy is enabled, this control sets the maximum amount of memory in megabytes the optimizer targets to allocate.
- maxMipTasks: Branch-and-Bound: The maximum number of tasks to run in parallel during a MIP solve.
- maxScaleFactor: Determines the maximum scaling factor that can be applied during scaling.
- maxTime: Maximum time in seconds that the Optimizer will run before it terminates, including the problem setup time and solution time.
- mipDualReductions: Branch and Bound: Limits operations that can reduce the MIP solution space.
- mipFracReduce: Branch and Bound: Specifies how often the optimizer should run a heuristic to reduce the number of fractional integer variables in the node LP solutions.
- mipKappaFreq: Branch and Bound: Specifies how frequently the basis condition number (also known as kappa) should be calculated during the branch-and-bound search.
- mipRampUp: Controls the strategy used by the parallel MIP solver during the ramp-up phase of a branch-and-bound tree search.
- mipRefineIterLimit: Defines an effort limit expressed as simplex iterations for the MIP solution refiner.
- mipRestart: Branch and Bound: Controls strategy for in-tree restarts.
- mipToltarget: Target mipTol value used by the automatic MIP solution refiner as defined by refineOps.
- miqcpAlg: Determines which algorithm is to be used to solve mixed integer quadratically constrained and mixed integer second order cone problems.
- xslp_mipAlgorithm: Bitmap describing the MISLP algorithms to be used.
- xslp_mipFixStepBounds: Bitmap describing the step-bound fixing strategy during MISLP.
- xslp_mipRelaxStepBounds: Bitmap describing the step-bound relaxation strategy during MISLP.
- netCuts: Determines the addition of multi-commodity network cuts to a problem.
- objScaleFactor: Custom global objective scaling factor, expressed as a power of 2.
- optimalityTolTarget: Target optimality tolerance for the solution refiner.
- outputLog: Controls the level of output produced by the Optimizer during optimization.
- outputTol: Zero tolerance on print values.
- preAnalyticCenter: Determines whether analytic centers should be computed and used for variable fixing and the generation of alternative reduced costs.
- preBasisRed: Determines whether a lattice basis reduction algorithm should be attempted as part of presolve.
- preBndRedCone: Determines whether second order cone constraints should be used for inferring bound reductions on variables when solving a MIP.
- preBndRedQuad: Determines whether convex quadratic contraints should be used for inferring bound reductions on variables when solving a MIP.
- preCoefElim: Presolve: Specifies whether the optimizer should attempt to recombine constraints in order to reduce the number of non zero coefficients when presolving a mixed integer problem.
- preComponents: Determines whether small independent components should be detected and solved as individual subproblems during root node processing.
- preComponentsEffort: Presolve: Adjusts the overall effort for the independent component presolver.
- preConeDecomp: Presolve: Decompose regular and rotated cones with more than two elements and apply Outer Approximation on the resulting components.
- preConvertSeparable: Presolve: Reformulate problem with non-diagonal quadratic objective and/or constraints as diagonal quadratic or second-order conic constraints.
- preDomCol: Presolve: Determines the level of dominated column removal reductions to perform when presolving a mixed integer problem.
- preDomRow: Presolve: Determines the level of dominated row removal reductions to perform when presolving a problem.
- preDupRow: Presolve: Determines the type of duplicate rows to look for and eliminate when presolving a problem.
- preElimQuad: Presolve: Allows for elimination of quadratic variables via doubleton rows.
- preImplications: Presolve: Determines whether to use implication structures to remove redundant rows.
- preLinDep: Presolve: Determines whether to check for and remove linearly dependent equality constraints when presolving a problem.
- preObjCutDetect: Presolve: Determines whether to check for constraints that are parallel or near parallel to a linear objective function, and which can safely be removed.
- presolveMaxGrow: Limit on how much the number of non-zero coefficients is allowed to grow during presolve, specified as a ratio of the number of non-zero coefficients in the original problem.
- presolveOps: Specifies the operations which are performed during the presolve.
- presolvePasses: Number of reduction rounds to be performed in presolve.
- primalPerturb: Factor by which the problem will be perturbed prior to optimization by primal simplex.
- primalUnshift: Determines whether primal is allowed to call dual to unshift.
- qcCuts: Branch and Bound: Limit on the number of rounds of outer approximation cuts generated for the root node, when solving a mixed integer quadratically constrained or mixed integer second order conic problem with outer approximation.
- qcRootAlg: Determines which algorithm is to be used to solve the root of a mixed integer quadratically constrained or mixed integer second order cone problem, when outer approximation is used.
- qSimplexOps: Controls the behavior of the quadratic simplex solvers.
- quadraticUnshift: Determines whether an extra solution purification step is called after a solution found by the quadratic simplex (either primal or dual).
- randomSeed: Sets the initial seed to use for the pseudo-random number generator in the Optimizer.
- refineOps: Specifies when the solution refiner should be executed to reduce solution infeasibilities.
- relaxTreeMemoryLimit: When the memory used by the branch and bound search tree exceeds the target specified by the treeMemoryLimit control, the optimizer will try to reduce this by writing nodes to the global file.
- repairIndefInitEq: Controls if the optimizer should make indefinite quadratic matrices positive definite when it is possible.
- resourceStrategy: Controls whether the optimizer is allowed to make nondeterministic decisions if memory is running low in an effort to preserve memory and finish the solve.
- rootPresolve: Determines if presolving should be performed on the problem after the global search has finished with root cutting and heuristics.
- sbBest: Number of infeasible global entities to initialize pseudo costs on each node.
- sbEffort: Adjusts the overall amount of effort when using strong branching to select an infeasible global entity to branch on.
- sbEstimate: Branch and Bound: How to calculate pseudo costs from the local node when selecting an infeasible global entity to branch on.
- sbIterLimit: Number of dual iterations to perform in strong branching for each entity.
- sifting: Determines whether to enable sifting algorithm with the dual simplex method.
- xslp_algorithm: Bitmap describing the SLP algorithm(s) to be used.
- xslp_analyze: Bitmap activating additional options supporting model / solution path analyzis.
- xslp_augmentation: Bitmap describing the SLP augmentation method(s) to be used.
- xslp_barStartOps: Controls behaviour when the barrier is used to solve the linearizations.
- xslp_convergenceOps: Bitmap describing which convergence tests should be carried out.
- xslp_filter: Bitmap for controlling solution updates.
- xslp_presolveOps: Bitmap indicating the SLP presolve actions to be taken.
- xslp_zeroCriterion: Bitmap determining the behavior of the placeholder deletion procedure.
- sosRefTol: Minimum relative gap between the ordering values of elements in a special ordered set.
- treeCompression: When writing nodes to the global file, the optimizer can try to use data-compression techniques to reduce the size of the global file on disk.
- treeCutSelect: Bit vector providing detailed control of the cuts created during the tree search of a global solve.
- treeMemoryLimit: Soft limit, in megabytes, for the amount of memory to use in storing the branch and bound search tree.
- treeMemorySavingTarget: When the memory used by the branch-and-bound search tree exceeds the limit specified by the treeMemoryLimit control, the optimizer will try to save memory by writing lower-rated sections of the tree to the global file.
- treeQCCuts: Branch and Bound: Limit on the number of rounds of outer approximation cuts generated for nodes other than the root node, when solving a mixed integer quadratically constrained or mixed integer second order conic problem with outer approximation.

- Added options to conveniently set bits of XPRESS bitmap options:
- New bits of refineOps:
- New bits of mipPresolve:
- New bits of presolveOps:
- presolveOps_singletonColRemoval
- presolveOps_singletonRowRemoval
- presolveOps_forcingRowRemoval
- presolveOps_dualReductions
- presolveOps_redundantRowRemoval
- presolveOps_duplicateColRemoval
- presolveOps_duplicateRowRemoval
- presolveOps_strongDualReductions
- presolveOps_variableEliminations
- presolveOps_noIpReductions
- presolveOps_noGlobalDomainChange
- presolveOps_noAdvIpReductions
- presolveOps_linDependRowRemoval
- presolveOps_noIntVarEliminations
- presolveOps_noIntVarAndSosDetect

- New bits of scaling:
- scaling_rowScaling
- scaling_colScaling
- scaling_rowScalingAgain
- scaling_maximum
- scaling_curtisReid
- scaling_byMaxElemNotGeoMean
- scaling_bigM
- scaling_simplexObjScaling
- scaling_ignoreQuadRowPart
- scaling_beforePresolve
- scaling_noScalingRowsUp
- scaling_noScalingColsDown
- scaling_disableGlobalObjScaling
- scaling_rhsScaling
- scaling_noAggressiveQScaling
- scaling_slackScaling

- New bits of lpFlags:
- New bits of cutSelect:
- New bits of treeCutSelect:

- Renamed the following options to match the original XPRESS options names. Old option names currently serve as alias, but are deprecated and will be removed in an upcoming release:
`treePresolveKeepBasis`

to treePresolve_keepBasis.`slpKnitroOptFile`

to knitroOptFile.- All XPRESS Nonlinear (SLP) options, e.g.,
`slpSolver`

to xslp_solver.

- Fixed default values of single bit options for XPRESS bitmap options with negative default values.

## Tools

### GAMS Studio

- New version 1.6.1.
- New feature: Static Code Completion which can be activated by pressing
`Ctrl + Space`

. - New feature: Allow to move multiple lines up and down using
`Ctrl + Shift + Arrow`

. - New feature: Allow to close view tabs using the middle mouse button.
- Added instant update of tab size in editor when changing corresponding setting.
- Added word under cursor as default search entry when no text selection is present.
- Allow to move block selections using the arrow keys.
- Added
`*.inc`

as common extension for GAMS files. - Added user defined extensions for GAMS files.
- Added automatic reloading of files that appear in the GAMS log.
- Added setting for user defined extensions for files to be automatically reloaded.
- Added auto-reload button to file-changed dialog.
- Added Studio Documentation entry in Help menu.
- Added setting to change default open file behavior (new group or current group) and adjusted menu entry for alternative file opening behavior.
- Hotkey
`F1`

jumps to the corresponding documentation entry for Project Explorer, Process Logs, GDX Diff Dialog, and Search Widget. - Improved GDX Viewer, e.g.:
- Added facility to access domains and filters in Table View.
- Show original index position of domains in both list view and table view.
- Improved automatic column widths.

- Stability improvements and minor bug fixes, e.g.:
- Fixed crash when LST file is missing (e.g. because of setting
`output=NUL`

). - Fixed "Reset View" not resetting splitter in the LST/LXI-Viewer.
- Fixed crash related to comment shortcut in solver option editor when pressing it multiple times.
- Fixed wrong sort order after resetting GDX Viewer.
- Fixed GAMS engine not appending
`/api`

to the URL on Mac OS X when clicking`OK`

directly after editing the URL. - Fixed
`eolCom`

not working in some dollar control option lines (like`$include`

). - Fixed jump to next search result if the result is in a different file and the current one has no results.
- Fixed jump to search result occasionally not working.
- Fixed
`Find Next/Prev`

behavior for`.opt`

files.

- Fixed crash when LST file is missing (e.g. because of setting

- New feature: Static Code Completion which can be activated by pressing

### GDXDUMP

- Added a new line at the end of the file, which was missing if the option noHeader is set.

### GDXMERGE

- Added command line option
`strict`

. When set to`true`

, gdxmerge will terminate with an error in case input files cannot be found or the output file already exists.

### GDXXRW

- Fixed a potential missing initialization if incRC is set for symbols with either cDim or rDim equal 0.

## APIs

### CFG

- With the next major release the last argument
`opt: pointer`

of function`cfgAlgReadyAPI`

will be dropped.

### DCT

- Functions
`dctLoadWithHandle`

,`dctSymDomIdx`

,`dctDomNameCount`

, and`dctDomName`

have been deprecated and will be removed in the near future.

### gams2numpy

- Improved error handling.
- New optional parameter
`domains`

for`gdxWriteSymbolStr`

and`gdxWriteSymbolRaw`

that can be used to specify the domains of the symbol. Parameter needs to be a list of strings.

### GMO

- Updated to better handle cases where quadratic structure is explicitly detected (i.e.
`useQ`

is set) and some*but not all*of the nonlinear equations are quadratic. Several new functions have been added. In addition, some existing functions have been renamed - the new names are more descriptive and/or more consistent with new and existing function names. The old names are still available as deprecated synonyms - we expect to remove these synonyms in the near future and potentially without warning.- Updated API version to 20 - compatible with some older API versions.
- New functions:
`gmoObjLNZ`

: Number of linear nonzeros in objective gradient.`gmoObjNLNZEx`

: Number of GMOORDER_NL nonzeros in objective gradient.`gmoObjQNZEx`

: Number of GMOORDER_Q nonzeros in objective gradient.`gmoObjCVecNZ`

: Number of nonzeros in c vector of objective (-1 if Q information not used).`gmoObjConstEx`

: Objective constant - this is independent of`useQ`

.`gmoObjQConst`

: Get constant in solvers quadratic objective.`gmoGetObjCVec`

: Get c vector of quadratic objective.`gmoGetObjSparseEx`

: Get information for gradient of objective function (sparse).`gmoGetRowStatEx`

: Get Jacobian row nonzero counts: total and by GMOORDER_XX.`gmoGetRowCVecNZOne`

: Number of nonzeros in c vector of row si (-1 if Q information not used).`gmoGetRhsOneEx`

: Get individual equation RHS - independent of`useQ`

.`gmoGetRowSparseEx`

: Get info for one row of Jacobian (sparse).`gmoGetRowCVec`

: Get c vector of the quadratic form for one row.`gmoGetRowQConst`

: Get the constant of the quadratic form for one row.`gmoHessInclQRows`

: if`useQ`

is true, still include GMOORDER_Q rows in the Hessian.

- Renamed functions:
`gmoObjQNZ`

→`gmoObjQMatNZ`

: Number of nonzeros in lower triangle of Q matrix of objective (-1 if`useQ`

is false).`gmoGetObjQ`

→`gmoGetObjQMat`

: Get lower triangle of Q matrix of objective.`gmoGetRowQ`

→`gmoGetRowQMat`

: Get lower triangle of Q matrix of one row.

### High-Level APIs

- We might drop support for macOS 10.14 for the C++ API with the next major release.
- Fixed an issue with an updater symbol that tries to update a non-existing symbol in the model instance. This used to make the
`solve`

method of`GAMSModelInstance`

fail, but now just increases the no-match count. - Fixed
`GAMSOptions.Output`

(.NET),`GAMSOptions.setOutput`

(Java), and`GamsOptions.output`

(Python) parameter being ignored in`GAMSJob::Run()`

.

### Low-Level APIs

- For the next major releases, some clean-up of the distributed APIs is planned. In particular, it is planned to remove all Delphi variants but the
`dcp`

version (i.e.`gdxdcpdef.pas`

) and all Fortran variants but the`f9`

version (i.e.`gdxf9def.f90`

). Please contact us, if that causes any trouble for your operation.

### PAL

- Added functions
`palDataDirs`

and`palConfigDirs`

to retrieve standard locations searched by GAMS.

## Model Libraries

### GAMS Model Library

### GAMS Test Library

New models:

- gdxmerg3.gms : Test strict mode
- unload15.gms : Test $gdxUnload
- load13.gms : Test $gdxLoad
- conopt02.gms : CONOPT test suite - multi-thread test
- implset2.gms : Test for Implicit Set Definition with default records
- prevwork1.gms : PreviousWork Test
- decla3.gms : Test correct loading after multi declaration of domain set
- delim5.gms : Limited scope for $onDelim
- load14.gms : Test loading of GDX file with bad UELs
- eval08.gms : Test $eval with hidden functions
- embpy07.gms : Test no_match_limit for model instance
- embpy08.gms : Test filtered load from Embedded Code