24.0 Distribution

# 24.0.1 Major release (December 24, 2012)

## Acknowledgments

We would like to thank all of our users who have reported problems and made suggestions for improving this release.

## Platforms

• Dropped Mac OS X 32bit build
• Mac OS X 64bit build now on Lion (10.7)

## GAMS System

### APIs

#### Documentation

Moved existing documentation about the APIs to <Path/To/GAMS>/docs/API. Also added new documentation there. In the GAMSIDE this documentation can be accessed at Help → Docs → API.

#### .NET

Add function Interrupt to GAMSJob: Sends interrupt signal to running GAMSJob

#### Java

This release contains a beta version of the object-oriented Java API that can be used to control GAMS from a Java program. It allows the seamless integration of GAMS into Java by providing appropriate classes for the interaction with GAMS. GAMS Java API objects allow a convenient way to exchange input data and model results with in-memory representation of data (GAMSDatabase), and to create and run GAMS models (GAMSJob) that can be customized by GAMS options (GAMSOptions). Furthermore, they introduce a way to solve a sequence of closely related model instances in the more efficient way (GAMSModelInstance).

• A Java program that uses object-oriented Java API requires at least Java SE 5 to compile and run.
• All classes are distributed within one single jar file GAMSJavaAPI.jar with a namespace com.gams.api, located under the <Path/To/GAMS>/apifiles/Java/api/ directory.
• Java program examples are distributed with a namespace com.gams.examples, located under the <Path/To/GAMS>/apifiles/Java/ directory.
• Installation and detailed documents can be found in <Path/To/GAMS>/apifiles/readme.txt and <Path/To/GAMS>/docs/API/GAMS_java.pdf.
• Javadoc for GAMSJavaAPI.jar can be found under the <Path/To/GAMS>/apifiles/java/api/javadoc directory.

#### Python

• In the API to the option object the signature of the function optGetStrStr has changed from: value = optGetStrStr(optHandle, "GDX", dummyString) to value = optGetStrStr(optHandle, "GDX")
• The compiled Python libraries are built with Python 2.7 now.
• This release contains a beta version of the object-oriented Python API that can be used to control GAMS from within Python 2.7. It allows the seamless integration of GAMS into Python by providing appropriate classes for the interaction with GAMS. The GamsDatabase class for in-memory representation of data can be used for convenient exchange of input data and model results. Models written in GAMS can be run with the GamsJob class and by using the GamsModelInstance class a sequence of closely related model instances can be solved in an efficient way. To use this API one has to perform one of the following steps:

Installing the API and the required low level APIs:

cd <Path/To/GAMS>/apifiles/Python/api && python setup.py install && cd ..

Using the API without installing:

export PYTHONPATH=<Path/To/GAMS>/apifiles/Python/api  (Unix)
set PYTHONPATH=<Path\To\GAMS>\apifiles\Python\api  (Windows)

Running transport1.py example:

### GAMS IDE

• The IDE has now an integrated Text differ to compare two text files; see File | Diff Textfiles

### GDXRRW

• GDXRRW is a suite of utilities to import/export data between GAMS and R and to call GAMS conveniently from R. The software gives R users the ability to use all the optimization capabilities of GAMS, and allows visualization and other operations on GAMS data directly within R.
• GDXRRW is unique among the GDX interface utilities in that it is an R extension made available as an R package. As such, it is run as part of an R session or script, not as part of a GAMS run, and it follows the usual R package conventions.
• Source and binary packages for GDXRRW are part of the GAMS distribution. For the latest versions, along with a FAQ list, some hints and tips on common problems and solutions, and other helpful content, use the GDXRRW Wiki

## Solvers

### BARON

• New libs 11.8.0
• BARON uses an improved link to Clp
• BARON uses latest SNOPT 7.2-12
• BARON uses latest IPOPT 3.10.3
• Memory requirements have been significantly reduced

### Bonmin

• Faster reaction to user interrupt during solve of initial NLP relaxation.
• Changed default setting for parameters variable_selection and milp_strategy to strong-branching and solve_to_optimality, respectively.
• Renamed miptrace options to solvetrace.

### CBC

