25.0 Distribution

# 25.0.1 Major release (January 17, 2018)

## 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, Jeff Dischler, Michael Ferris, Dhruv Gupta, Erwin Kalvelagen, Florian Landis, Andre Lemelin, Erfan Mohagheghi, Anthony Paul, and Nathan Sudermann-Merx.

## Platforms

• Due to the discontinuation of Cplex on Windows 32bit (with Cplex 12.7 in 2016) we are faced with potentially phasing out/dropping solvers depending on Cplex on Windows 32bit with the next major release. The most likely candidate for this is ANTIGONE. These solvers will still be available for 64-bit Windows and other supported platforms. Other solver vendors (e.g. Gurobi and FICO-Xpress) have also announced the discontinuation of their product on the Windows 32bit platform. If you rely heavily on the availability and support of the Windows 32bit platform please contact suppo.nosp@m.rt@g.nosp@m.ams.c.nosp@m.om to discuss your options.
• As announced, dropped support for x86-64 Solaris.
• As announced, increased the minimal required MacOS X version to 10.11.
• As announced, increased the minimal required GLIBC version on Linux to 2.12.

## GAMS System

### GAMS

• Extended the $offEmbeddedCode facility to allow the use of a "projection operator": $offEmbeddedCode {symbol[<[=]embSymbol[.dimX]]}
• Added support for the Object-oriented GAMS Python API in the Embedded Code Facility for Python. The method gams.set() accepts instances of type GamsParameter, GamsSet, etc. as data. Instances of GamsWorkspace and GamsDatabase can be retrieved using the properties gams.ws and gams.db. The property gams.wsWorkingDir can be used to specify the working directory of the created GamsWorkspace.
• Added $libinclude pyEmbMI to conveniently work with Python OO-API GamsModelInstance from embedded code. See embmiex1.gms : Simple Embedded Code ModelInstance example. • Fixed a problem in embedded code when reading an empty scalar symbol. • Fixed a problem when solving a model with solveLink 5, 6, or 7 with communicating scales without scaleOpt active. • The EPS value in the Embedded Code Facility for Python has been changed to 4.94066E-324. This is the same value that is used for EPS in the Object-oriented Python API. • New Put_Utility save: Writes a save file of the current state of execution. • Improvement for the Put_Utility Statement: It is no longer required to define a file and activate it, just to use a put_utility. • New command line option fileStemApFromEnv: Append a string read from an environment variable to the fileStem. • Change to command line option fileStem: Create an immediate error when the value contains a "\" or "/" character to avoid problems later on. • Fixed a bug with execute_unload, which could have caused a set to be exported mistakenly as alias to a different set, if symbol renaming was used. • Fixed a bug which prevented to open more than 65,000 put files. • Solves with scaleOpt=1 using GUSS or instantiations of OO-API GAMSModelInstances resulted in some circumstances in the report of scaled solutions or other erroneous behavior. Hence GAMS will now reset the modelname.scaleOpt attribute to NA before such a solve or GAMSModelInstance generation. As a consequence, models solved via GUSS or as a GAMSModelInstance in the OO-APIs will not be scaled by GAMS. • Solving MCP models with scaleOpt=1 using the solvers AMPL or PYOMO creates an execution error now. In the past this lead to wrong results potentially. ## Solvers ### ANTIGONE, Bonmin, Couenne, Ipopt, SCIP • Updated Intel MKL libraries to version 2018.0 for Linux and Mac OS X and to version 2018.1 on Windows 64-bit. ### CBC • New libraries. ### CONOPT • New libraries 3.17G (Conopt3). • New libraries 4.04 (Conopt4). • Fixed a system error 65666. ### Couenne • New libraries. • If Couenne does not find a feasible solution, but the initial point is feasible, then the initial point is now reported back to GAMS. ### CONVERT • If the filename provided for the jacobian or hessian option contains the string novenames ConvertD will not export the original equation and variable names as set text to elements of sets i and j. Having the original equation and variable names can make the GDX file significantly larger and slow to write and read. • Fixed a problem when trying to write scaled MCP models. ### CPLEX ### Gurobi • Fixed a problem for model with SOS variables but no constraints. ### KESTREL • New options neos_username and neos_user_password can be used in the option file in order to submit authenticated jobs using a NEOS user account. ### LocalSolver • New libraries 7.5 (20171117) for Mac OS X and Windows. • Preprocessing entirely rewritten: size reduction by a factor up to 10 on some huge instances. • Combinatorial models based on booleans and integers: performance improvement and increased ability to prove optimality. • Continuous linear and nonlinear models: performance improvement through the integration of state-of-the-art algorithms. • Note, that to use LocalSolver 7.5, a machine-specific LocalSolver license is now required. See here on how to obtain such a license. Alternatively, it is still possible to use LocalSolver 7.0 by choosing LOCALSOLVER70 instead of LOCALSOLVER as solver. ### Mosek • New libraries 8.1.0.34. ### SBB • Fixed a bug introduced in 24.8 that prevents the infeasSeq option to work. ### SCIP ### SolveEngine • The GAMS time limit (reslim) is now passed to SolveEngine. Added solver option hardtimelimit to specify a time limit that is enforced on the GAMS side. ### SoPlex • New libraries 3.1.0 (876e6e8). • New scaling method that combines geometric and equilibrium scaling. Use new value 6 for option int:scaler to activate this. ### Xpress • New libraries 32.01.05. ## Tools ### CDSP ### GDXXRW • Sometimes, Excel is not ready (e.g. because some data needs to be refreshed, when a worksheet is opened), when a read request is sent by GDXXRW. This could cause an exception. With this release we changed the behavior of GDXXRW to wait a second and resend the request in this case. This basically mimics the behavior of setting RWait to 1000 in case of the mentioned exception. ## Object Oriented APIs ### C++ • Changed the compiler from GCC to Clang on Mac OS X. • Added support for Microsoft Visual Studio 2015 and Microsoft Visual Studio 2017 on Windows 64-bit. • API binaries have been moved to apifiles/C++/lib. On Windows, there are further subdirectories for different compiler versions. • Update of Visual Studio solutions for the examples on Windows. Three different solutions reflecting the supported versions of Microsoft Visual Studio are available (e.g. examples-vs2013.sln, examples-vs2015.sln, examples-vs2017.sln). • The GAMS C++ API tutorial has been reworked. Information about building the C++ API examples via cmake, qmake, and Microsoft Visual Studio has been added. • New example TransportGDX that shows how to import and export GDX files. A description has been added to the tutorial. ### .NET • Changes for GAMSSymbol and GAMSSymbolRecord: Both classes got the IEquatable<T> Interface. As a result the behavior of the Equals function as well as the == and != operators were modified. For both classes Equals and == returns now true, if the internal data reference is the same. Here is an example: GAMSVariable x1 = db.GetVariable("x"); GAMSVariable x2 = db.GetVariable("x"); if(x1 == x2) Console.WriteLine("x1 == x2"); else Console.WriteLine("x1 != x2"); if (x1.Equals(x2)) Console.WriteLine("x1 equals x2"); else Console.WriteLine("x1 does not equal x2"); In previous versions we got this output: x1 != x2 x1 does not equal x2 Now we get: x1 == x2 x1 equals x2 • New example TransportGDX that shows how to import and export GDX files. ### Java • The minimum version requirement of the Java Runtime Environment for using the GAMS Java API is now Java SE 7. • New TransportGDX example to demonstrate how to import and export GDX files. • Removed method GAMSSymbol.compact, deprecated since 24.8.1 (December 2016). • Changed equivalence behavior of GAMSSymbol and GAMSSymbolRecord objects. As a result, two symbol objects with the same internal reference are now equivalent, similar to symbol record objects: • Two symbols are equivalent if and only if they have the same internal reference. • Two symbol records are equivalent if and only if they have the same internal reference. The behavior of operator == remains unchanged. The following exmaple illustrates the new equivalence behavior: GAMSVariable x1 = db.getVariable("x"); GAMSVariable x2 = db.getVariable("x"); GAMSVariable x3 = x1; assertTrue(x1.equals(x2)); // true, previously false assertFalse(x1 == x2); // false, previously false assertTrue(x1.equals(x3)); // true, previously true assertTrue(x1 == x3); // true, previously true ### Python • Added implementation of __eq__() and __ne__() to classes _GamsSymbol and _GamsSymbolRecord and its derived classes. As a result the behavior of the operators == and != has changed. == now returns True, if the internal data reference is the same. The behavior of is remains unchanged. The following example illustrates the change: x1 = db["x"] x2 = db["x"] print(x1 == x2) # now: True, before: False print(x1 is x2) # now: False, before: False • New example transport_gdx.py that shows how to import and export GDX files. A description has been added to the tutorial. ## Expert Level APIs • As announced, the expert-level C++ API files were removed from the distribution. Users should switch to the expert-level C API files. The object-oriented C++ API introduced in the last major release could also be a good alternative for replacement if the user C++ code exchanges data and runs a GAMS model. • The expert-level Java API files now ensure the load of jni libraries in the similar order as those employed by the Object Oriented Java API: first load from java.library.path, if neither specified nor found then from the directory where the API classes are located. ### GDX • Do not allow empty filename as argument for gdxOpenAppend, gdxOpenRead, gdxOpenWrite, and gdxOpenWriteEx. This will create an error right away now. ## Model Libraries ### GAMS Model Library ### GAMS Test Library # 25.0.2 Maintenance release (January 31, 2018) ## 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 Tom Rutherford. ## GAMS System ### GAMS • Bugfix:$offEmbeddedCode does not ignore \$onUNDF anymore.
• Bugfix: Special values (NA, EPS, INF, ...) are correctly communicated from embedded code back to GAMS.
• Bugfix: Took care about a problem, which caused an unexpected execution error for certain uses of Put_Utility.
• Fixed a bug in GMSPython on Mac OS X which prevented the Python interpreter from working. This problem occurred with the DMG installer only.

## Solvers

### ANTIGONE, Bonmin, Couenne, Ipopt, SCIP

• On Linux, removed the MKL libraries that were optimized to certain x86 instruction sets (AVX, etc.) as this resulted in errors when running ANTIGONE or SCIP, probably due to library conflicts.

### CPLEX

• Option Tuning can be repeated in a GAMS/Cplex option file to provide a larger number of model instances for tuning. Before this change the number was restricted by the maxium line length of an option line (256 characters).

### LocalSolver

• New libraries 7.5 (20180119) for Mac OS X and Windows.

## Tools

### CSV2GDX

• Bugfix: Reading sets (no Value or Values option) with the option AutoRow works again.