24.3 Distribution

# 24.3.1 Major release (July 31, 2014)

## 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 Michael Bond, Sebastian Bothor, Jared Erickson, Michael Ferris, Josef Kallrath, Bastian Niebel, Matt Preston, and Tom Rutherford.

## Platforms

• The Linux 32bit and Solaris 32bit distributions have been dropped (as announced).
• Support for Windows XP may be dropped with some future GAMS version. As several of our solver vendors have already dropped support for Windows XP, some components of a GAMS system may cease to work under Windows XP in the future. If you notice that a 64bit GAMS system is not working on your Windows XP 64bit machine, please let us know.

## GAMS System

### GAMS

• Introduced new keyword Singleton Set: A Singleton Set in GAMS is a special Set that has at most one element (zero elements are allowed as well). Singleton Sets can be especially useful in assignment statements since they don't need to be controlled by a controlling index nor an indexed operator, e.g.:
Set           s         / s1*s3 /;
Singleton Set single(s) / s2    /;
Parameter p(s);
Scalar    x;

p(s) = ord(s);
x = p(single);
NOTE: Assigning membership to Singleton Sets is different than to usual sets. Since Singleton Sets can never have more than one element, any assignment to a Singleton Set first clears or empties the set, so no explicit clear is necessary. This is illustrated in the following example:
Set            i     Static Set            / a, b, c /
ii(i) Dynamic Set           /    b    /;
Singleton Set  si(i) Dynamic Singleton Set /    b    /;

ii('c') = yes;
si('c') = yes;

Display ii, si;

Here is the output from the display statement in the listing file:
----      8 SET ii  Dynamic Set
b,    c

----      8 SET si  Dynamic Singleton Set
c

• The behavior of assignments to Singleton Sets can be influenced by the new option strictSingleton [0/1]: This option affects the behavior of a membership assignment to a Singleton Set. With strictSingleton = 0 GAMS does not complain about an assignment with more than one element on the right hand side but takes the first one. With strictSingleton = 1 (default), such an assignment raises an error. This option be set via an option statement and via a command line option.
• Similarly, data statements for Singleton Sets can be influenced by the new dollar control options $onStrictSingleton/$offStrictSingleton: With $offStrictSingleton GAMS does not complain about a data statement for a Singleton Set that has more than one element but takes the first one. With $onStrictSingleton (default), such an assignment raises an error.
• Introduced so-called obfuscated save files, which are save files where symbol and UEL names have been obfuscated. The new options saveobfuscate (so) and xsaveobfuscate (xso) can be used to generate uncompressed and compressed, respectively, obfuscated save files. Additionally, a new option restartNamed (rn) has been added which can be used to bring back the original names when restarting from an obfuscated save file. The intended use is the following.

