Release Notes


  • The minimum version requirement of Java Runtime Environment for using with GAMS Java API is now Java SE 7.
  • New TransportGDX example to demonstrate how to import and export GDX files.
  • Removed 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

24.8.1 (December 2016)

  • Deprecated GAMSSymbol.compact and the method will be removed in the next major release
  • an exception or an error thrown by GAMSWorkspace.finalize and GAMSSymbolIterator.finalize now must be caught or declared to be thrown. Note that an explicit call on one of these two methods is not recommended unless it is necessary to do so.

24.7.4 (September 2016)

24.7.1 (March 2016)

  • Fixed a bug with the property GAMSOptions.defines : When too many entries were added, all of them were ignored.

24.5.1 (August 2015)

24.4.2 (March 2015)

  • New property GAMSSymbol.getDomainsAsStrings: get domains of symbol, each element is a string
    Note: If the domain is an alias in GAMS, this call will return the name of the alias, not the name of the aliased set.
  • Disable unwanted debug output from Couenne when running with GAMSModelInstance
  • Change naming scheme of gdx oputput scratch file to sequence number.

24.4.1 (December 2014)

  • Modify the handling of GAMS Aliases in the object oriented APIs:
    • If we ask for the number of GAMSSymbol in a GAMSDatabase, the Aliases will be excluded.
    • If we iterate over all GAMSSymbol in a GAMSDatabase, Aliases will be skipped.
    • If we ask explicitly for an Alias in a GAMSDatabase (GAMSDatabase.getSet("a") with a being an Alias) we will get a reference to the GAMSSet referenced by the Alias, not the Alias itself.
    • Note:
      • Aliases can appear in a GAMSDatabase only, if it was initialized by a GDX file containing an Alias.
      • The new example Alias at [Path/To/GAMS]/apifiles/Java/alias/ demonstrates this new behavior.

24.3.3 (September 2014)


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

24.3.2 (August 2014)

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

24.3.1 (July 2014)



  • no longer necessary to set up environment variable before running a program
  • 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.
  • when exporting a database to GDX: a symbol with real domains from now on will be registered
  • in : always creates output database OutDB even if GAMSExecutionException has been raised.
  • in GAMSSymbol.copySymbol when copy into the Universe symbol (GAMSDatabase.getSet("*")) of a GAMSDatabase : merge operation will be performed.
  • in GAMSWorkspace default constructor: API will apply the default setting, that is, finding GAMS system directory from environment variable in the following order (depends on the target platform):
    • Windows: first from PATH environment variable. If not found, from the platform windows registry gams.location,
    • Mac OS: first from PATH environment variable. If not found, from DYLD_LIBRARY_PATH,
    • Unix: from PATH environment variable. If not found, from LD_LIBRARY_PATH.
  • in non-default GAMSWorkspace constructor:
    • user can specify a GAMS system directory during run time, API will not search for a GAMS system directory from an environment variable.
    • in case the specified system directory is null or user speicify other workspace attributes but a system directory, API will apply the default setting (see changed in GAMSWorkspace default constructor above).


  • API memory leak issue in GAMSDatabaseIterator.
  • a bug when reading an option file on Unix platform with non-standard locale


  • all deprecated classes and methods since 24.1.

24.2.3 (May 2014)


24.2.2 (March 2014)


  • null string is treated as an invalid key for all record operations of GAMSSymbol.


24.2.1 (December 2013)




  • a bug when running a job with an input directory IDir added into GAMSOptions object.

24.1.3 (July 2013)

Improve data iterator

Update example:

  • Transport12 at [Path/To/GAMS]/apifiles/Java/transport/

24.1.1 (May 2013)

Changes in GAMSDatabase:

  • deprecates the compact method, as it has no effect anymore.

Changes in GAMSGlobals:

  • the default value of working directory has been changed from System.getProperty("user.dir") to System.getProperty("").

Changes in GAMSModelInstance :

  • deprecates the instantiate(GAMSOptions options), instantiate(GAMSModifier[]), and instantiate(GAMSOptions, GAMSModifier[]) methods and replaced by instantiate(String, GAMSModifier ...) and instantiate(String, GAMSOptions, GAMSModifier ...) methods

Changes in GAMSWorkspace and GAMSWorkspaceInfo:

  • deprecates boolean debug flag and replaced by a debug level flag (type of a new class GAMSGlobals.DebugLevel).
  • allows an override of debug level flag from an environment variable GAMSOOAPIDEBUG

New methods in GAMSDatabase:

New class GAMSDatabaseDomainViolation:

New enumeration class GAMSGlobals.DebugLevel:

  • defines values of different GAMS Debug Levels.

New methods in GAMSModelInstance:

New enumerated value of GAMSModelInstance.SymbolUpdateType:

New methods in GAMSModifier:

New methods in GAMSSymbol:

New class GAMSSymbolDomainViolation:

New methods in GAMSWorkspace

Fixed a bug when iterating through the records of a GAMSSymbol

Changes of location of examples:

  • Bender Examples: from [Path/To/GAMS]/apifiles/Java/Benders*.java to [Path/To/GAMS]/apifiles/Java/benders/Benders*.java
  • Cutstock: from [Path/To/GAMS]/apifiles/Java/ to [Path/To/GAMS]/apifiles/Java/cutstock/
  • ConsoleInterrupt: from [Path/To/GAMS]/apifiles/Java/ to [Path/To/GAMS]/apifiles/Java/interrupt/
  • Transport Examples: from [Path/To/GAMS]/apifiles/Java/Transport*.java to [Path/To/GAMS]/apifiles/Java/transport/Transport*.java
  • Warehouse: from [Path/To/GAMS]/apifiles/Java/ to [Path/To/GAMS]/apifiles/Java/warehouse/

New examples :

  • SimpleCutstock at [Path/To/GAMS]/apifiles/Java/cutstock/
  • DomainCheck at [Path/To/GAMS]/apifiles/Java/domain/
  • Transport13 at `[Path/To/GAMS]/apifiles/Java/transport/
  • Tsp at [Path/To/GAMS]/apifiles/Java/tsp/

24.0.2 (February 2013)

New method in GAMSSymbol

24.0.1 (December 2012)

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 namespace com.gams.examples, located under [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 [Path/To/GAMS]/apifiles/java/api/javadoc directory.