Reputation: 1313
I am new to optimization and algebraic modeling languages (AML). So far I solved some simple optimization problems in Matlab. My question: What is the difference between AMP packages like the python library "Pyomo" and for instance python "scipy.optimize"? I will start to work with some Mixed Integer Nonlinear Programming in engeineering - would you recommend to use AML?
Thank - I look forward to your assessment
Upvotes: 3
Views: 2002
Reputation: 16724
Algebraic modeling languages like AMPL and GAMS are closest to math and are the most concise when writing more complex models. You can try them out by downloading the student/evaluation versions. Both support a number of MINLP solvers. In addition they provide automatic differentiation (very helpful when doing more complex nonlinear models). These products target complex, large and sparse models that are more difficult to develop and maintain in lower level systems. These systems also have the widest support for MINLP solvers.
Pyomo and Julia/Jump are a little bit closer to the programming language they are embedded in. Pyomo uses AMPL solvers so that allows direct access to a bunch of solvers. If you are an experienced Python or Julia programmer these tools may have an advantage.
scipy.optimize is really more difficult to use and suited for smaller problems. They support only some dense solvers and you need to provide gradients yourself (unless you want to rely on finite difference estimates), and your model must be expressed in a lower level format. This is somewhat similar to Matlab. There are some third-party tools for Matlab that can help with modeling (e.g. Tomlab, Yalmip).
Finally you may want to have a look at NEOS where you can try out different systems.
One thing I often say in answer to these questions is: look at what your colleagues use. There are advantages in using the same software: easier to exchange models and data and to help each other out with problems.
Upvotes: 3