42 Distribution

42.0.0 Beta release (January 13, 2023)

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.

Platforms

  • As announced, dropped support for macOS 10.15 (Catalina).
  • As announced, dropped support for Windows 8.
  • Added support for macOS 13 (Ventura).

GAMS System

Connect

  • Added new Filter agent to reduce symbol data by applying filters on labels and numerical values.
  • The PandasExcelWriter no longer writes merged cells per default. In order to write merged cells, use the option toExcelArguments.
  • The PandasExcelReader now enforces sufficient ranges. A range must cover the complete dimension of a symbol including its value (parameter) or text (set). Reading set element text is mandatory and can no longer be skipped. Dropping unwanted text can be achieved using the Projection agent.
  • The PandasExcelWriter supports .xlsx and .xlsm files. .xls files are not supported. For other file formats, such as .ods files, it might be required to install additional Python packages.
  • The PandasExcelReader supports .xlsx and .xlsm files. For other file formats, such as .xls or .ods files, it might be required to install additional Python packages.
  • Improved exception messages for various Connect agents.
  • Fixed bug where writer agents would fail if a symbol was read empty by one of the reader agents.

GAMS

  • Change for the profile option: Entry Solve Alg was renamed to Solver. The value reported with it matches now the value from model attribute etSolver. In previous versions, Solve Alg was reported to be zero when running with solveLink=0. This has been fixed.
  • Improved speed in GAMS and GDX for models with many labels.
  • In case the overall GAMS program uses some extrinsic functions but the particular model instance does not, then the extrinsic functions are not loaded any longer into the solver link.
  • Added dollar control option $save[.keepCode] to create a work file during compilation.

GMSPython

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

Embedded GAMS Code Facility

  • Added GAMS to the family of supported embedded code languages.

Solvers

BARON

  • New libraries 23.1.5.
    • Significant improvements for quadratic programs, tree management strategies, and integer presolve.

CBC

  • The time reported back to GAMS (e.g., resUsd attribute) is now measured by the clock that is specified by the clocktype option.
  • We plan to drop the CBC alias COINCBC with the next major release.

CONOPT

  • We plan to drop the CONOPT3 alias CONOPTD with the next major release.

CONVERT

  • Added concurrent mode (value 3) to option qextractalg.
  • We plan to drop the CONVERT alias CONVERTD with the next major release.

COPT

CPLEX

  • New libraries 22.1.1.0.
    • Added option cardls: decides how often to apply the cardinality local search heuristic (CLSH).
  • Added concurrent mode (value 3) to option qextractalg.
  • Changed default of rerun to nono. With this change the solver may not be able to distinguish between unbounded and infeasible models anymore and may just report the model to be infeasible. In order to check for unbounded models, set rerun to yes to rerun the optimization with presolve turned off.
  • We plan to drop the CPLEX alias CPLEXD with the next major release.

DE

DECIS

  • We plan to drop the EMP-SP solver DECIS with the next major release. This does not effect the stochastic LP solvers DECISC and DECISM. They will remain in the system.

GUROBI

  • New libraries 10.0.0.
    • Added option softmemlimit: Soft memory limit.
    • Added option obbt: Controls aggressiveness of optimality-based bound tightening.
    • Added option networkalg: Network simplex algorithm.
    • Added support of nonlinear constraint r =e= sigmoid(x) (or r =e= 1 / (1 + exp(-x))), see Gurobi: Nonlinear Programming.
  • Added concurrent mode (value 3) to option qextractalg.
  • Changed default of rerun to -1 (no). With this change the solver may not be able to distinguish between unbounded and infeasible models anymore and may just report the model to be infeasible. In order to check for unbounded models, set rerun to 1 to rerun the optimization with presolve turned off.

HiGHS

IPOPT

  • We plan to drop the IPOPT alias COINIPOPT with the next major release.

