47 Distribution

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 the text 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 by con: on the fly on Windows (with Windows 10 and older con as well as con: can be used to print to the console, starting with Windows 11, only con: can be used for this).
  • New execution time embeddedCode type ReSHOP 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 and gamsgetkey. 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

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 and PandasExcelWriter have been removed.
  • The Options agent has been removed and the default trace value for all agents has been changed to 0 instead of inheriting from an existing Options agent.
  • Removed parameter -trace from the gamsconnect command line utility.
  • Improved error message for the Filter agent if name and newName 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 with asParameter: 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 and newName 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.
    • Initial bounds larger than RTMAXV were earlier considered a setup error. They are now changed to RTMAXV, a message is issued, and the solution process continues.
  • 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

IPOPT

  • New libraries MUMPS 5.7.1.

LINDO/LINDOGLOBAL

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

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 UMFPACK int32 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

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.
    • 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, and bit 16 = 65536 for option qSimplexOps.
    • Added option values -1, 2, and 3 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, and bit 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.
  • 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

GDXRRW

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 libIncludes scenred2 and runscenred2 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 to GAMS.DebugLevel which keeps temporary files only in case of an error when executing GAMS during GAMS.GAMSJob.Run or GAMS.GAMSJob.RunEngine. Its internal numerical value is 1 and all values for DebugLevel.KeepFiles or greater have been increased by 1.
  • Changed the default of GAMS.GAMSWorkspace from DebugLevel.Off to DebugLevel.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 to GAMS.GAMSExceptionExecution constructor. This needs to be set for DebugLevel.KeepFilesOnError to have an effect.
  • Fixed GAMS.GAMSOptions.OptDir property used with GAMS.GAMSModelInstance.Instantiate having no effect in GAMS.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 argument indexed, true to Container.read or Container.write. When writing an indexed GDX file, non-indexed symbols are ignored (symbols have a new property indexed 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 setting size property of the symbol.
    • Restructured symbol classes:
      • Added subpackages gams.transfer.symbol and gams.transfer.alias (as well as internal subpackages gams.transfer.incase_ordered_dict, gams.transfer.unique_labels, gams.transfer.symbol.data, gams.transfer.symbol.definition, gams.transfer.symbol.domain, gams.transfer.symbol.value and gams.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 without gams.transfer in the following.
      • Changed symbol and alias classes to symbol.Set, symbol.Parameter, symbol.Variable, symbol.Equation, alias.Set and alias.Universe. The previous (constructors of) classes Set, Parameter, Variable, Equation, Alias and UniverseAlias are now factory methods that forward the call to Container.addSet, Container.addParameter, Container.addVariable, Container.addEquation, Container.addAlias or Container.addUniverseAlias, respectively. Therefore, the factory methods now benefit from the overwrite feature of the Container.add* methods.
      • Changed abstract symbol class Symbol to symbol.Abstract and added abstract alias class alias.Abstract.
    • Changed behaviour of symbol.Abstract.format (previously Symbol.format):
      • Changed selection of symbol.Abstract.format: This was previously detected automatically from symbol.Abstract.records. It is now chosen explicitly to be one of the four supported formats table, struct, dense_matrix or sparse_matrix by setting symbol.Abstract.format. symbol.Abstract.isValid will check the records towards the chosen format. Changing the format by setting symbol.Abstract.format does not change symbol.Abstract.records.
      • Changed symbol.Abstract.format when reading or creating symbol without records: Previously, this was empty and symbol.Abstract.records was []. Now, the format is always one of the four supported formats table, struct, dense_matrix or sparse_matrix (but without any records).
      • Changed symbol.Abstract.format when reading a scalar. In this case the formats struct and dense_matrix are identical and Container.read preferred struct, i.e., dense_matrix was changed to struct. This is not the case anymore.
    • Changed enumeration-like classes VariableType and EquationType:
      • Changed type of enumeration constants from double to uint8.
      • Added state (property value and select) to enumeration-like classes VariableType and EquationType.
      • Added methods binary, integer, positive, negative, free, sos1, sos2, semiCont, semiInt to VariableType to create enumeration with corresponding value.
      • Added methods eq, leq, geq, nonBinding, external, cone, boolean to EquationType to create enumeration with corresponding value.
      • Added methods values and selects to VariableType and EquationType to convert input to (multiple) enumeration values or selections at once.
      • Removed methods int2str, str2int and isValid. Just use the constructor to create an enumeration and then use the properties value or select instead.
    • 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 to symbol.Abstract.domain_names (with possible unique added IDs). Changing the fields / columns in the records may require to update symbol.Abstract.domain_labels accordingly. However, updating symbol.Abstract.domain_labels will also update the corresponding fields / columns if available.
    • Changed symbol.Abstract.setRecords when passing a struct. The domain fields are no longer taken by number of occurance, but by symbol.Abstract.domain_labels.
    • Changed behaviour when resetting symbol.Abstact.domain or symbol.Abstract.size: This may now reset all domain related properties such as symbol.Abstract.domain_labels or symbol.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 that symbol.Abstract.domain_names stay the same.
    • Changed behaviour when passing symbols, {} to Container.write: Previously, this wrote all symbols, now it is none. To write all symbols, use all symbols in the symbols argument (see also Container.list*) or don't specify the symbols argument in the call.
    • Changed behaviour of Container.write w.r.t. eps values: Added argument eps_to_zero to Container.write to convert all SpecialValues.EPS values in the records to zero in the write. This does not change the records in the Container. Default is true.
    • 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 and symbol.Abstract.getNumberValues: Previously, the considered values could be filtered by passing individual strings (e.g. 'level', 'marginal'). Now use the parameter argument values (e.g. pass 'values', {'level', 'marginal'}).
    • Changed class DomainViolation: Moved to symbol.domain.Violation, hid constructor and removed property domain.
    • Changed behaviour of symbol.Set.getNumberValues: This was constantly 0 before, now it considers the element_text column.
    • Changed name of subpackage gams.transfer.cmex to gams.transfer.gdx (internal).
    • Added (or unhided) property symbol.Abstract.container and alias.Abstract.container referring to the Container the symbol or alias is stored in.
    • Added possibility for matrix formats dense_matrix and sparse_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 the symbol.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 in symbol.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 and symbol.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 and Container.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 and Container.dropDomainViolations to manage domain violations in table-like records formats.
    • Added return of new symbol to symbol.Abstract.copy and alias.Abstract.copy.
    • Added a silent call to Container.reorderSymbols in Container.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 call Container.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 in symbol.Abstract.unique_labels and columns in symbol.Abstract.records contain integer indices into the UELs instead of categoricals. Maintain UELs with the usual UEL methods like getUELs and setUELs.
    • 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> in categorical domain columns.

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 a Container 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 an Exception was encountered during read or write 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

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 a NULL pointer for the user UEL index mapping UelMap.
    • 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.

Java

.NET

  • Added new value KeepFilesOnError to GAMS.DebugLevel which keeps temporary files only in case of an error when executing GAMS during GAMS.GAMSJob.Run or GAMS.GAMSJob.RunEngine. Its internal numerical value is 1 and all values for DebugLevel.KeepFiles or greater have been increased by 1.
  • Changed the default of GAMS.GAMSWorkspace from DebugLevel.Off to DebugLevel.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 to GAMS.GAMSExceptionExecution constructor. This needs to be set for DebugLevel.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 with numpy 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 of print().
  • Removed both the options parameter from the ConnectDatabase constructor as well as the corresponding options 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