• Compile (only) a GAMS model into a named and an obfuscated save file:
$call gams trnsport a=c s=0named saveobfuscate=0anon  • Move the obfuscated save file to a non-secure machine and execute it there: $echo * Empty > empty.gms
$call gams empty r=0anon s=1anon  • Bring the new (still obfuscated) save file with the results back to the safe machine and do a continued compilation with reporting and export. The continued compilation restarts from the obfuscated save file with all the results, etc., but gets a second save file with proper names through option restartNamed: $echo execute_unload 'supply', supply.m; > unload.gms
$call gams unload r=1anon restartNamed=0named  In this execution, everything is taken from the obfuscated restart file, except for the symbol and UEL names and the listing file title and subtitle, which are taken from the file specified via restartNamed. • Allow to load the universe of labels from a GDX file into a set at run-time: execute_load 'someFile', someSet=*;  Note, that only labels known to the GAMS program will be loaded. • Fixed a bug that caused wrong results when evaluating prod (or smin/smax) over an empty set inside sum like in the following example: sets r / 1 / s / 1, 2 / rs(r,s) / 1.1 / subrs(r,s) / 1.2 /; scalar z1; z1 = sum(rs, prod(subrs(rs), 2)); display z1;  • Fixed a bug in calling error logging routine for extrinsic functions from within solvers. ### Function libraries • The extrinsic function library cppcclib has been expanded to include functions for the PDF and CDF of the trivariate normal distribution. Additionally, documentation for cppcclib has been added to Appendix J of the GAMS User's Guide and the relevant testlib models cpplib00 thru cpplib05 have been added or updated. ## Solvers ### ANTIGONE, Bonmin, Cbc, Couenne, SCIP, Sulum • Solvetrace files now include the GAMS input name (usually GAMS model name with .gms extension stripped) in the header line. ### BARON • New libraries 14.0.2 • Significant advances in the handling of integer programs. In addition to several classes of integer cutting planes, calls to MIP solvers and hybrid LP/MIP/NLP relaxations for MINLPs have been added. • Complete rewrite of the interfaces to LP solvers. • Improvements in probing routines. • More robust checks for the validity of the solution of LP/NLP subsolvers. • Introduced interfaces to COIN-OR/OSI and CBC 2.8.9. • Increased numerical robustness for numerically challenging problems. • New range reduction techniques. • Systematic treatment of infeasible problems. With the CompIIS option, which by default is 0, the computation of an Irreducible Inconsistent Set (IIS) can be requested. Five different algorithms are available, with corresponding values of CompIIS equal to 1, ..., 5. Algorithm 1 is a fast heuristic, while algorithms 2 through 5 are more time consuming exact algorithms. If an IIS is found, it is reported in the GAMS listing file. BARON does not consider bounds on binary variables to be part of the IIS. For general integers, the option IISint can be be used to signal that general integers should be considered as potential members of the IIS, i.e, integrality constraints are questioned. • Fixed handling of BARON termination status when activating DeltaTerm option. ### BONMIN • Dropped MIP capability (use CBC instead). ### CONOPT • New libraries 3.16B. • The new option Lsusdf was added. If turned on (the default) CONOPT's preprocessor will look for definitional constraints which are constraints of the form x = f(y) where the bounds on x are wider than the range of the function f, given the bounds on y. CONOPT will search for and select a maximal set of independent definitional constraints. The dependent variable in a definitional constraints will be selected for the initial basis and CONOPT will try to use the definition to initialize x. There are two other options associated with this procedure: If Lsuqdf is enabled (default), then only unique definitional constraints are selected. If it is disabled, then option Lfusdf specifies a limit (default 2) on the number of candidates a definitional constraint can have. • The option Lsflsh – flush the buffer, has now been implemented and is automatically turned on if there is a systems error. • The lower bound on option Rtipvr changed from 1.e-3 to 1.e-10. ### Convert • The AMPL writer supports special ordered sets, semicontinuous variables, and semiinteger variables now. • Row names in .lp and .mps files now start with 'e' instead of 'c', so they match the names written by the dict option. ### CPLEX • New libraries 12.6.0.1. ### CPLEX, SCIP, XPRESS • Fixed handling of indicator constraints when specified with explicit labels. ### DE • New option VaRBigM to control the Big M for a Value at Risk reformulation. ### EMPSP • New keywords VaRUp (=VaR) and VaRLo: These keywords can be used to optimize the Value at Risk for a certain confidence level. The syntax is similar to the one from cVaRUp (=cVaR) and cVaRLo: VaR [rv var] scalar  More information can be found here. • Changed the order of the parameters for the triangular distribution from randvar <name> triangular <low> <high> <mid>  to randvar <name> triangular <low> <mid> <high>  ### Examiner2 • Fixed a bug in processing special ordered sets. ### GUSS/Scenario Solver • GUSS/Scenario solver can now be combined with the GAMS Grid Facility (see example GUSSGRID in the GAMS Model Library). • New option RestartType to determines restart point for the scenarios: • 0: Restart from last solution (default) • 1: Restart from solution of base case • 2: Restart from input point • New option SolveEmpty (default 0) to limit the number of empty scenarios (no scenario data) that are being solved. When the limit is reached, further empty scenarios will be skipped. Skipped scenarios will be reported to the log and listing file. ### Ipopt • New libraries. ### Knitro • As Ziena Optimization has dropped support for Knitro on Solaris (x86) a while ago, we plan to drop GAMS/Knitro on Solaris with the next release. ### Lindo/LindoGlobal • New libraries 8.0.550. • LindoGlobal is no longer available for Sparc Solaris (as announced). ### Mosek • New libraries 7.0.0.121 (Linux, Mac OS X) and 7.0.0.123 (Windows). ### OQNLP • OQNLP is no longer available for Linux (as announced). ### OS • GAMS to OSiL conversion now creates more compact instances, especially for quadratic equations and long sums or products in general nonlinear expressions. ### SCIP • New libraries 3.1 #695c979. • Added new primal heuristics "random rounding", "proximity", and "dual value", new branching rule "cloud branching", and new node selectors "breadthfirst" and "uct". • Added support for strong branching with domain propagation in full strong and reliability pseudo cost branching. • Improved numerical stability (now taking the rank of cuts into account; more checks on LP solution; disabled scaling in feasibility check of nonlinear constraints). • Many improvements in presolving. • Strong branching LP solutions are now checked for feasibility. • Changed or removed parameters: • branching/relpscost/maxlookahead: default changed from 9 to 8. • branching/relpscost/maxreliable: default changed from 8 to 5. • constraints/bivariate/scaling: default changed from TRUE to 'o' (type changed to character). • constraints/quadratic/scaling: default changed from TRUE to 'o' (type changed to character). • constraints/soc/scaling: default changed from TRUE to 'o' (type changed to character). • constraints/varbound/maxlpcoef: default changed from 1E6 to 1E9. • heuristics/crossover/minnodes: default changed from 500 to 50. • heuristics/dins/minnodes: default changed from 500 to 50. • heuristics/feaspump/objfactor: default changed from 1 to 0.1. • heuristics/rens/minnodes: default changed from 500 to 50. • heuristics/rins/freq: default changed from -1 to 25. • heuristics/rins/freqofs: default changed from 5 to 0. • heuristics/rins/minfixingrate: default changed from 0 to 0.3. • heuristics/rins/minnodes: default changed from 500 to 50. • heuristics/shiftandpropagate/sortkey: default changed from 'u' to 'v'. • lp/checkfeas: replaced by new parameters lp/checkdualfeas and lp/checkprimfeas. • numerics/dualfeastol: default changed from 1E-6 to 1E-7. • presolving/dualfix/*: replaced by propagating/dualfix/* • propagating/pseudoobj/presoldelay: default changed from TRUE to FALSE. • propagating/pseudoobj/timingmask: default changed from 5 to 7. • propagating/redcost/timingmask: default changed from 2 to 6. • separating/cgmip/objweighsize: renamed to separating/cgmip/objweightsize and default changed from FALSE to TRUE. • separating/minefficacyroot: default changed from 0.01 to 0.001. • separating/closecuts/relintnormtype: removed ### SoPlex ### XPRESS • New libraries 26.01.08. ## Tools ### GDX2SQLITE • GDX2SQLITE is a new tool to dump the complete contents of a GAMS GDX file into a SQLite database file. ### GDXDUMP • New option SymbolsAsSet to write the symbol table for a set as data. ### GDXMRW • New utilities irgdx and iwgdx for exchanging indexed GDX data with Matlab. ### GDXRENAME • New utility to rename the same unique elements in a GDX file using a mapping given by a second GDX file. ### GDXXRW • New option to allow the use of R1C1 notation to specify a cell or a range. • Reading a set using the option Values=string now skips empty cells. ## Expert Level APIs ### GMO • Removed previously deprecated function gmoDirtyExtractDefVar. • Added a number of functions to access information from an EMP info file, to compute the optimality gap, to access extrinsic function libraries, and to get the name of the GAMS input file. ## Object Oriented APIs • New example transport14. • New method GAMSSymbolRecord.Key(int index) (Java: GAMSSymbolRecord.getKey, Python: _GamsSymbolRecord.key(int index)) to retrieve the key of GAMSSymbolRecord (Python: _GamsSymbolRecord) for a given positional index. • GAMSSymbol.CopySymbol now works for the universe of a GAMSDatabase (GAMSDatabase.GetSet("*")). When copying into the Universe, a merge will be performed. • Real domains are now registered when exporting a GAMSDatabase to GDX (so far, only relaxed domains were registered). • GAMSJob.Run (Python: GamsJob.run) now creates OutDB (Python: out_db) also if it raises a GAMSExceptionExecution. • GamsModelInstance.Solve (Java/Python: GamsModelInstance.solve) now also works for solvers which require a subsolver, e.g., DICOPT. ### .NET • Fixed default value for systemDirectory argument in GAMSWorkspace constructor when using MONO: If no value is given, first the PATH and then the (DY)LD_LIBRARY_PATH is checked for a valid GAMS system directory. ### Java • It is no longer necessary to specify -Djava.library.path when running a program. If java.library.path is specified, the shared libraries will be loaded from java.library.path. Otherwise, the shared libraries will be loaded from the class path that contains GAMSJavaAPI.jar. • It is no longer necessary to set up environment variables (PATH, (DY)LD_LIBRARY_PATH) before running a program to find the GAMS system directory, as it can now be specified during run time. • In the GAMSWorkspace default constructor, the default setting for finding the GAMS system directory from environment variables in the following order (depends on the target platform) are applied: • Windows: first from PATH environment variable. If not found, then from the Windows registry gams.location, • Mac OS X: first from PATH environment variable. If not found, then from DYLD_LIBRARY_PATH, • other Unix: from PATH environment variable. If not found, then from LD_LIBRARY_PATH. • In the non-default GAMSWorkspace constructor, the following rules are applied: • In case a user specifies a system directory, the API will verify the directory and will not search for GAMS system directory from an environment variable, even when the directory is invalid. • In case the specified system directory is null or a user does not specify a system directory, the API will apply the default setting from above. • A memory leak in GAMSDatabaseIterator has been closed. • Issues when using a non-standard locale (LANG environment variable) have been fixed. • All deprecated classes and methods since 24.1 have been removed. ### Python • New behavior on determining a system directory automatically when a workspace is created. • Linux: If no system directory is specified in the GamsWorkspace constructor, check PATH first. If no system directory was found, check LD_LIBRARY_PATH. • Mac OS X: If no system directory is specified in the GamsWorkspace constructor, check PATH first. If no system directory was found, check DYLD_LIBRARY_PATH. • Windows: If no system directory is specified in the GamsWorkspace constructor, check the Windows registry. ## Model Libraries ### GAMS Data Library ### GAMS Model Library ### GAMS Test Library Solver/Platform availability - 24.3 x86 32bit MS Windows x86 64bit MS Windows x86 64bit Linux x86 64bit Mac OS X x86 64bit SOLARIS Sparc 64bit SOLARIS IBM Power 64bit AIX ALPHAECP ANTIGONE 1.1 BARON 14.0 BDMLP BONMIN 1.7 CBC 2.8 COUENNE 0.4 CONOPT 3 CPLEX 12.6 DECIS DICOPT GLOMIQO 2.3 GUROBI 5.6 IPOPT 3.11 KNITRO 9.0 8.1 LINDO 8.0 LINDOGLOBAL 8.0 LGO MILES MINOS MOSEK 7 MPSGE MSNLP NLPEC OQNLP 32bit PATH SBB SCIP 3.1 SNOPT SOPLEX 2.0 SULUM 2.0 XA XPRESS 26.01 # 24.3.2 Minor release (August 29, 2014) ## 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 Alvaro Lorca Galvez, Scott McDonald, Tom Rutherford, Nick Sahinidis, and Uwe Schneider. ## GAMS System ### GAMS • Allow empty scalar data statements: $onempty
scalar xyz / /;