KNITRO

  • New libraries 13.2.0.
    • New option presolveop_redundant: Determine whether or not to enable the Knitro presolve operation to detect and remove redundant constraints.
    • New option mip_gomory: Specifies rules for adding Gomory mixed-integer cuts.
    • New value for option presolveop_tighten: 2 and 3.
    • New value for option mip_clique: -1 (new default). Removed value 3.
    • New value for option mip_knapsack: -1 (new default). Removed value 3.
    • New value for option mip_zerohalf: -1 (new default). Removed value 3.
    • New value for option mip_liftproject: -1 (new default). Changed option type to integer.
    • Changed default value of option mip_cutting_plane: 1.
  • Added concurrent mode (value 3) to option qextractalg.

LINDO/LINDOGLOBAL

  • New libraries 14.0.204.
  • Added option empInfoFile to LINDO.

MILES

  • We plan to drop the MILES alias MILESE with the next major release.

MINOS

  • We plan to drop the MINOS aliases MINOS5 and MINOS55 with the next major release.

MOSEK

OCTERACT

  • New libraries 4.6.0.
    • Removed the possibility to use Gurobi or Xpress as MIP solver. Removed GUROBI and XPRESS from possible values for options MILP_SOLVER and MIP_SOLVER.

ODHCPLEX

  • Added concurrent mode (value 3) to option qextractalg.
  • Changed default of rerun to nono. With this change the solver may not be able to distinguish between unbounded and infeasible models anymore and may just report the model to be infeasible. In order to check for unbounded models, set rerun to yes to rerun the optimization with presolve turned off.

SCIP

  • We plan to drop the SCIP alias COINSCIP with the next major release.

SELKIE

  • We plan to drop the research solver SELKIE with the next major release.

SHOT

SOPLEX

  • We plan to drop the SOPLEX alias OSISOPLEX with the next major release.

XPRESS

  • New libraries 41.01.01.
    • Dynamic adjustment of the reliability threshold for pseudo cost updates.
    • Improved branching strategies on MIP models with highly degenerate objective function.
    • Extended the effect of numericalEmphasis to some bound tightening reductions. This can help to avoid wrong answers in case of numerically challenging problems.
    • New option globalBoundingBox: If a nonlinear problem cannot be solved due to appearing unbounded, it can automatically be regularized by the application of a bounding box on the variables.
    • New option timeLimit: Maximum time in seconds that the Optimizer will run before it terminates, including the problem setup time and solution time.
    • New option solTimeLimit: Maximum time in seconds that the Optimizer will run a MIP solve before it terminates, given that a solution has been found.
    • New option preConfiguration: Determines whether binary rows with only few repeating coefficients should be reformulated.
    • New option primalOps: Allows fine tuning the variable selection in the primal simplex solver.
    • New options cutSelect_gomory and treeCutSelect_gomory: Strong Chvatal-Gomory cuts.
    • New options cutSelect_farkas and treeCutSelect_farkas: Farkas cuts.
    • New option feasibilityJump: Decides if the Feasibility Jump heuristic should be run.
    • New bits in cutSelect, treeCutSelect and barRegularize.
    • New option value (2) for xslp_solver: Use Xpress-Optimizer if possible (convex quadratic problems only).
    • New default for option xslp_iterLimit: 1000.
    • New default for option xslp_mipDefaultAlgorithm: 3.
    • Option xslp_postsolve has been changed from boolean to integer with new default -1: Postsolve if the problem could be solved to optimality/infeasibility.
    • Options maxStallTime and maxCutTime have been changed from integer to double options.
    • Deprecated options maxTime (use timeLimit or solTimeLimit instead), cacheSize, l1Cache and sleepOnThreadWait.
    • Removed options extraPresolve and lpThreads.
  • Added concurrent mode (value 3) to option qextractalg.
  • New bit options barPresolveOps_standard, barPresolveOps_extra, barPresolveOps_full.

Tools

$LibInclude gdxservice

  • Added tool GDXEncoding to convert labels in a GDX file from one encoding to another one.

CHK4UPD

  • We plan to drop the command line tool CHK4UPD with the next major release. The functionality of that tool will still be available through GAMS Studio.

CSDP

  • We will remove the tool/solver csdp in a future GAMS release. GAMS/MOSEK should be used instead.