• New library 2.8
• A new primal heuristic "Proximity Search" (proposed by Fischetti and Monaci, 2012) has been added. The idea is to define a sub-MIP without additional constraints but with a modified objective function intended to attract the search in the proximity of the incumbent. The heuristic is off by default and can be enabled by setting proximitysearch 1 in a GAMS/Cbc options file.
• Parallel branch-and-bound search (multithreading) is now also possible under Windows by using POSIX threads for Win32.
• New option dumpsolutions to output alternative solutions to gdx files.
• The miptrace options have been renamed to solvetrace and activating them does not affect the solving process anymore.

### ConvertD

• Added option localsolver to convert GAMS models into LocalSolver language. This is still an experimental feature, i.e., it may not always be possible to process the created .lsp files with LocalSolver. A major limitation is the restriction to binary and bounded integer variables in LocalSolver. To allow for continuous variables that can be defined via other variables, ConvertD can read information about defined variables from a ConvertD options file. In such an option file, a line defvar x1 e1 denotes that the continuous variable x1 is defined via equation e1. Equation e1 then needs to be an equality constraint which contains x1 in a linear expression. Analogously, a statement defvar y(n,i,j) e(n,i,j) indicates that variable y(n,i,j) is defined via equation e(n,i,j) for all (n,i,j).

### Couenne

• Couenne is now linked against the nauty library, which enables symmetry recognition for MINLPs and their utilization for orbital branching.
• The miptrace options have been renamed to solvetrace.

### Cplex/CplexD

• New library 12.5
• The number of threads for CPLEX to use can now be set to any positive integer number, even if this number exceeds the number of cores on the machine. The default behavior of GAMS/CPLEX with respect to the number of threads and cores remains unchanged. That is, by default, GAMS/CPLEX continues to run with a single thread. Setting THREADS to 0, result in setting the threads to the number of cores.
• New parameters:
• ProbeDetTime: Limits the amount of time (expressed in deterministic ticks) spent probing
• PolishAfterDetTime: Sets the amount of time expressed in deterministic ticks to spend during a normal mixed integer optimization after which CPLEX starts to polish a feasible solution
• TuningDetTiLim: Sets a time limit in deterministic ticks per model and per test set (that is, suite of models) applicable in tuning
• RandomSeed: Sets the random seed differently for diversity of solutions.
• GAMS/Cplex prints the time spend in Cplex optimization calls. The time is printed in elapsed seconds and elapsed deterministic time in ticks.
• GAMS/CplexD returns proper duals for QCP models

### CONOPT

• new library 3.15H

### GloMIQO

• new library GloMIQO 2.1:
• improved reformulation strategies
• better recognition of special mathematical structure allowing for dominant polyhedral cuts
• additional strategies for deterministically inferring missing variable bounds
• new option cplex_optfile specifies a GAMS/CPLEX options file that will be applied to every LP and MILP subsolve
• new option dumpsolutions to output alternative solutions to gdx files

### GUROBI

• New library 5.0.2

### IPOPT and IPOPTH, BONMIN and BONMINH

• IPOPT is now available in two variations. The Open Source IPOPT is part of the Base Module. IPOPTH uses higher performance (but not Open Source) linear algebra routines (HSL) and is separately priced.
• Analogously, BONMIN is part of the Base Module and uses IPOPT. BONMINH requires a license for IPOPTH.
• For Couenne and SCIP, IPOPTH is used to solve NLP subproblems if a corresponding license is available, otherwise IPOPT is used.

### LogMIP

• Fixed a bug when reformulating disjunctions with terms that are indicated by a negated variable (disjunction not y1 e1 else ...).

### MINOS

• Maintenance updates, primarily for memory allocation issues.

### MOSEK

• New libs Mosek 6 Rev 148.

### Optimization Services

• New library 2.6

### OsiXpress

• OsiXpress is now also available on Mac OS X.

### SCIP

• New library 3.0.1
• New presolvers have been added, among them one that recognizes and utilizes block structures in an instance.
• New primal heuristics NLP diving (for MINLPs) and Zero-Objective ("Hail Mary") have been added.
• New propagators for optimization-based bound tightening for MINLPs have been added.
• The variable bounds propagator has been extended to cliques and implications.
• Memory limits are now better handled, especially for larger problems.
• The probing algorithm has been revised and should give better performance.
• The performance for pseudo-boolean optimization problems has been improved.
• The complete release notes can be found here and a list of all changes (including changes to parameters and their default values) can be found here
• The GAMS workspace option can now be used to set the SCIP memory limit ('limits/memory' in optionfile).
• The gams/miptrace options have been renamed to gams/solvetrace.
• The gams/printstatistics option has been renamed to display/statistics.
• The gams/interactive option is now a string option that takes commands for the SCIP shell as arguments. If the commands do not end with a 'quit' command, the SCIP shell still open for user interaction. Note, that in order to be able to input commands interactively on Windows, you have to set the GAMS option interactivesolver to 1 (see above).
• The LP solver in SCIP can now be changed by the lp/solver option. Supported values are "cplex", "soplex", and "clp". The default LP solver is now CPLEX, if a CPLEX license is available, and SoPlex otherwise.

