27 Distribution

# 27.0.0 Beta release (April 09, 2019)

## 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 Arne Drud, Jan-Erik Justkowiak, and Renger van Nieuwkoop.

## Platforms

• As announced, support for Mac OS X 10.11 (El Capitan) has been dropped.
• As announced, support for Windows Vista has been dropped.

## GAMS System

### GAMS

• Embedded Python Code:
• Allow Implicit Set Definition (or: Domain Defining Symbol Declarations) now for symbols loaded from embedded code as well.
• Changed the default behavior of $offEmbeddedCode and endEmbeddedCode: Previously, internal resources got freed and with the next start of an embedded Python code section, the Python environment had to be reinitialized. This is not the case anymore. Also, the interpreter stays "alive" now, which allows to access Python symbols defined in one embedded code block in a following block. The old behavior could still be activated by setting the new command line parameter freeEmbeddedPython to 1. • Changed the optional boolean argument merge to an enumerated option mergeType in the gams.set method in embedded code. This might break existing code. Even if the merge argument was not used, the default behavior at compile time changes. In previous versions the content of an already defined symbol was quietly replaced while GAMS now triggers a compilation error 194 Symbol redefined. • Fixed a bug in embedded code when setting pySetup to 0. Additional steps are required on Linux and Mac OS X to use an alternative Python installation. Details can be found in section Porting to a Different Version of Python. • A GAMSDatabase created in embedded code via gams.ws.add_database(source_database = gams.db) had all the symbols but no data. This has been fixed. • gams.db.export(file_name) in embedded code resulted in an error for scalar symbols without data. This has been fixed. • Fixed a problem with embeddedCode/continueEmbeddedCode after an assignment that was not finished with a ; like in this example: Set i /1*3/; Parameter xl(i); xl(i) = uniform(0.5,1) embeddedCode Python: print(list(gams.get('xl'))) endEmbeddedCode Display xl;  This leads to an error now. In the past, the assignment in line 3 was executed after the embeddedCode block leading to unexpected results. • Extended the GAMS log to print out the non-default Command Line Parameters. • Improved performance of execute_unload when option gdxUELs is set to full. • Improve performance of model generation when multi-dimensional variables are used, where the controlling set for dimension n>1 is big, e.g.: Set tiny /1*2/, huge /1*100000/ ; Variable x(i,j); Equation e; ... e.. sum((tiny,huge), x(tiny,huge)) =e= 42; ...  • Fixed a potential crash when more than 250 million labels are used in one model. • Fixed a bug with Implicit Set Definition: When used with$onMulti to merge data into a non-empty set, it could have happened that an element was added twice in some cases.

### Documentation

• Added documentation for the put_utility keyword assignText (which has been in the system since 24.6).

### GDX library

• Improve the behavior of GDX when handling large data sets (e.g. writing a set with 210 million elements, each having its own lengthy set text). Performance is better - less memory and less time are required. The limits on the amount of data that can be handled have been extended somewhat, and when these limits are reached this is handled more gracefully than previously - with a helpful message instead of a segmentation fault or erroneous results.
• Introduce consistent handling of the empty string vis-a-vis set text for UELs. This is only relevant for user applications that use the low-level GDX API in an unsupported way.
• Previously the proper usage was to avoid adding the empty string to the list of set text strings. Applications that broke this rule would produce a GDX file with an abnormal internal structure. This structure may lead to jumbled set text.
• With the updated GDX, it is not necessary to avoid adding an empty string to the set text list.
• Applications holding to previous proper usage (i.e. those that avoid adding the empty string to the list of set text strings) will produce good GDX files regardless of GAMS version, and these files will behave as expected regardless of the GAMS version in which they are used.

## Solvers

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

• Updated Intel MKL libraries to version 2019.3 on Linux and Mac OS X and to 2018.4 on Windows 64-bit.

### BARON

• New libraries 19.3.24.
• Improved automatic differentiator that is up to two orders of magnitude faster for large-scale problems.
• Improved data structures and cut pool manager to reduce memory footprint and time requirements for large-scale problems.
• Improvements in various components, including parallel threads and BARON's IPOPT interface for Mac OS X.
• New tree management algorithms.
• Improved range reduction and probing algorithms.
• Using Intel MKL for faster BLAS and LAPACK routines.
• Ipopt now uses METIS for linear system partitioning.
• New option FirstLoc to terminate BARON as soon as a local optimum is found.
• New option ClockType to determine whether wall-clock or CPU time should be reported back to GAMS.

### BDMLP and SBB

• The definition of SOS1 and SOS2 variables has changed. BDMLP and SBB used to count the number of elements in a set that are off the lower bound. BDMLP and SBB were the only two solvers in the GAMS solver portfolio with this definition. All other solvers counted elements that are off zero. The definition of SOS1 and SOS2 variables in BDMLP and SBB has been changed to the off zero definition to make their behavior more consistent with other GAMS solvers.

### CBC

• New libraries 2.10.
• Improved handling of SOS, starting point, and symmetries.
• Improved performance of primal heuristics regarding the handling of implicit integer variables.
• Mini-B&B is now disabled when solving with multiple threads.

### CONOPT 4

• New library 4.11 with improvements in reliability and efficiency for large and difficult models.
• New option Tol_Opt_LinF: Optimality tolerance when infeasible in Linear Feasibility Model.

### JAMS

• Experimental indexed EMP syntax has been updated: It can now take all the equilibrium related keywords (max, min, vi, qvi, dualvar, visol, and implicit) and shared constraints and variables.

### LocalSolver

• New libraries 8.5 (20190130).
• Strong lower bounds based on nonlinear relaxation techniques coupled with innovative branch-and-bound heuristics.

### Mosek

• New libraries 8.1.0.80.

### ODHCPLEX

• New libraries 4.23.

## Tools

### GAMS Studio

• New version 0.11.0.
• Stability and performance improvements.
• Introduced a toolbar to replace the "Execution and Option Parameter Editor".
• Editor
• Improved the syntax highlighting
• Allow to open huge read-only (lst) files without significant memory requirement
• Added bookmark support
• Added Ctrl+Up/Ctrl+Down as shortcut for line wise scrolling without moving the text cursor
• Added Ctrl+Home/Ctrl+End as shortcut for page wise scrolling without moving the text cursor
• Added warning pop-up when trying to open a >50 Mb file in edit mode
• Various
• Added Ctrl+Alt+L to extend/collapse the extended option editor
Note
It is not recommended to use the Dark Mode of MacOS Mojave with this version of GAMS Studio. It is generally supported but Studio is not optimized to work with it yet. So it is suggested to disable this mode when using GAMS Studio.

### GDXDUMP

• New command line option setText to show the list of set text stored in a GDX file.
• Option symbols now lists the cardinality of a symbol in the column Records.

### GDXXRW

• Fixed exit behavior if there were some duplicate records found when reading a symbol but less than specified by maxDupeErrors: If there are no other errors the exit code is 0 now (it was 16 in the past)

### GMSZIP/GMSUNZIP

• Replaced the 32bit binaries gmszip and gmsunzip by more recent 64bit versions on Mac OS X.

### MPS2GMS

• Turn some errors that can be safely ignored when reading an MPS file into warnings.

## Object Oriented APIs

### Python

• Fixed a bug with default variable levels being 1.0 instead of 0.0.