Version 1 (modified by jarrod.millman, 6 years ago)

--

There are lots of commercial modelling systems for numerical optimization like AMPL(www.ampl.com), GAMS(www.gams.com), TOMLAB are. Just see for example http://tomopt.com/tomlab/company/customers.php – tomlab users http://tomopt.com/tomlab/products/prices/commercial.php – tomlab prices

My proposition is creating a free Python-based equivalent to them, + connecting some non-smooth & network solvers that our optimization department researches, + inviting our collaborators from other optimization departments of our & some other institutes to provide their own solvers.

This project is based on:

  1. existing m-code from my OpenOpt? experience (see below)
  2. fortran standalone routines from our optimization department
  3. lots of scipy solvers + connecting to other, already written.

Now afaik essential free optimization environment is absent, but I strongly believe it's just a matter of time, like appearing Linux vs Unix was. And maybe from your decision will depend, will it be Python-based or Ruby- or caml- or fortress- or Java- or something else (by someone else). For example, I know that there are some efforts to make it in LispNYC.org project GSoC ideas, see for example http://lispnyc.org/wiki.clp?page=soc07-details/quad-opt 'automatic placement of legends on function plots' while those some scipy optimization solvers can't yield graphic output at all.

BTW there are usually some solvers for solving systems of non-linear equations (like MATLAB, scipy fsolve or my nonSmoothSolve) attached.

I already had some experience with my OpenOpt? for MATLAB/Octave, see http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=13115&objectType=file there are some examples in directory OpenOpt/Examples? & some pictures generated automatically. See http://www.box.net/shared/3jmi2hj8lk for my CV and detailed proposition.

The environment will provide scaling, unified convenient text & graphics output, checking user-supplied analytical derivatives, parallel calculations (for example for numerical gradient/subgradient obtaining), easy comparison & similar to TOMLAB unified for all solvers call:

prob = NLP(myObjFun, x0, <optional params:> TolX=1e-4, TolCon=1e-3, doPlot=true, MaxTime=1e3, MaxIter =1e4, ...) (similar prob=LP(f, other_args), prob=QP(...), ...)
r = prob.run(solverName (or names of some solvers), <optional params>)

output structure r will include algorithm used, licence of the solver used, its authors, web homepage of the solver, time, cputime elapsed, and much more. Some of the info will be printed (by default) before or after solver's work. All of the above is already done in my OpenOpt? version for MATLAB/Octave (parallel - currently only for objfun gradient obtaining, not constraints) but for many reasons (the main is pass-by-copy in MATLAB/Octave vs pass-by-reference in Python) I'm rewriting all the code to Python now & intend to continue development using Python language. GSoC support would helped me very much.

Also in future I intend to connect glpk, lpsolve, COIN-OR & other free solvers to the environment. I don't mean writing python-c connection once again, I mean simple unified call prob=LP(...), r=prob.run(solver, <optional options>) with some benchmarking elements. As lot solvers as it can be done will be Python-written, for to avoid problems with installation C- & Fortran-code & for to RAD ability.