### SNOPT

• New library 7.2-12 (maintenance release)
• Completely revamped linking code
• The GAMS/SNOPT link is now thread-safe, allowing it to be used in multi-threaded applications built with the high-level GAMS APIs mentioned above.
• Updated memory allocation scheme to increase the amount of memory that can be allocated and used for problem solution, and to improve reporting when limits are reached.
• Miscellaneous bug fixes and usability improvements.

### SoPlex

• New library 1.7.1
• Performance improvements in pricing algorithms
• Many bugfixes and improvements in numerical stability and infeasibility detection
• Complete release notes here.

### Sulum

• GAMS 24.0 introduces the new LP/MIP Solver Sulum from Sulum Optimization ApS.
• While Sulum currently does not compete with the high-end LP/MIP solvers, Sulum offers a good cost-benefit ratio for LP and MIP solution technology.
• GAMS 24.0.1 features Sulum LP only, but as soon as Sulum Optimization releases their library including the MIP optimizer, a maintenance release will feature the full LP/MIP capabilities of Sulum.

### Xpress

• New library Xpress Optimizer 23.01.06 (maintenance release).

## Model Libraries

### GAMS EMP Library

• simplevi4 (93): Equilbrium model consisting of two VIs, one of which has a non-trivial constraint set
• transsp (94): A Stochastic Transportation Problem
• oa (95): Outer Approximation for Convex Minimization Problem with Binary Variables

### GAMS Model Library

• powerset (381): PowerSetLeft and PowerSetRight examples
• linearne (382): Linearization techniques for extremal-Nash equilibria
• saras (383): South African Regionalized Farm-level Resource Use & Output Supply Response (SARAS) model
• epscmmip (384): Improved version of eps-Constraint Method for Multiobjective Optimization
• bidpwl (385): Bid Evaluation with Piecewise Linear Functions
• trnspwlx (386): A Transportation Problem with Piecewise Linear Functions

### GAMS Test Library

• testexeq (562): Test external equations
• ex1 (563): External Function - Example 1
• ex1x (564): External Function - Example 1x
• ex2 (565): External Function - Example 2
• ex3 (566): External Function - Example 3
• ex4 (567): External Function - Example 4
• ex4x (568): External Function - Example 4x
• ex5 (569): External Function - Example 5
• er1 (570): External Function - Error Example 1
• er2 (571): External Function - Error Example 2
• er3 (572): External Function - Error Example 3
• exmcp1 (573): External Function - Example MCP 1
• exmcp2 (574): External Function - Example MCP 2
• exmcp3 (575): External Function - Example MCP 3
• exmcp4 (576): Hansen/Koopmans: External Function - Example MCP 4
• exmcp5 (577): Intermixed External Rows: External Function - Example MCP 5
• complink (578): Compile and link external equation libraries
• lindgl02 (579): Check that Lindo(Global) works with SOS variables
• qcp10 (580): Test for QCP correctness
• empdisj6 (581): Test disjunctions with negated equality equations
• gdx9 (582): Test unloading and loading a GDX file with variable attributes
• empdisj7 (583): Test disjunctions with negated variables
• traceuc (584): Test if we can get the user and computer name in a trace file
• asynntrp (585): Start GAMS job asynchronously and send interrupt signal to it

## Tools

### SCENRED2

• fixed visualization output to work with recent versions of gnuplot

## Solver/Platform Availability Matrix

Solver/Platform availability - 24.0    December 24, 2012
x86
MS Windows
x86_64
MS Windows
x86
Linux
x86_64
Linux
Sun Sparc
SOLARIS
Sun Sparc64
SOLARIS
Sun Intel
SOLARIS
IBM RS-6000
AIX 5.3
Mac x86_64
Darwin
ALPHAECP
BARON 11.8
BDMLP
COIN-OR
CONOPT 3
CPLEX 12.5
DECIS 32bit
DICOPT
GLOMIQO 2.1
GUROBI 5.1 5.0
KNITRO 8.0
LINDO 7.0
LINDOGLOBAL 7.0 6.0 6.0
LGO
MILES
MINOS
MOSEK 6
MPSGE
MSNLP 32bit
NLPEC
OQNLP 32bit 32bit
PATH
SBB
SCIP 3.0
SNOPT
SOPLEX 1.7
SULUM 1.0
XA
XPRESS 23.01

