Table of Contents
- 47.1.0 Major release (June 13, 2024)
- 47.2.0 Minor release (July 01, 2024)
- 47.3.0 Minor release (July 15, 2024)
- 47.4.0 Minor release (July 30, 2024)
- 47.4.1 Maintenance release (August 13, 2024)
- 47.5.0 Minor release (August 29, 2024)
- 47.6.0 Minor release (September 12, 2024)
47.1.0 Major release (June 13, 2024)
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 Rob Davies, Martin Densing, Ruud Egging-Bratseth, Jinggang Guo, Cheng-Wei Lu, Scott McDonald, Shima Sasanpour, and Uwe Schneider.
Platforms
- The minimal required glibc version for Linux systems will be increased to 2.28 with the next major release.
GAMS System
GAMS
- Added new conditional expressions
empty
to check if the rest of the line is an empty string. This can be handy in situations where, for example, the use of quotes can cause ambiguities, e.g., for arguments of $batInclude. - Changed $set, $setGlobal and $setLocal to allow
%system.tab%
as part of thetext
set. - Adjusted implicit set definition to also copy the element texts if the source is a 1-dimensional set.
- Adjusted the file declaration to automatically replace
con
bycon:
on the fly on Windows (with Windows 10 and oldercon
as well ascon:
can be used to print to the console, starting with Windows 11, onlycon:
can be used for this). - New execution time
embeddedCode
typeReSHOP
to specify new-style EMPinfo content for the ReSHOP solver. This allows for the use of sets and parameters while defining the EMP structure. - Support for new license file format that enables the use of GAMS network licenses. Network licenses can be retrieved with the new command line tools
gamsprobe
andgamsgetkey
. This is only relevant for users that hold such a license. - Fixed a problem with adding solvers via gamsconfig.yaml, when the
libName
was given as absolute path. - Fixed a bug with executeTool, which could have caused missing data assignments when used inside a loop.
Embedded Python Code Facility
- Added new optional parameter
end="\n"
to gams.printLog().
GAMS Connect
- Added new option tableOfContents for the ExcelWriter agent that allows to write a table of contents.
- Added new option index for the ExcelWriter agent that allows to read instructions directly from an index spreadsheet.
- Added new option column for the LabelManipulator agent that allows manipulating labels in a specific column/dimension of symbols.
- Updated scope for options indexSubstitutions and valueSubstitutions for SQLReader agent to be defined at root level.
- Added new option symbolsDimension for the Concatenate agent that allows to specify if output symbols should have a
symbols
column that contains the input symbol names. - Added new option dTypeMap for the SQLWriter agent that allows to specify database specific datatypes while connecting to a database via
pyodbc
. - Added new option columnEncloser for the SQLWriter agent that allows to specify database specific character when enclosing column names while connecting to a database via
pyodbc
. - As announced,
PandasExcelReader
andPandasExcelWriter
have been removed. - The
Options
agent has been removed and the defaulttrace
value for all agents has been changed to0
instead of inheriting from an existingOptions
agent. - Removed parameter
-trace
from thegamsconnect
command line utility. - Improved error message for the Filter agent if
name
andnewName
are identical. - The handling of symbols with empty or missing data has been harmonized.
- Fixed an error of the Filter agent for symbols without data.
- The Concatenate agent considers symbols without data when creating the union of domain sets for
outputDimensions
. - The CSVWriter and SQLWriter agents write symbols without data instead of skipping them.
- Improved error message for ExcelReader agent when trying to read from a named range with an invalid reference.
- The allowed suffix for option name of the Projection agent got extended.
- The option
asParameter
of the Projection agent is deprecated and will be removed in a future release. To get the same behavior as withasParameter: True
use suffix.all
on the symbol name. - Fixed DomainWriter agent not adjusting column names of the DataFrame.
- Fixed a bug in Projection where the UEL order of regular domains in the new symbol was not set correctly.
- Fixed a bug where the Projection agent would not aggregate duplicate records if the index space of
name
andnewName
were of the same length.
GMSPython
- Python has been upgraded to 3.12.3.
- PyMySQL has been upgraded to 1.1.1, which fixes a known vulnerability.
- Added the
typing-extensions
module.
Documentation
- As announced, the McCarl GAMS User Guide has been dropped.
- The chapter on licensing has been moved to the GAMS website.
Solvers
ANTIGONE, CBC, Ipopt, SCIP, SHOT
- Updated MKL to version 2024.1 on Linux and Windows and 2023.2.2 on macOS for x86_64.
BARON
- New libraries 24.5.8.
- Improved convexity identification, facilities for handling quadratic programs, scaling of numerically challenging problems, and range reduction via Fourier-Motzkin elimination.
- New option seed to influence outcome of randomized search steps, e.g., starting points used for local search.
- The default for option wantdual has been changed to 0, unless the modeltype is LP or RMIP, as it currently does not produce correct dual values reliably.
CONOPT
- New libraries 3.17Q.
- New libraries 4.34.
- New option Flg_ForDefc to force search for definitional constraints.
- Removed option
RTMNS2
/Tol_Scale2D_Min
. - Fixed that objective function was not optimized if it did not appear in a constraint.
- Fixed that a derived bound was lost in preprocessor, causing a post-triangular variable to exceed its bound.
- Fixed some multi-threading errors, mainly when the number of threads was large.
- Fixed some errors when CONOPT was called inside a multi-threaded loop.
- Fixed that objective function value was not always defined after function evaluation errors.
CONVERT
- Changed nonlinear macros in JuMP format: Use
@objective
and@constraint
instead of@NLobjective
and@NLconstraint
.
COPT
- New libraries 7.1.3.
- Added first-order LP solver PDLP. New value 6 for option LpMethod to enable PDLP. New parameter PDLPTol.
- PDLP can make use of NVIDIA GPUs on Linux and Windows. This requires that the user has installed CUDA libraries on the system and they can be found by COPT at runtime. New parameters GPUMode and GPUDevice to select use of GPU.
- MIP solver performance improvements.
CPLEX
- Added attribute
is_feasible
to mipstopexpr, which is 1 if a feasible solution has been found and 0 otherwise. - Changed callback context in which mipstopexpr is used to be called more often.
GUROBI
- New libraries 11.0.2.
- Added attribute
is_feasible
to mipstopexpr, which is 1 if a feasible solution has been found and 0 otherwise.
HiGHS
- New libraries 1.7.1.
- Added first-order LP solver cuPDLP-C as additional method for LP solving. Note that feasibility and optimality tolerances may not be satisfied, as cuPDLP-C applies these to the scaled problem only. Also log output is always passed to standard output, the solve cannot be interrupted (e.g., Ctrl+C), and a timelimit is not obeyed. New value
pdlp
for option solver. New options pdlp_d_gap_tol, pdlp_iteration_limit, pdlp_native_termination, and pdlp_scaling. - Added possibility to do analytic centre calculations with interior point solver. New options run_centring, centring_ratio_tolerance, and max_centring_steps.
- New options mip_allow_restart and restart_presolve_reduction_limit to control MIP restart.
- Added first-order LP solver cuPDLP-C as additional method for LP solving. Note that feasibility and optimality tolerances may not be satisfied, as cuPDLP-C applies these to the scaled problem only. Also log output is always passed to standard output, the solve cannot be interrupted (e.g., Ctrl+C), and a timelimit is not obeyed. New value
IPOPT
- New libraries MUMPS 5.7.1.
LINDO/LINDOGLOBAL
- New libraries 15.0.166.
- General:
- Added support for the function poly.
- Added new option MIP_FIXINIT_ITRLIM.
- Added additional possible values for option NLP_LINEARZ and redefined existing ones.
- Added additional possible values for option SOLVER_MODE.
- Added additional possible values for option NLP_MSW_PREPMODE.
- LP/MIP (Linear and Mixed Integer Programs) Solvers:
- Improved stability in numerically challenging instances.
- Improved reproducibility, particularly in concurrent runs.
- Reformulation:
- Conversion of models with binary variables into non-convex nonlinear forms to make use of genetic solver to obtain high quality solutions.
- Better handling of super-basic variables in nonlinear models.
- Nonlinear Solver:
- Improved strategies in the multistart solver.
- Selection of better initial solutions for nonlinear solver.
- Global Solver Improvements:
- Improved performance for classes of models which benefit from new reformulation strategies.
- General:
MOSEK
- New libraries 10.2.0.
PATH
- New libraries 5.1.01.
- Add support for basis-handling routines from CONOPT.
- Add support for basis-handling routines from HiGHS.
- Add support for
int64
basis-handling routines from UMFPACK. PATH does not require this (it uses 32-bit integers for row/column indices and nonzero counts), but the UMFPACKint32
interface allocates at most 2GB of memory for its work. - Require an exact match (not merely a 3-character prefix match) for the
factorization_method
name. This is required to distinguish between umfpack and umfpack64. - Fix up handling of UMFPACK basis errors: it was reporting all such errors as singular matrices.
- Show size of preprocessed model in output (if there was any reduction).
- Fix potential evaluation error in CNS Jacobian.
- Explicitly drop zero values from the basis when using the LUSOL (i.e. the default) or HiGHS factorization methods.
- Allow long lines in the log output: this avoids the need to truncate long row/column names in the log.
- Improved output in some corner cases.
ReSHOP
- New EMP solver ReSHOP (Reformulation Solver for Hierarchical Optimization Problems). It supports a subset of the current EMP syntax, including Nash equilibrium and bilevel statements. ReSHOP is included in the GAMS base system for all users.
- ReSHOP does not perform numerical computations and requires other solvers.
SCIP Optimization Suite
- New libraries PaPILO 2.2.1.
- New libraries SoPlex 7.0.1.
- Removed decomposition based dual simplex and corresponding options
bool:computedegen
,bool:decompositiondualsimplex
,bool:explicitviol
,bool:usecompdual
,int:decomp_displayfreq
,int:decomp_iterlimit
,int:decomp_maxaddedrows
,int:decomp_verbosity
. - Added options to control individual presolving techniques: bool:simplifier_enable_domcol, bool:simplifier_enable_dualfix, bool:simplifier_enable_fixcontinuous, bool:simplifier_enable_parallelcols, bool:simplifier_enable_parallelrows, bool:simplifier_enable_propagation, bool:simplifier_enable_singletoncols, bool:simplifier_enable_stuffing
- Changed lower bound of options real:fpfeastol and real:fpopttol from 0 to 1e-12.
- Removed decomposition based dual simplex and corresponding options
- New libraries SCIP 9.0.1.
- Presolve:
- Added special presolving step for logicor and set covering/packing constraints with two variables and one independent variable.
- New option presolving/milp/verbosity.
- Symmetry detection and handling has been reorganized and improved:
- Changed graph automorphism detection library from bliss to nauty.
- New options propagating/symmetry/detectdoublelex, propagating/symmetry/symtiming, propagating/symmetry/symtype, and propagating/symmetry/orbitopalreduction/columnordering. Replaced option
propagating/symmetry/onlybinarysymmetry
by propagating/symmetry/enforcecomputesymmetry and change default toFALSE
. Renamed optiontable/orbitalfixing/active
to table/symmetry/active. Optionspropagating/symmetry/symfixnonbinaryvars
,propagating/symmetry/addconsstiming
, andpropagating/symmetry/ofsymcomptiming
have no effect anymore and will be removed. - Changed default of option propagating/symmetry/addsymresacks from 0 to 1.
- Changed default of option propagating/symmetry/performpresolving from 1 to 0.
- Removed value 3 for option propagating/symmetry/sstleaderrule.
- Option propagating/symmetry/usedynamicprop now also applies to lexicographic reduction.
- Avoid expensive explicit conflict graph construction in variable-conflict-based addition of Schreier-Sims cuts for symmetry handling.
- Propagation:
- Extended OBBT propagator to handle variables of the linear constraints corresponding to indicator constraints. New options propagating/obbt/indicators and propagating/obbt/indicatorthreshold.
- Improved propagation of indicator constraints.
- Linear relaxation:
- New separator lagromory to generate Lagromory cuts in a relax-and-cut framework. That is, GMI cuts are generated at different bases of the LP, which are explored in the process of solving a Lagrangian dual problem at a node.
- New cut selectors ensemble and dynamic, which perform supersets of the hybrid cut selector with new filtering methods and scoring options.
- New options separating/maxcutsgenfactor and separating/maxcutsrootgenfactor.
- Changed default of option separating/filtercutpoolrel from 1 to 0.
- Indicator constraints with same binary variable now share the slack variable in the LP relaxation.
- Added interface to use HiGHS as LP solver. New value
highs
for option lp/solver.
- Primal heuristics:
- New diving heuristic indicatordiving that focuses on indicator variables which control semicontinuous variables.
- Extended primal heuristic DPS to run after processing the node and to use strict limits for the reoptimization step. New options heuristics/dps/reoptlimits and heuristics/dps/timing.
- New heuristic scheduler that chooses LNS and diving heuristics by using a multi-armed bandit problem. New option table/scheduler/active.
- New bandit method (EXP.3-IX) for ALNS heuristic. New value and default
i
(wasu
) for option heuristics/alns/banditalgo. - Improvements to undercover heuristic, e.g., no longer linearize indicator constraints by default. New options heuristics/undercover/coverand, heuristics/undercover/coverind, and heuristics/undercover/covernl.
- Improved heuristic "trivial" to try nearest bound if zero solution value is out of bounds.
- Branching:
- New branching rule gomory based on Gomory mixed-integer (GMI) cuts.
- Additional branching score tiebreaker based on GMI cuts in reliability pseudo-cost branching rule: new options branching/relpscost/gmiavgeffweight and branching/relpscost/gmilasteffweight.
- Increased the maximal depth of the branch-and-bound tree from 65534 to 1073741822. Increased upper bound on options that refer to tree depths (
*freq
,*freqofs
) to 1073741822.
- Nonlinear constraints:
- New handler for signomial expressions that generates cuts based on a difference of convex functions representation.
- Added monoidal strengthening to intersection cut generation for quadratic expressions. New options nlhdlr/quadratic/usemonoidal, nlhdlr/quadratic/sparsifycuts, nlhdlr/quadratic/trackmore, and nlhdlr/quadratic/useminrep.
- Improved linearization of SOC constraints.
- Improved linearization of convex expressions in non-differentiable point. New option nlhdlr/convex/maxperturb.
- Added options to adjust expression simplification: expr/pow/distribfracexponent, expr/pow/expandmaxexponent, expr/prod/expandalways.
- Updated statistics on NLP relaxation, including information on convexity.
- New option
limits/objectivestop
to stop when a solution is found that is at least as good as given value.
- Presolve:
- See the release report [25] for more details.
XPRESS
- New libraries 43.01.01 (parts of the release notes below correspond to previous XPRESS releases).
- New global solver for (MI)NLP models.
- Using the global solver requires an extra GAMS/XPRESS Global license or a GAMS/XPRESS Link license plus a user XPRESS license with
global
enabled. - The global solver is used on default for (mixed-integer) nonlinear models (if licensed). To disable it and use the XPRESS local solver instead use xslp_nlpSolver.
- Using the global solver requires an extra GAMS/XPRESS Global license or a GAMS/XPRESS Link license plus a user XPRESS license with
- Nonconvex quadratic models are solved to global optimality with the XPRESS MIP solver.
- Improved usage of conflict scores in branching.
- Improved work limits in the separation of MIR cuts and Strong Chvátal-Gomory cuts.
- Improved branching strategies on MIP models with highly degenerate objective function.
- New pre-LP primal heuristic Shift-and-propagate to find an initial feasible solution. This heuristic combines an iterative search algorithm with bound propagation and the solution to a small remaining LP on continuous variables. See also heurShiftProp.
- Performance improvements to the propagation algorithm for conflict constraints during the MIP tree search.
- A new, first-order hybrid gradient algorithm is provided for linear optimization problems.
- A new fix-propagate-repair heuristic runs parallel to the root cut loop for combinatorial problems where finding a feasible solution seems challenging.
- The heuremphasis mode now uses a new background heuristic that solves a MIP without dual techniques.
- The branching strategy now involves a score based on the efficacy of Gomory cuts.
- A more aggressive branching strategy will be used after restarts.
- Non-binding cuts are considered to be re-used after restarts.
- Upgrade to XPRESS/Knitro 14.0.
- MIP-in-SLP will now also perform a nonlinear presolve.
- Added option xslp_nlpSolver: Controls whether to call FICO XPRESS Global or one of the local solvers.
- Added option backgroundMaxThreads: Limit the number of threads to use in background jobs (for example in parallel to the root cut loop).
- Added option backgroundSelect: Select which tasks to run in background jobs (for example in parallel to the root cut loop).
- Added option heurSearchBackgroundSelect: Select which large neighborhood searches to run in the background (for example in parallel to the root cut loop).
- Added option preConvertObjToCons: Convert a linear or quadratic objective function into an objective transfer constraint.
- Added option heurShiftProp: Determines whether the Shift-and-propagate primal heuristic should be executed.
- Added option xslp_filterCascade: Check cascaded solutions against improvements in the merit function.
- Added option xslp_convergenceOps_user: Check for user provided convergence.
- Added option xslp_convergenceOps_noQuadCheck: Allow convex quadratic problems to converge on extended criteria.
- Added option xslp_primalIntegralAlpha: Decay term for primal integral computation.
- Added option xslp_presolve_elimTol: Tolerance for nonlinear eliminations during SLP presolve.
- Added option xslp_boundThreshold: Maximum size of a bound that can be introduced by nonlinear presolve.
- Added option xslp_validationTol_a: Absolute tolerance for the XSLPvalidate procedure (may be used by XPRESS Global internally).
- Added option xslp_validationTol_r: Relative tolerance for the XSLPvalidate procedure (may be used by XPRESS Global internally).
- Added option xslp_validationTol_k: Relative tolerance for the XSLPvalidatekkt procedure (may be used by XPRESS Global internally).
- Added option xslp_validationFactor: Minimum improvement in validation targets to continue iterating.
- Added option xslp_delta_infinity: Maximum value for partial derivatives.
- Added option presolveOps_noSolutionEnumeration: No reductions based on solution enumeration.
- Added option presolveOps_noImpliedBounds: No implied bounds.
- Added option presolveOps_noCliquePresolve: No clique presolve.
- Added option presolveOps_noMod2Reductions: No mod2 presolve.
- Added option mcfCutStrategy: Level of Multi-Commodity Flow (MCF) cutting planes separation: This specifies how aggressively MCF cuts should be separated.
- Added option barHGExtrapolate: Extrapolation parameter for the hybrid gradient algorithm.
- Added option barHGOps: Control options for the hybrid gradient algorithm. Further added corresponding bit options barHGOps_asymAvg, barHGOps_startL1, barHGOps_startL2, barHGOps_startLInf, barHGOps_sqrtOmega, barHGOps_omegaContract, barHGOps_omegaInf.
- Added option barHGMaxRestarts: Maximum number of restarts in the hybrid gradient algorithm.
- Added option globalNumInitNLPCuts: Specifies the maximum number of tangent cuts when setting up the initial relaxation during a global solve.
- Added option globalLSHeurStrategy: When integer-feasible (for MINLP, any solution for NLP) but nonlinear-infeasible solutions are encountered within a global solve, the integer variables can be fixed and a local solver can be called on the remaining continuous problem.
- Added option heurSearchCopyControls: Select how user-set controls should affect local search heuristics.
- Added option globalNLPCuts: Limit on the number of rounds of outer approximation and convexification cuts generated for the root node, when solving an (MI)NLP to global optimality.
- Added option globalTreeNLPCuts: Limit on the number of rounds of outer approximation and convexification cuts generated for each node in the tree, when solving an (MI)NLP to global optimality.
- Added option values
bit 9 = 512
,bit 10 = 1024
,bit 11 = 2048
,bit 12 = 4096
,bit 13 = 9192
,bit 14 = 16384
,bit 15 = 32768
, andbit 16 = 65536
for option qSimplexOps. - Added option values
-1
,2
, and3
for option feasibilityJump and changing option type from boolean to integer. - Added option value
bit 13 = 8192
to option xslp_convergenceOps. - Added option values
bit 13 = 8192
,bit 16 = 65536
,bit 17 = 131072
, andbit 18 = 262144
to option presolveOps. - Added option value
4
to barAlg. - Added option value
bit 12 = 4096
to xslp_augmentation. - Changed default value of cpuPlatform to
-2
. - Changed default value of elimFillin to
7
. - Removed option
netCuts
. - Removed option value
3
of preConvertSeparable.
- New global solver for (MI)NLP models.
- Added support for macOS on arm64 CPUs (Apple M-Series).
- Added attribute
is_feasible
to mipstopexpr which is 1 if a feasible solution has been found and 0 otherwise.
Tools
GAMS Studio
- New version 1.18.2.
- Added maximum lines for syntax highlighting to the settings - by default only the first 10,000 lines get colored, which can improve the performance of opening large files significantly.
- Added
--log
and--log-file
command line option to create a Studio log file. - Improved delay creation of workspace directory until necessary, to give the user the opportunity to set the preferred workspace location.
- Improvements for the Connect Editor:
- Added support for excludes schema.
- Added support for anyof schema.
- Fixed the display of the schema definition of a list of oneof_schema dict.
- Improvements for the use of GAMS Engine:
- Added transition page after the login.
- Fixed switch back to login when session is expired.
- Fixed continue resume when session is expired.
- Fixed crash when running without efi-file.
- Fixed crash when downloading large result data.
- Stability improvements, bug fixes, and minor enhancements, e.g.:
- Fixed a crash inside the GDX Viewer when loading a file with invalid UELs.
- Fixed empty recovery file and added backup file after recovery.
- Fixed wrong search result after replace in multiple files.
- Fixed "Find in Project" not search all relevant files.
- Fixed prevent the rewrite of all project files on startup.
- Fixed color theme issues for dark theme.
- Fixed problems with text selection using the mouse.
- Fixed crash and load behavior of reference viewer when reference file is partially or incorrectly written.
GDXMRW
- As announced, GDXMRW has been dropped. Please use GAMS Transfer Matlab instead.
GDXRRW
- As announced, GDXRRW has been dropped. Please use GAMS Transfer R instead.
SCENRED
- As announced, the executable tool SCENRED has been dropped. The SCENRED functionality, plus methods to construct scenario trees, is still available with SCENRED2. SCENRED2 has been wrapped in
$libInclude scenred
. The now deprecated libIncludesscenred2
andrunscenred2
are still available but will be removed from the system in a future version.
[win32.]ShellExecute
- In order to distinguish arguments of shellexecute and the program to be executed, the program name and the program parameters need to be wrapped by double quotes.
APIs
- Added specifications of the core APIs (cfg, dct, gdx, gev, gmd, gmo, idx, opt, pal) in directory api/spec/core. They can serve as input for the GAMS API generator.
C++
- Changed the behavior of
DebugLevel.ShowLog
to use logOption=4 instead of 3 internally when executing GAMS. - Added new value
KeepFilesOnError
toGAMS.DebugLevel
which keeps temporary files only in case of an error when executing GAMS duringGAMS.GAMSJob.Run
orGAMS.GAMSJob.RunEngine
. Its internal numerical value is1
and all values forDebugLevel.KeepFiles
or greater have been increased by 1. - Changed the default of
GAMS.GAMSWorkspace
fromDebugLevel.Off
toDebugLevel.KeepFilesOnError
with the effect that temporary files do not get deleted anymore in case of an error as described above. - Added optional argument of type
GAMS.GAMSWorkspace
toGAMS.GAMSExceptionExecution
constructor. This needs to be set forDebugLevel.KeepFilesOnError
to have an effect. - Fixed
GAMS.GAMSOptions.OptDir
property used withGAMS.GAMSModelInstance.Instantiate
having no effect inGAMS.GAMSModelInstance.Solve
.
GAMS Transfer Matlab
- GAMS Transfer Matlab is now available on GitHub. Feel free to create issues there in order to report bugs or create feature requests.
- New version 1.0.2 (end of beta).
- Removed property
Container.gams_dir
. GAMS Transfer Matlab is now compiled statically with GDX and is thus independent of the GAMS system. - Removed property
Container.indexed
. A container may now store indexed or standard symbols together. To read or write an indexed GDX file, pass the argumentindexed, true
toContainer.read
orContainer.write
. When writing an indexed GDX file, non-indexed symbols are ignored (symbols have a new propertyindexed
to show if the symbol can be used in indexed mode). Writing a standard GDX file is always possible for all symbols (however, the meaning of indexed symbols may be different compared to the indexed GDX file). An indexed symbol can be created by passing the size array instead of a domain cell for the domain (as before) or by settingsize
property of the symbol. - Restructured symbol classes:
- Added subpackages
gams.transfer.symbol
andgams.transfer.alias
(as well as internal subpackagesgams.transfer.incase_ordered_dict
,gams.transfer.unique_labels
,gams.transfer.symbol.data
,gams.transfer.symbol.definition
,gams.transfer.symbol.domain
,gams.transfer.symbol.value
andgams.transfer.symbol.unique_labels
). Note that internal and/or hidden classes and packages may alter its API without notice, so use at own risk. Referring to subpackages withoutgams.transfer
in the following. - Changed symbol and alias classes to
symbol.Set
,symbol.Parameter
,symbol.Variable
,symbol.Equation
,alias.Set
andalias.Universe
. The previous (constructors of) classesSet
,Parameter
,Variable
,Equation
,Alias
andUniverseAlias
are now factory methods that forward the call toContainer.addSet
,Container.addParameter
,Container.addVariable
,Container.addEquation
,Container.addAlias
orContainer.addUniverseAlias
, respectively. Therefore, the factory methods now benefit from the overwrite feature of theContainer.add*
methods. - Changed abstract symbol class
Symbol
tosymbol.Abstract
and added abstract alias classalias.Abstract
.
- Added subpackages
- Changed behaviour of
symbol.Abstract.format
(previouslySymbol.format
):- Changed selection of
symbol.Abstract.format
: This was previously detected automatically fromsymbol.Abstract.records
. It is now chosen explicitly to be one of the four supported formatstable
,struct
,dense_matrix
orsparse_matrix
by settingsymbol.Abstract.format
.symbol.Abstract.isValid
will check the records towards the chosen format. Changing the format by settingsymbol.Abstract.format
does not changesymbol.Abstract.records
. - Changed
symbol.Abstract.format
when reading or creating symbol without records: Previously, this wasempty
andsymbol.Abstract.records
was[]
. Now, the format is always one of the four supported formatstable
,struct
,dense_matrix
orsparse_matrix
(but without any records). - Changed
symbol.Abstract.format
when reading a scalar. In this case the formatsstruct
anddense_matrix
are identical andContainer.read
preferredstruct
, i.e.,dense_matrix
was changed tostruct
. This is not the case anymore.
- Changed selection of
- Changed enumeration-like classes
VariableType
andEquationType
:- Changed type of enumeration constants from
double
touint8
. - Added state (property
value
andselect
) to enumeration-like classesVariableType
andEquationType
. - Added methods
binary
,integer
,positive
,negative
,free
,sos1
,sos2
,semiCont
,semiInt
toVariableType
to create enumeration with corresponding value. - Added methods
eq
,leq
,geq
,nonBinding
,external
,cone
,boolean
toEquationType
to create enumeration with corresponding value. - Added methods
values
andselects
toVariableType
andEquationType
to convert input to (multiple) enumeration values or selections at once. - Removed methods
int2str
,str2int
andisValid
. Just use the constructor to create an enumeration and then use the propertiesvalue
orselect
instead.
- Changed type of enumeration constants from
- Changed handling of
symbol.Abstract.domain_labels
: Previously, if not set explicitly, these were extracted from the records. This is not the case anymore. They default tosymbol.Abstract.domain_names
(with possible unique added IDs). Changing the fields / columns in the records may require to updatesymbol.Abstract.domain_labels
accordingly. However, updatingsymbol.Abstract.domain_labels
will also update the corresponding fields / columns if available. - Changed
symbol.Abstract.setRecords
when passing astruct
. The domain fields are no longer taken by number of occurance, but bysymbol.Abstract.domain_labels
. - Changed behaviour when resetting
symbol.Abstact.domain
orsymbol.Abstract.size
: This may now reset all domain related properties such assymbol.Abstract.domain_labels
orsymbol.Abstract.domain_forwarding
. - Changed behaviour when removing a symbol or alias that is used as domain in another symbol: Previously, the domain was set to the universe
*
. It is now relaxed keeping the symbol name such thatsymbol.Abstract.domain_names
stay the same. - Changed behaviour when passing
symbols, {}
toContainer.write
: Previously, this wrote all symbols, now it is none. To write all symbols, use all symbols in thesymbols
argument (see alsoContainer.list*
) or don't specify thesymbols
argument in the call. - Changed behaviour of
Container.write
w.r.t.eps
values: Added argumenteps_to_zero
toContainer.write
to convert allSpecialValues.EPS
values in the records to zero in the write. This does not change the records in the Container. Default istrue
. - Changed signature of methods
symbol.Abstract.getMaxValue
,symbol.Abstract.getMinValue
,symbol.Abstract.getMeanValue
,symbol.Abstract.getMaxAbsValue
,symbol.Abstract.countNA
,symbol.Abstract.countUndef
,symbol.Abstract.countEps
,symbol.Abstract.countPosInf
,symbol.Abstract.countNegInf
andsymbol.Abstract.getNumberValues
: Previously, the considered values could be filtered by passing individual strings (e.g.'level', 'marginal'
). Now use the parameter argumentvalues
(e.g. pass'values', {'level', 'marginal'}
). - Changed class
DomainViolation
: Moved tosymbol.domain.Violation
, hid constructor and removed propertydomain
. - Changed behaviour of
symbol.Set.getNumberValues
: This was constantly 0 before, now it considers theelement_text
column. - Changed name of subpackage
gams.transfer.cmex
togams.transfer.gdx
(internal). - Added (or unhided) property
symbol.Abstract.container
andalias.Abstract.container
referring to theContainer
the symbol or alias is stored in. - Added possibility for matrix formats
dense_matrix
andsparse_matrix
to maintain UELs. Previously, UELs were used directly from the domain set for these formats and it was not allowed to change the UELs through thesymbol.Abstract.*UELs
methods. Now, if a symbol has a regular domain, UELs are initialized with the domain set as UELs. But it is further possible to edit those UELs per symbol without modifying the domain set. The size of the matrices insymbol.Abstract.records
is defined by the number of UELs per dimension (symbol.Abstract.size
stays the size defined mainly by the domain). This new feature therefore allows to use matrix formats when the symbol domain is relaxed and/or smaller matrices than actually defined by the regular domain. Note that the previous behaviour for regular symbols with matrix formats does not change. - Added methods
symbol.Abstract.dropDefaults
,symbol.Abstract.dropNA
,symbol.Abstract.dropUndef
,symbol.Abstract.dropMissing
,symbol.Abstract.dropEps
andsymbol.Parameter.dropZeros
to drop (table-like formats) or replace certain special values by defaults (matrix-like formats). - Added methods
symbol.Abstract.countDuplicateRecords
,symbol.Abstract.hasDuplicateRecords
,symbol.Abstract.findDuplicateRecords
,symbol.Abstract.dropDuplicateRecords
,Container.countDuplicateRecords
,Container.hasDuplicateRecords
andContainer.dropDuplicateRecords
to manage duplicates in table-like records formats. - Added methods
symbol.Abstract.countDomainViolations
,symbol.Abstract.hasDomainViolations
,symbol.Abstract.findDomainViolations
,symbol.Abstract.dropDomainViolations
,Container.countDomainViolations
,Container.hasDomainViolations
andContainer.dropDomainViolations
to manage domain violations in table-like records formats. - Added return of new symbol to
symbol.Abstract.copy
andalias.Abstract.copy
. - Added a silent call to
Container.reorderSymbols
inContainer.isValid
if symbols are out of order (symbols that use other symbols in the domain must appear after the domain symbols). Even though having unordered symbols is rather unlikely, this now makes it unnecessary to manually callContainer.reorderSymbols
. - Fixed read of GDX files with trailing whitespace in UELs or empty UELs. Since Matlab's
categorical
will trim category names and does not allow empty categories, GAMS Transfer Matlab will fall back to non-categorical mode for symbols with this kind of UELs. In this mode, UELs will be stored insymbol.Abstract.unique_labels
and columns insymbol.Abstract.records
contain integer indices into the UELs instead ofcategoricals
. Maintain UELs with the usual UEL methods likegetUELs
andsetUELs
. - Fixed reading GDX files with records that use UELs without string representation. For matrix-like record formats, these records will be ignored. For table-like record formats, these will result in
<undefined>
incategorical
domain columns.
- Removed property
GAMS Transfer Python
- We plan to drop support for pandas 1.5 and pandas 2.0 in a future GAMS release.
- Symbol property
.container
reverted back to holding aContainer
weakref
instead of a strong reference. - Fixed bug in
__new__
symbol method that unnecessarily prevented overwriting symbols. - Fixed bug where the
gdx
library was not unloaded properly if anException
was encountered duringread
orwrite
operations.
GAMS Transfer R
- Attention
- GAMS Transfer R is now available on CRAN as
gamstransfer
and is no longer shipped with the GAMS distribution.- The users can install the latest version using
install.packages('gamstransfer')
. - The development version is synchronized with the transfer-r GitHub repository
- The users can install the latest version using
GDX
- New libraries 7.11.4:
- Reworked internally used file I/O streams to utilize low-level WinAPI/POSIX functions instead of the more heavyweight
std::fstream
. - Many performance improvements in auxiliary classes to be used by future GDX utilities.
- Added
gdxDataWriteRawStartKeyBounds
that allows supplying UEL index lower and upper bounds per symbol dimension. gdxUMUelGet
was modified to accept aNULL
pointer for the user UEL index mappingUelMap
.- Fixed memory alignment in custom memory allocator.
- Prevent signed integer overflow in internally used hashmap class.
- Multiple small fixes to infrastructure code and shared modules.
- Reworked internally used file I/O streams to utilize low-level WinAPI/POSIX functions instead of the more heavyweight
Java
- Changed the behavior of DebugLevel.ShowLog to use logOption=4 instead of 3 internally when executing GAMS for classes that work with both Java SE 8 and Java from SE 11 on.
- Fixed
GAMSOptions.setOptDir
property used with GAMSModelInstance.instantiate having no effect in GAMSModelInstance.solve for classes that work with both Java SE 8 and Java from SE 11 on.
.NET
- Added new value
KeepFilesOnError
toGAMS.DebugLevel
which keeps temporary files only in case of an error when executing GAMS duringGAMS.GAMSJob.Run
orGAMS.GAMSJob.RunEngine
. Its internal numerical value is1
and all values forDebugLevel.KeepFiles
or greater have been increased by 1. - Changed the default of
GAMS.GAMSWorkspace
fromDebugLevel.Off
toDebugLevel.KeepFilesOnError
with the effect that temporary files do not get deleted anymore in case of an error as described above. - Changed the behavior of
DebugLevel.ShowLog
to use logOption=4 instead of 3 internally when executing GAMS. - Added optional argument of type
GAMS.GAMSWorkspace
toGAMS.GAMSExceptionExecution
constructor. This needs to be set forDebugLevel.KeepFilesOnError
to have an effect.
PAL
- Added property
palNetworkLicenseOK
that sets/gets the indicator for network license templates to validate correctly.
Python
- We plan to drop support for Python 3.8 in a future GAMS release.
- We plan to drop support for pandas 1.5 in a future GAMS release. Additionally, we anticipate to drop support for pandas 2.0 but contingent on the pandas release cycle. This aligns with the policy of supporting at least three recent minor pandas versions.
- The
gams.core.numpy
binaries are now build withnumpy 1.24
for Python 3.8, 3.9, and 3.10. - Changed the behavior of DebugLevel.ShowLog to use logOption=4 instead of
3
internally when executing GAMS. - Enhanced the warning management of GamsWorkspace by using the
warnings
module instead ofprint()
. - Removed both the
options
parameter from theConnectDatabase
constructor as well as the correspondingoptions
property.
Model Libraries
- Fixed inconsistent capitalization of compile-time constants and dollar control options.
GAMS Data Library
- Dropped
gdxmrw_ext01_init
. - Dropped
gdxmrw_intro01_init
. - Dropped
gdxmrw_intro02_init
. - Dropped
gdxmrw_irgdx01_init
. - Dropped
gdxmrw_iwgdx01_init
. - Dropped
gdxmrw_qp1
. - Dropped
gdxmrw_qp1_starter
. - Dropped
gdxmrw_qp2
. - Dropped
gdxmrw_qp2_starter
. - Dropped
gdxmrw_qp3
. - Dropped
gdxmrw_rgdx01_init
. - Dropped
gdxmrw_tr1
. - Dropped
gdxmrw_tr2
. - Dropped
gdxmrw_tr3
. - Dropped
gdxmrw_tr4
. - Dropped
gdxmrw_tr5
. - Dropped
gdxmrw_wgdx01_init
. - Dropped
GDXMRWPlotting01
. - Dropped
GDXMRWShowJac1
. - Dropped
invert2
. - Updated connect01.gms : Complex Connect Example with Spreadsheets.
GAMS Test Library
- Added ifstat8.gms : Tests for $if empty.
- Added put13.gms : Put to console.
- Added embrhp01.gms : Test for the ReSHOP embedded code facility and embrhp02.gms : Test that the ReSHOP embedded handles failure gracefully.
- Added gamsincr02.gms : Test GAMS incrementalMode limitations.
- Dropped
capdxlsr
. - Dropped
capdxlsrw
. - Dropped
gdxmrw01
. - Dropped
gdxmrw02
. - Dropped
gdxmrw03
. - Dropped
gdxmrw04
. - Dropped
gdxmrw05
. - Dropped
gdxmrw06
. - Dropped
gdxmrw07
. - Dropped
gen_r1
. - Dropped
gen_r2
. - Dropped
gen_rbig
. - Dropped
genr2
. - Dropped
genr3
. - Dropped
genr4
. - Dropped
genr5
. - Dropped
genw2
. - Dropped
genw3
. - Dropped
genw4
. - Dropped
gversion
. - Dropped
testinst
. - Updated caconcat.gms : Test Connect agent Concatenate.
- Updated cacsvw.gms : Test Connect agent CSVWriter.
- Updated cadomainw.gms : Test Connect agent DomainWriter.
- Updated cafilter.gms : Test Connect agent Filter.
- Updated cagamsrw.gms : Test Connect agent GAMSReader/Writer.
- Updated cagdxrw.gms : Test Connect agent GDXReader/Writer.
- Updated calabelm.gms : Test Connect agent LabelManipulator
- Updated caproject.gms : Test Connect agent Projection.
- Updated carcr.gms : Test Connect agent RawCSVReader.
- Updated carxr.gms : Test Connect agent RawExcelReader.
- Updated casqlr.gms : Test Connect agent SQLReader.
- Updated casqlw.gms : Test Connect agent SQLWriter.
- Updated caxlsr.gms : Test Connect agent ExcelReader.
- Updated caxlsrw.gms : Test Connect agents ExcelReader and ExcelWriter.
- Updated embpy01.gms : Test for embedded code facility.
- Updated embpy02.gms : Test for embedded code facility.
47.2.0 Minor release (July 01, 2024)
Acknowledgments
We would like to thank all of our users who have reported problems and made suggestions for improving this release. In particular, we thank Wolfgang Britz, Bruce McCarl, Bruno Santoro, and Anne Sofie Skak-Iversen.
GAMS System
GAMS
- Fixed a problem with put_utility '[x]save', which caused unexpected behavior in some cases when restarting from the created file.
GAMS Connect
- Fixed the ExcelWriter agent to raise an error when data exceeds Excel's row or column limit, preventing the creation of broken files.
- Improved error message for duplicate
indexColumns
/valueColumns
/textColumns
with the CSVReader agent. - Fixed bug in the CSVReader agent where the same column specified in both
indexColumns
andvalueColumns
/textColumns
would only be read as an index column. - Fixed bug in the CSVReader agent where the order of columns specified via
valueColumns
/textColumns
would not be considered.
GMSPython
- urllib3 has been upgraded to version 2.2.2, which fixes a known vulnerability.
Windows Installer
- Fixed truncated preview of GAMS licenses using the new license format.
- Fixed a bug where licenses using the new license format or non-Windows line endings were not recognized from the clipboard.
Solvers
CONOPT
- New libraries 4.35.
- Fixed incorrect handling of numerical cancellation in LU update.
- Fixed potential crash with multi-threading.
COPT
- New libraries 7.1.4.
GAMSCHK
- Fix incorrect POSTOPT output in cases where row or column scales have been set in the GAMS model but are not used (i.e. scaleOpt=0).
KESTREL
- Added support for EMP models.
SCIP Optimization Suite
- New libraries PaPILO 2.3.0.
- New libraries SoPlex 7.1.0.
- New libraries SCIP 9.1.0.
- Added constraint handler that checks and enforces bounds on original variables which have been fixed or aggregated in the presolved problem. New options constraints/fixedvar/*.
- Added option to consider enforcement of nonlinear constraints (including spatial branching) before integrality has been enforced. New options constraints/nonlinear/branching/mixfractional and constraints/nonlinear/branching/fracweight.
- New options limits/dual and limits/primal to terminate the solve as soon as the dual/primal bound is at least as good as the specified value. Option
limits/objectivestop
is deprecated and will be removed in the future. - New option presolving/milp/internalmaxrounds.
Tools
GAMS Studio
- New version 1.18.4 with bug fixes and minor enhancements, e.g.:
- Added support for new GAMS license file format with 8 lines.
- Added missing context menu actions for folder entries in projects.
- Added command line parameter
--skip-check-for-update
to skip all online checks for update actions. - Fixed that scrolling with page up/down didn't work in process log.
- Fixed suffix issue for solver option files on Windows.
- Fixed incomplete search results when searching in
This Project
. - Fixed incomplete selection in LST file when using scroll action.
- Fixed usage of
solver
parameter when submitting a job to NEOS.
APIs
GDX
- New libraries 7.11.5.
- Fixed
gdxOpenAppend
not indicating a problem (in the return code) when trying to append to a GDX file with format version before 7 (incompatible for appending). - Fixed
gdxDataReadMap
crashing when (user-mapped) record UEL indices are out of bounds (index exceeds number of UELs).
- Fixed
Python
- Added support for numpy 2.
- The
gams.core.numpy
binaries are now build withnumpy 2
for Python 3.9, 3.10, 3.11, and 3.12.
Model Libraries
GAMS Data Library
- Updated moo01.gms : Solve scalable multi-objective knapsack model.
- Updated moo02.gms : Solve multi-objective power generation model.
GAMS Test Library
- Added kestrel5.gms : Kestrel test for emp solvers.
- Updated cacsvr.gms : Test Connect agent CSVReader.
- Updated moo1.gms : Test libInclude tool moo.
47.3.0 Minor release (July 15, 2024)
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 Katja Jensen and Nicoline Simone Sachmann.
GMSPython
- Updated
certifi
to version 2024.7.4.
Solvers
CPLEX
- Enabled returning duals from feasopt, if available.
- Changed default CPLEX thread scheduler on macOS/arm64 systems due to performance issues.
GUROBI
- Fixed possibly incorrect solution when solving models with indicator constraints and activated solvefixed.
HiGHS
- New libraries 1.7.2.
Ipopt
- New libraries 3.14.16.
- Improved locating dependencies of linear solver libraries when loaded at runtime on Windows.
- New libraries Mumps 5.7.2.
MOSEK
- New libraries 10.2.1.
SCIP
- Fixed some infrequent segmentation faults when unloading the GAMS/SCIP library on Linux.
47.4.0 Minor release (July 30, 2024)
Acknowledgments
We would like to thank all of our users who have reported problems and made suggestions for improving this release.
GAMS System
GAMS
- Fixed a bug where dumpOpt for value 22 stopped writing dump files after returning from an include file when $onGlobal is set before.
Solvers
COPT
- New libraries 7.1.5.
KESTREL
- Fixed a bug where the encoding of the log output would fail in certain cases.
Tools
GAMS Studio
- New version 1.18.5 with bug fixes and minor enhancements, e.g.:
- added command line argument to log C4U information and errors (
--dump-c4u-data
) - fixed missing spaces in breakpoint context menu text
- fixed GDX export dialog non-modal on macOS
- fixed fullscreen mode on Windows
- fixed help to documentation triggered from Connect Editor, EFI Editor, Parameter File Editor and Solver Option Editor
- added command line argument to log C4U information and errors (
Model Libraries
GAMS Data Library
GAMS Test Library
47.4.1 Maintenance release (August 13, 2024)
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 Michael Ferris, Arne Stolbjerg Drud, Salma Hammani, Thomas Rutherford, and Yannick Wack.
GAMS System
GAMS
- Fixed crash during error report for redefinition of domain list combined with implicit set definition.
- Fixed wrong values for Set Attributes
.first
,.last
, and.rev
in certain multi-dimensional sparse assignments.
GAMS Connect
- Fixed an error of the GAMSWriter and GDXWriter agents for
duplicateRecords
being set tofirst
,last
, ornone
.
Solvers
CONOPT
- Fixed that setting GAMS option threads to 0 did not lead to use CONOPT thread default of 1. That is, CONOPT now runs single threaded by default again.
CONVERT
- Fixed output of external equations for gams format.
CPLEX
- Fixed ignored iis = 1 after CPLEX solve status "infeasible or unbounded" (4 or 119).
CPLEX, GUROBI, XPRESS
- Fixed
mipstopexpr
for asynchronous solves.
KNITRO, MINOS, SNOPT
- Fixed incorrect function evaluations for models with external equations.
APIs
- Added missing
extern "C"
linkage specification to the external equations header file (geheader.h
) for use in C++ code.
GMO
- Fixed a bug in handling constant derivatives in external equations.
Model Libraries
GAMS Test Library
- Updated cagdxrw.gms : Test Connect agent GDXReader/Writer.
- Updated cagamsrw.gms : Test Connect agent GAMSReader/Writer.
47.5.0 Minor release (August 29, 2024)
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 Michael Ferris, Faith Huang, and Nick Sahinidis.
GAMS System
GAMS Connect
- Fixed SQLWriter agent raising an error when writing an empty symbol with
connectionType: pyodbc
orconnectionType: access
.
Solvers
GUROBI
- Fixed incorrect error message when specifying option nlreform. The option was functioning correctly though.
- Fixed that a dual bound was not reported back in the objEst attribute for some model types.
XPRESS
- Fixed that a dual bound was not reported back in the objEst attribute for some model types.
Tools
GAMS Studio
- New version 1.18.6 with bug fixes and minor enhancements, e.g.:
- Added highlighting of group names for all running projects.
- Added function to "Save as..." for the project options file.
- Added licensed GAMS solvers to license text and dropped solver matrix.
- Added support for fetching a GAMS license by using an access code.
- Fixed use of license file specified via
gamsconfig.yaml
. - Fixed crash after "Save as..." of the changelog.
- Fixed color theme issue when Windows is in dark mode and Studio is using light mode.
- Fixed incorrect entry count shown by model library tabs when using filters.
- Fixed crash on reloading a LST file.
- Fixed update of editors after changes in settings dialog.
APIs
GAMS Transfer Matlab
- New version 1.0.3.
- Fixed sparse write of format
sparse_matrix
.
- Fixed sparse write of format
Python
- Fixed that Connect agent
Projection
was failing with Python versions prior to 3.12.
Model Libraries
GAMS Test Library
47.6.0 Minor release (September 12, 2024)
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 Michael Ferris and Nick Sahinidis.
GAMS System
GAMS
- Fixed unexpected GAMS return code, when the GAMS Studio Debugger is started for a model that gets compiled only, but not executed.
- Fixed wrong behavior with continued execution after previous error in model generation when running under GAMSPy.
Solvers
COPT
- New libraries 7.1.6.
XPRESS
- Ensure GAMS ResLim is passed on to the global solver also when solving NLPs.
Tools
GAMS Studio
- New version 1.18.7 with bug fixes and minor enhancements:
- Added line wrapping for changelog.
- Fixed license dialog layout on resize.
- Fixed jumpy font when editing italic lines.
- Fixed invisible selection in system log.
- Fixed wrong behavior of
-GAMS-System-
project.