announcement: OpenOpt and GenericOpt

Alan Isaac aisaac at american.edu
Mon Sep 10 16:52:25 CEST 2007


OpenOpt and GenericOpt
======================

Introducing two new optimization packages.
OpenOpt and GenericOpt are 100% Python
with a single dependency: NumPy.
For more detail see below and also
<URL:https://projects.scipy.org/scipy/scikits/wiki/Optimization>

OpenOpt
-------

OpenOpt is new open source optimization framework.
OpenOpt is released under the BSD license.

The primary author and current maintainer of
OpenOpt is Dmitrey Kroshko <email:openopt AT ukr.net>
(Optimization Department, Cybernetics Institute, Ukrainian Science Academy)

OpenOpt goal: provide an open source alternative
to TomOpt TOMLAB (optimization framework for MATLAB)
and related optimization frameworks.  Currently OpenOpt
offers connections to a variety of open source solvers,
primarily for unconstrained optimization. (See below.)

OpenOpt provides provides connections a vraity of solvers,
including those in GenericOpt, which are included.
(Users will need to download other solvers;
we provide URLs for the downloads.)


GenericOpt
----------

GenericOpt is a toolkit for building specialized optimizers.
GenericOpt is released under the BSD license.

The primary author and current maintainer of GenericOpt is
Matthieu Brucher <email:matthieu.brucher AT gmail.com>

GenericOpt goal: provide an open source, extensible
toolit for "component-wise" construction of specialized
optimizers.  GenericOpt allows users who want detailed control to construct
their own solvers by choosing among a variety of algorithm components
(currently, most choices are among step and line-search algorithms.)

Usage: see Matthieu Brucher's tutorial 
<URL:https://projects.scipy.org/scipy/scikits/wiki/Optimization/tutorial>.  

Limitation: currently GenericOpt provides only unconstrained solvers. 

SciKits
-------

The SciPy project is developing a collection of open source packages for
scientific computing which are allowed to have more dependencies and
more varied licenses than those allowed for SciPy proper.
In contrast to SciPy, the related scikits may host any 
OSI-approved licensed code.  See
<URL:https://projects.scipy.org/scipy/scikits/>

OpenOpt and GenericOpt are available together as a
SciPy scikit.  The provides a unified optimization
framework along with a collection of solvers.
However, neither depends on the other.


OpenOpt Details
---------------

Key feature: a unified calling interface for all solvers,
a variety of pure Python solvers, and connections to 
numerous external solvers.

Example::

    from scikits.openopt import NLP
    p = NLP(lambda x: (x-1)**2, 4)
    r = p.solve('ralg')

In this example,
the objective function is (x-1)^2,
the start point is x0=4,
and 'ralg' specifies the name of solver involved.

See much more detailed example here 
<URL:http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/nlp_ALGENCAN.py> 




OpenOpt Connected External Solvers
----------------------------------

Non-linear problems (NLP)
~~~~~~~~~~~~~~~~~~~~~~~~~

- ALGENCAN <http://www.ime.usp.br/%7Eegbirgin/tango/py.php> 
  (GPL)
- lincher (BSD) (all types of constraints and 1st derivatives),
- ralg (BSD) (currently unconstrained only)
- scipy_tnc and scipy_lbfgsb (box-bounded, requires scipy 
  installed, BSD)

Non-smooth problems (NSP)
~~~~~~~~~~~~~~~~~~~~~~~~~

- ralg (BSD)
- ShorEllipsoid (BSD)
  (for small-scale problems with nVars = 1..10, former for 
  medium-scaled problems with nVars = 1...1000, requires r0)
  
Both are unconstrained for now.


Linear problems (LP)
~~~~~~~~~~~~~~~~~~~~

- lp_solve <http://sourceforge.net/projects/lpsolve> (LGPL)
- glpk <http://www.gnu.org/software/glpk/> (GPL)
- CVXOPT <http://www.ee.ucla.edu/%7Evandenbe/cvxopt/> (GPL) 
  (currently glpk requires CVXOPT installed)


Mixed-integer problems (MILP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- lp_solve <http://sourceforge.net/projects/lpsolve> 


Quadratic problems (QP)
~~~~~~~~~~~~~~~~~~~~~~~
- CVXOPT <http://www.ee.ucla.edu/%7Evandenbe/cvxopt/> (GPL) 
  (please note - NLP lincher solver requires QP solver, and 
  the only one for now is CVXOPT one)

Here you can look at examples for NLP 
<http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/nlp_1.py>, 
NSP 
<http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/nsp_1.py>, 
QP 
<http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/qp_1.py>, 
LP 
<http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/lp_1.py>, 
MILP 
<http://projects.scipy.org/scipy/scikits/browser/trunk/openopt/scikits/openopt/examples/milp_1.py> 


Acknowledgements
================

Development of OpenOpt was supported by Google through the 
Google Summer of Code (GSoC) program, with Alan G. Isaac
as mentor.  Additonal mentorship was provided by Jarrod Milman. 
Debts to the SciPy community are many, but we would particularly
like to thank Nils Wagner.


Appeal
======

The primary author and current maintainer of OpenOpt is Dmitrey Kroshko.  The
primary author and current maintainer of GenericOpt is Matthieu Brucher.  These
packages are already functional and extensible, but both would profit from
additional intensive development.  This will require sponsorship, especially
for substantial additions to OpenOpt. The use of Python for scientific
programming is only nascent in the Ukraine, so really an outside sponsor is
needed.  Ideas or leads are very welcome.




More information about the Python-list mailing list