# 24.0.2 Maintenance release (February 14, 2013)

## 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, Michael Ferris, Erwin Kalvelagen, Aida Khajavirad, Ignacio Perez, Nick Sahinidis, and Dimitri Tomanos.

## Platforms

• removed dependency on GLIBC 2.7 in Linux systems

## GAMS System

### APIs

#### Object Oriented APIs

• introduced new function CopySymbol (see individual languages for precise name)
• label and symbol lookup is now case insensitve
• fixed handling of infinite bounds for GAMSModifiers
##### .NET
• added new function GAMSSymbol.CopySymbol
• added new examples in Visual C++ and VB.NET
##### Java
• added new function GAMSSymbol.copySymbol
##### Python
• added new function _GamsSymbol.copy_symbol
• on Windows and Linux, compiled libraries for both Python 2.6 and Python 2.7 are distributed
while the Python 2.7 version can be found in <GAMSDir>\apifiles\Python\api as before, the Python 2.6 version is in <GAMSDir>\apifiles\Python\api_26

#### GDX

• fixed a casing problems with the function gdxSymbolGet/SetDomainX for client languages C++, C#, Fortran, Java, Python, VBA, VB.NET

#### GMO

• increased API version number to 11 (was forgotten in 24.0.1)

### GAMS

• the reason for ignoring an option in the GAMS options file reader is now printed
• fix a bug when reading scalars from a compressed GDX file

### GAMS IDE

• changed the interface for the Text Differ to look like the GDXDiff interface
• moved menu for Text Diff under Utilities menu

### Utilities

#### GDXXRW

• gdxxrw works now with Excel Binary Workbook files (file extension .xlsb)

## Solvers

### BARON

• new library 11.9.1
• fixed handling of workspace and workfactor options

### BONMIN, CBC, Couenne, GloMIQO, SCIP

• fixed too small value in 'seconds' column in solvetrace file
• improved resolution of solvetrace file for Cbc and SCIP

### CONOPT

• new library 3.15I
• major update of the CONOPT solver manual (pdf file only)
• revised definition of workspace and workfactor options: workfactor is now ignored if workspace is defined
• minimum memory allocation adjusted for some smaller machines
• removed no longer used options GCFORM, GCPTB1, GCPTB2

### GloMIQO

• fixed bug in reporting of dual bound when optca tolerance is larger in magnitude than optcr

### GUROBI

• new library 5.1
• new options
• ImproveStartNodes: A new option for transitioning from tree exploration to solution improvement in MIP
• Seed: Modifies the random number seed. This acts as a minor perturbation to the solver, which typically leads to a different solution path. This can be useful for experimentation (e.g., for testing the robustness of a particular set of parameter changes)
• Gurobi dropped support for Linux 32bit, so GAMS/Gurobi uses Gurobi library 5.0.2 on Linux 32bit

### MOSEK

• write clearer text error message to log and listing file

### MPSGE

• fixed memory issues when both workspace and workfactor are set and when estimates are too high

### MSNLP / OQNLP

• fixed problems with LSGRG on instances with more than 10000 variables or more than 10000 equations

### SCIP

• new SCIP library 3.0 #0134f8c
• fixed bug where the reported objective value did not equal the level value of the objective variable
• improved cleanup of SCIP solutions that are not feasible in the original problem; the model status is now adjusted accordingly

### XPRESS

• fixed reporting of resused and iterused attributes for infeasible and unsolved models

## Tools

### ConvertD

• in LocalSolver output, long linear parts of equations are now printed by using the sum() operator
• added solution output option and functionality for LocalSolver (lspsol)
• fixed bug when using objvar option in conversion to GAMS format
• fixed bug with variable indices when writing nonlinear expressions

### EXAMINER

• fixed check of complementarity slackness for discrete variables in MIQCPs
• added a consistency check on model attributes (currently only objval)

### JAMS

• fixed many problems with objective functions in equilibrium followers, especially those arising when variables were skipped or when the objective var was reformulated out
• fixed problems with VI models and vars getting squeezed out that should not have been