47 Distribution
Table of Contents
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.