Indices and tables

Overview

symopt

symopt makes it easy to define and solve (non)linear constrained optimization problems in Python. It uses the power of SymPy to automate the error-prone and time-consuming task of writing functions to evaluate an optimization problem’s objective function and nonlinear constraints (to say nothing of their first and second derivatives!). symopt then provides a standardized interface to solve the problem through nonlinear optimization backends including SciPy and Ipopt.

Documentation

Auto-generated API documentation for latest stable release can be found at https://symopt.readthedocs.io/en/stable/. For the latest development version, see https://symopt.readthedocs.io/en/latest/.

Usage

Optimization problems can be defined using the OptimizationProblem class, which has a similar constructor to scipy.optimize.minimize. For example, consider

where the p’s are parameters defining the upper bounds for each variable. This can be defined by:

>>> from symopt import OptimizationProblem
>>> from sympy import MatrixSymbol, symarray

>>> x1, x2 = symarray('x', 2)
>>> p = MatrixSymbol('p', 2, 1)

>>> prob = OptimizationProblem(mode='min')
>>> prob.add_parameter(p)
>>> prob.add_variable(x1, lb=2, ub=p[0])
>>> prob.add_variable(x2, lb=0, ub=p[1])

>>> prob.obj = x1**2/100 + x2**2
>>> prob.add_constraints_from([x1 * x2 >= 25,
                               x1**2 + x2**2 >= 25])

That’s it. From here, symopt will automatically:

  • derive all necessary derivatives (gradients and Hessians for the objective function/constraints)
  • create functions to numerically evaluate these quantities (using SymPy’s lambdify or autowrap)

One can then solve the problem for specified parameters using solve:

>>> x = [2, 2]
>>> p = [20.0, 50.0]
>>> res = prob.solve(x, p, method='ipopt')
>>> print(res['success'])
True
>>> print(res['x'])
array([15.8113883 ,  1.58113883])
>>> print(res['fun'])
5.000000000505797

Dependencies

  • numpy
  • scipy
  • sympy
  • orderedset
  • cyipopt (Optional, for optimization using the Ipopt backend)
  • A fortran compiler (Optional, for code generation using autowrap)

License

symopt is released under the MIT license. See LICENSE for details.

Author

Sean P. Cornelius (gmail address: spcornelius).