Gekko blog

This is the Gekko blog. Read about the development of Gekko, software- and architectural considerations, parsing & the development Gekko command language, and much more. The Gekko blog is maintained and written by Thomas Thomsen, current editor of the Gekko project.

Functions in Gekko 3.0 (UFCS)

Regarding functions (both in-built and user-defined) in Gekko 3.0, these implement so-called UFCS (Uniform Function Call Syntax). First, some background. In object-oriented languages, a method has the form x.f(a, b), where x is the object, and f() is the method, with... read more

String interpolation

Strings are represented with single quotes in Gekko (for instance: ‘this is a string’). Some languages use double quotes, and other languages allow both variants (or use single quotes for characters, and double quotes for strings). The use of single quotes... read more

Array-series

Array-series have not been described in this blog until now. The concept of array-series arose as a consequence of database integration on the one side, and GAMS integration on the other side. When interfacing with a particular Danish online database... read more

Use of {}-curlies

In Gekko, {}-curlies have been used for quite a long time now. The idea is that variable names can be composed by means of the {}-curlies, creating a means of composing names dynamically, in a sense forwarding from a string to a variable name corresponding to that... read more

Lists and naked lists

As mentioned in the overview post regarding Gekko 3.0, lists were generalized in Gekko 3.0, using primarily Python as the inspiration. In Gekko 2.x, lists could only contain strings, so in that sense, they were quite simple. Gekko 3.0 allows any variable to be an... read more

The dynamic problem

In Gekko 2.0/2.2/2.4, and also in some other software packages, series expressions are run in an outer loop. Consider a series expression like y = x1 + x2 + x3. In AREMOS, such an expression is run n times in an outer loop, where n is the number of periods. Imagine... read more

Gekko 3.0

The official Gekko 3.0 is now released. This is a long post, but the intent is to try to explain what Gekko 3.0 really is about. Which is actually not so easy to boil down exactly: it is perhaps best to think of it as a long-term vision, borne out of the realization... read more

The lag problem

One of the main reasons for the modernization of the parser for Gekko 3.0 was that it was deemed important to handle timeseries as objects in Gekko. Timeseries are already objects in Gekko 2.0/2.2, but they are not always handled as such during calculations. To... read more