Sunday, October 2, 2011

Ateji defunct: OptimJ now free

Unfortunately, the company Ateji has ceased to operate (, They had an interesting modeling framework based on Java.

Sometimes I divide modeling tools up as follows:

  1. Matrix generators: write LP or MPS file from application. This is done since the very early times. The main difference is that Fortran is no longer the obvious choice for programming language to use.
  2. Specialized modeling languages: AMPL, GAMS, …
  3. Low level solver APIs. This is essentially like writing a matrix generator, minus the part where you write a file. In many cases the solver API can help a little bit by providing routines like addrow() and addcol().
  4. Hybrids, somewhere between 2 and 3, where modeling constructs are added to traditional programming languages. E.g. Cplex Concert, and OptimJ.

I suspect that OptimJ is mainly attractive for the intersection of the set of Java programmers and the set of modelers of optimization models. Besides that this subset may be somewhat small (many modelers are not proficient Java programmers), there is also a lot of competition targeting this particular group of users.

I believe that some of the more complex data issues in practical modeling are often better (i.e. more efficiently) dealt with in a specialized language than in a traditional programming language. In statistics this has largely been accepted. Much statistical work is done inside specialized “language” environments such as SAS, SPSS and Stata. In optimization this is not (yet) the case: the lower level APIs still have a large following. This while data is often more irregular in practical optimization than in statistics. Of course much statistical computing is done “off-line” so the integration issues that plague modeling languages are just not there.


  1. Hi Erwin,

    Let me add that while Ateji has stopped operating, we have made OptimJ freely available and we are investigating options for long-term support of the technology.

    I second your claim that "data issues are often better dealt with specialized languages". The reason is, imho, that mainstream programming languages have very poor support for data manipulation.

    This is why OptimJ extends Java not only with modeling constructs (decision variables and constraints), but also with data manipulation constructs such as tuples, associative arrays and powerful comprehension expressions. For details, see the OptimJ language manual, chapter 6, pages 26 and later.

    What I found interesting is that once you get used to having these constructs available in Java, you tend to use them for all kind of purposes, totally unrelated to OR. In a sense, OptimJ has turned Java into a "data language". In addition, the compiler-generated OptimJ GUI allows you to visualize this data with no effort.

    Patrick, OptimJ designer.

  2. Good luck with your efforts and any new endeavours!