GAMS Studio

  • New version 1.13.0.
    • New feature: GAMS Connect editor.
    • GDX Viewer improvements:
      • Improved numerical formatting of the GDX Viewer when using g-format with Full precision.
      • State of GDX files is now persistent even after restarting Studio.
    • Projects get now saved to separate files automatically (GSP - GAMS Studio Project).
      • File menu and context menu now provide New project, Move project, and Clone project.
      • Import project and Export project have been removed.
      • Each project is stored in a separate file, the Project settings show a representation of that.
      • A project name is tied to the name of the project file.
      • Projects in different paths with the same name get a number added. This number is assigned in the "name and path" order, so changing the path of a project may change the assigned number
    • Improved Check for Update dialog, including HTML output and text updates.
    • Studio checks now online for new available GAMS version when started (can be changed in the settings).

GDXTROLL

  • We will remove the tool gdxtroll in a future GAMS release.

GDX2XLS

MPS2GMS

  • New libraries HiGHS 1.4.1 for LP/MPS reading.

XLS2GMS

  • We will remove the tool xls2gms in a future GAMS release. GAMS Connect agent PandasExcelReader should be used instead.

XLSDUMP

  • We will remove the tool xlsdump in a future GAMS release. GAMS Connect agent RawExcelReader should be used instead.

APIs

.Net

  • Changed the TargetFramework of the GAMS .Net API from 4.0 to 4.5.
  • Added method RunEngine to GAMSJob class to run jobs on GAMS Engine, rather than locally.

Matlab

  • Added option SuffixAlgebraVars.
  • Added option values RoundedFloatingDec (3) and ForEFloatingDec (4) to option PutNR.

GAMS Transfer Matlab

  • Improved performance of Container.hasSymbols. Among others, this has a significant effect when adding many symbols.
  • Added support of partial write.
  • Added parameter symbols to Container.write, Container.getDomainViolations, Container.resolveDomainViolations and Container.isValid.
  • Added parameter allow_merge to Container.renameUELs and Symbol.renameUELs in order support merging UELs while renaming (renaming a UEL to an already existing UEL).

GAMS Transfer Python

  • New generateRecords method to automatically generate records from domain information.
  • New pivot convenience method to pivot symbol records into various shapes.
  • Removed possible dict type for rtol and atol in equals method.

GAMS Transfer R

  • removeSymbols removes symbol links in other symbols.
  • Added symbols argument to Container methods renameUELs and removeUELs.
  • findDuplicateRecords now returns a data frame instead of row indices.
  • Breaking: Container data field is now an ordered dictionary from collections package instead of named list. Instead of m$data$<symbolname>, use m[<symbolname>].
  • Performance improvement to Container method hasSymbols. This results in significant speed-ups when adding multiple symbols to the container.
  • Added symbols argument to Container methods getDomainViolations, hasDomainViolations, countDomainViolations, dropDomainViolations, hasDuplicateRecords, countDuplicateRecords, dropDuplicateRecords, isValid, and write for partial operation.
  • Container method getSymbols now always returns a list.
  • Added equals method to Symbols to check if symbols are equal.
  • Bugfix in SpecialValues$isNA.
  • Bugfix in getUELs for scalar symbols.
  • Bugfix in Symbol method isValid for symbols containing only NA.
  • Bugfix in Variable and Equation set records for numeric inputs.
  • Added equals method for Container and ConstContainer.

Jupyter Notebooks

  • Removed methods gams.pivot and gams.pivot2d. This functionality is now available from GAMS Transfer Python via the pivot method.
  • As announced, the package gams_magic_legacy has been removed, use gams.magic instead.

Python

  • The GAMS Python API structure has been revised. Detailed information about the new structure can be found in the Python API documentation:
    • Attention
      Due to the changed structure of the API, import statements in existing code might not work anymore - please refer to Migrate import statements for details on how to migrate.
    • Replaced the use of distutils by setuptools. Installation/uninstallation of the Python API is now done using pip.
    • All examples have been moved to <sysdir>/api/python/examples and are organized by sub packages.
    • Documentation has been restructured and contains information on the GAMS numpy API (previously gams2numpy) now.

Model Libraries

GAMS Model Library

GAMS Test Library

API Library