I know, it was indicated that this blog would be updated regularly, and that has not happened for a long time (about a year).
In the first part of that year, a lot of time was devoted to improving the plotting/graphing capabilities of Gekko, so that a version 2.2. could be released with much more graphing power. One of the philosophies of Gekko is that stuff that the users use all the time should be right at hand and easy to use, so improving PLOT was important.
But that’s not the real story behind the blog-gap. The real story is perhaps that Gekko needed to mature or modernize in some respects, and that involved quite a lot of reflection. The driver behind that realization was the introduction of array-timeseries. Array-timeseries were introduced in the spring of 2017, and they were basically introduced to accommodate how GAMS handles multi-dimensional data. GAMS is often used as a solver for complicated model types (notably models with perfect foresight), but multi-dimensional data can also originate from, among other things, downloads from databases that store data in tables with multiple columns (“dimensions”). It is very practical to be able to aggregate timeseries from such tables by simple means such as sum(#i, x[#i]), where #i could for instance be a list of sector names (like ‘a’, ‘b’, etc.), and x[‘a’], x[‘b’] etc. could for instance be production values or similar. In addition to this, there was a need to improve user defined functions in Gekko, and all these new features of the syntax led to a decision to modernize parts of the Gekko core code, namely the part that deals with expressions. Part of this rewrite involved a tightening of the syntax, especially regarding replacement variables and the distinction between strings and names (this had become a bit fuzzy).
So, in an up-coming Gekko 3.0, planned for this fall, the syntax regarding these more complicated aspects of Gekko should become much more clear, and the author had the feeling that if these issues were not addressed now, they might have become extremely time-consuming to fix at a later point in time (and the users would, at that time, have had to revise a lot of their existing Gekko command files). The rewrite of these core parts of Gekko (including the parser) for an upcoming version 3.0 was deemed important for the long-term well-being of Gekko, but it should be emphasized that the syntax changes regarding more casual Gekko use are pretty minor. In the next post, we will look at the first part of the syntax modernization, namely the way to think straight about sigils (that is, the funny ‘%’ and ‘#’ symbols used to prefix some variable types in Gekko). In later posts, we will look at other aspects of Gekko 3.0, and these posts are envisioned to provide a kind of reference regarding why this or that functionality in Gekko 3.0 was implemented in this or that particular way.