21.5 Minor release (November 11, 2004)

Distribution 21.5 includes newly available solver libraries and minor enhancements in the GAMS system, as well as introduces the interior-point NLP solver KNITRO from Ziena Optimization.

Acknowledgements

We would like to thank all of the users who have reported bugs or made suggestions in improving this release, especially Richard Roberts for catching an IDE bug.

Solvers

  • CONOPT
    • New libraries (14e) are included which address minor fixes.

  • CPLEX
    • New libraries (9.0.2) are included which address minor fixes.

  • KNITRO
    • New interior-point nonlinear programming solver added to the GAMS NLP solver portfolio.

  • MOSEK
    • New libraries (3.1) are included which address minor fixes.

  • XA
    • New libraries are included which address minor fixes.

  • XPRESS
    • New libraries are included which address minor fixes.

GAMS System

  • Model Library
    • A model showing a successive recalibration algorithm for solving general equilibrium models has been added (decomphh.gms).
    • A model illustrating numerical integration using trapezoidal approximations for Herves (transposable element) activity calculations is included (herves.gms).

  • Testlib
    • 27 new quality check models have been added. See the Testlib page for details.

  • New functions:
    • sinh, cosh, tanh

  • $ Dollar control options:
    • $on/offVerbatim
      • The $on/offVerbatim commands are used in conjunction with the GAMS parameter DUMPOPT to suppress the input preprocessing for input lines that are copied to the dmp file. This feature is mainly used to maintain different versions of related models in a central environment.

        The $on/offVerbatim commands are only recognized for DUMPOPT >= 10 and apply only to lines in the file the commands appeared.

        The use of $goto and $on/offVerbatim are incompatible and may produce unexpected results.

    • $on/offPut
      • This option simplifies the writing of put statements that copy text. Previously, to copy text into a put file one may have to write many lines similar to the ones below:

        put 'text A with a double quote "' "text A with a single quote '" /
        put 'text B with a double quote "' "text B with a single quote '" /
        put 'text C with a double quote "' "text C with a single quote '" /

        This may be cumbersome. The use of $on/offPut will result in the same text written to the put file without having to specify the 'put' explicitly for each line and allows you to specify mixed quotes in a single statement. Consider the following example:

         
        file fx;
        put fx 'text with " and ' "' required a split of the text" /
        $onput
        With the new on/off put we can freely
        mix and match ' and " characters.
        $offput
        ;

        It also works outside of the put statement:

        $onput
        It even works outisde the put statement,
        as long as a put file is assigned.
        $offput
    • $setDDlist
      • This statement catches misspelled 'double dash' GAMS parameters. For example, in the program below (ein.gms), the only 'double dash' options are 'one', 'two', 'three' and 'four' (note the use of the string macro for %two% automatically makes it part of the allowed list of double dash parameters):

        $if NOT set one $set one default value
        display '%two%';
        $setddlist three four

        The following GAMS invocation will cause an error since --five is not a valid 'double dash' option.

        > gams ein.gms --two=twovalue --five=20

        1 Display 'twovalue'
        **** --five=20

        3 $setddlist three four $620

  • Other new features:
    • alias(*,u1,u2,..)
      • The universe is assumed to be ordered and ordered operators like lag, leads and ORD can be applied.
    • Faster execution of GAMS statements using set(s) containing a single element.
    • SortedUels(*,*)
      • A new predefined tuple to report sets in sorted order. For example, to write in sorted order:
        >
        alias(*,u);
        loop(SortedUels(u,i),
        put / i.tl i.te(i) );