Lessons learned and musing about software tools, software testing, computational experiments, optimization, operations research, and other interesting stuff that I run across...

Wednesday, October 5, 2011

OptimJ is now free, but Ateji is closed

Atjei, the creater of OptimJ, is now closed. The OptimJ product is a Java extension that supports a simplified syntax for specifying optimization models. It is sad to see this product be abandoned like this. I do not know of any other optimization modeling tool that directly supports Java.

Erwin Kalvelagen noted the demise of Ajeti, and commented that "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." Pyomo is similar to OptimJ, in that it supports optimization modeling in Python. However, a premise that has guided Pyomo development is that users will want to perform modeling in a full-featured programming language.

Clearly, traditional programming languages are more verbose and complex than a domain-specific language. However, Python is arguably much simpler to use than Java. In fact, I have gotten feedback from Pyomo users that suggests that they were not aware that they were developing models in Python; they simply thought that it was another modeling language!

Of course, I am a programmer who likes to do optimization. My selfish reason for creating Pyomo is that I find domain-specific languages quite constraining. In fact, I had thought that the use of Python for modeling and optimization would be attractive to optimization researchers. Python is a great language for prototyping a complex idea, usually without losing too much performance. I and other Pyomo developers have implemented complex optimizers in Python that directly interface with Pyomo models, and in most cases the runtime is dominated by LP subproblems. Thus, there has been little motivation to develop custom, highly-optimized codes in languages like C++ based on these solvers.