### Extrinsic Function libraries

• Pass on parameter file name via LibInit call.

## Solvers

### BARON

• New libraries 14.0.3.

### CBC

• New libraries.

### CONOPT

• New libraries 3.16C.
• Added checks for internal intermediate results being NaN (Not A Number). If this happens, CONOPT will stop and return a message about it. The solver status will return 4 "Terminated by Solver" and model status 6 or 7, "Intermediate Infeasible" or "Intermediate Feasible."

### CONVERT

• Fixed bug in interval evaluations for functions and gradients.
• The interval evaluations are now triggered by their own option (e.g. intervalEval=yes) instead of being part of every Jacobian or Hessian dump.

### Cplex

• Some Cplex tuning parameters had no or the wrong effect. This has been fixed.
• The BCH usercutcall was not called in case of new constrains only for true cuts (see e.g. GAMS Model library model bchtsp). This has been fixed.

### Examiner2

• Fixed error in processing options file.
• Fixed error in trace file generation.

### Ipopt

• New libraries.

### Mosek

• New libraries 7.0.0.126.
• Fixed an issue with using the Mosek extended license for MIP solving on Mac OS X.

• Fixed writing MPS files with row and column names.

### SCIP

• New libraries 3.1 #322574a
• Changed default of option heuristics/proximity/minimprove from 0.25 to 0.02.
• Changed default of option heuristics/proximity/usefinallp from TRUE to FALSE.

### XPRESS

• New libraries 26.01.14 for Linux and Windows.

## Tools

### GDXDUMP

• When generating \$GDXIN filename, the filename now includes the full path of the GDX input file.

### GDXXRW

• In the previous release, we changed the behavior that when reading with Values=String, the empty cells no longer created an entry. Because reading with this option was the default for the cases with RDim=0 or CDim=0, we changed this default to Values=NoData in order not to break existing code.

### Shellexecute

• Fixed error causing problems during parameter processing.

## Expert Level APIs

• Delphi: Distinguish between 32 bit and 64 bit compiler.

## Object Oriented APIs

• Make more GAMS options available through the GAMSOptions class:
• GAMSOptions.AppendExpand: Expand file append option
• GAMSOptions.AppendOut: Output file append option
• GAMSOptions.DumpOpt: Writes preprocessed input to the file input.dmp
• GAMSOptions.DumpParms: GAMS parameter logging
• GAMSOptions.ErrMsg: Placing of compilation error messages
• GAMSOptions.Expand: Expanded (include) input file name
• GAMSOptions.FErr: Alternative error message file
• GAMSOptions.JobTrace: Job trace string to be written to the trace file at the end of a Gams job
• GAMSOptions.LimCol: Maximum number of columns listed in one variable block
• GAMSOptions.LimRow: Maximum number of rows listed in one equation block
• GAMSOptions.LogLine: Amount of line tracing to the log file
• GAMSOptions.On115: Generate errors for unknown unique element in an equation
• GAMSOptions.Output: Output file
• GAMSOptions.PageContr: Output file page control option
• GAMSOptions.PageSize: Output file page size (=0 no paging)
• GAMSOptions.PageWidth: Output file page width
• GAMSOptions.Reference: Symbol reference file
• GAMSOptions.ScriptExit: Program or script to be executed at the end of a GAMS run
• GAMSOptions.Suppress: Compiler listing option
• GAMSOptions.Symbol: Symbol table file
• GAMSOptions.TraceLevel: Solvestat threshold used in conjunction with a=GT

## Model Libraries

### GAMS Data Library

• Fixed some errors in some Matlab examples.

# 24.3.3 Minor release (September 19, 2014)

## 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 Henrik Dahl.

## Solvers

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

• Fixed issue loading MKL libraries on Linux machines with AVX2 instruction set.

## Tools

• Fixed problem with character set used for error messages.

### GDXXRW

• Fixed error when reading special values from Excel.

### MDB2GMS, SQL2GMS

• Fixed problem when using comma as decimal separator.

## Object Oriented APIs

### Java

• Fixed a location of listing file when creating a job from (full-path) file without giving a job name.