# Changelog

### From OpenOpt

**OpenOpt Changelog**

None yet |

## 0.38 (2012-March-15)

**OpenOpt:**

- interalg can handle discrete variables
- interalg can handle problems with parameters fixedVars/freeVars
- interalg can handle multiobjective problems (MOP)
- Many interalg improvements and some bugfixes
- Add another EIG solver: numpy.linalg.eig
- New LLSP solver pymls with box bounds handling

**FuncDesigner:**

- Some improvements for sum()
- Add funcs tanh, arctanh, arcsinh, arccosh
- Can solve EIG (eigenvalue problems) built from derivatives of several functions

**SpaceFuncs:**

- Add method point.symmetry(Point|Line|Plane)
- Add method LineSegment.middle
- Add method Point.rotate(Center, angle)

## 0.37 (2011-Dec-15)

**OpenOpt:**

- Some improvements and bugfixes for interalg (especially for "search all SNLE solutions" mode)
- Eigenvalue problems (EIG) in OpenOpt and FuncDesigner
- Equality constraints for GLP (global) solver de
- Some changes for goldenSection ftol stop criterion
- GUI func "manage" - now button "Enough" works in Python3, but "Run/Pause" not yet (probably something with threading)

**FuncDesigner:**

- Two new methods for FD splines to check their quality:
*plot*and*residual* - IPOPT initialization time gap decreased (time till first iteration)
- Major sparse AD improvements for badly-vectorized or unvectorized problems with lots of constraints (except of box bounds); some problems now work many times or orders faster (of course not faster than vectorized problems with insufficient number of variable arrays). It is recommended to retest your large-scale problems with useSparse = 'auto' | True| False
- Solving ODE dy/dt = f(t) with specifiable accuracy by interalg
- Speedup for solving 1-dimensional IP by interalg

**SpaceFuncs** and **DerApproximator:**

- Minor code cleanup

## 0.36 (2011-Sep-15)

**OpenOpt:**

- Now solver interalg can handle all types of constraints and integration problems
- Some minor improvements and code cleanup

**FuncDesigner:**

- Interval analysis now can involve min, max and 1-d monotone splines R -> R of 1st and 3rd order
- Some bugfixes and improvements

**SpaceFuncs:**

- Some minor changes

**DerApproximator:**

- Some improvements for obtaining derivatives in points from R^n where left or right derivative for a variable is absent, especially for stencil > 1

## 0.34 (2011-June-15)

**OpenOpt:**

- Speedup and many improvements for interalg, now it can work with restricted domains (e.g. log, sqrt on [-1,1])
- Now interalg can obtain all solutions of nonlinear equation (or systems of them) in the involved box lb_i <= x_i <= ub_i (bounds can be very large), possibly constrained (e.g. sin(x) + cos(y+x) > 0.5).
- Some more bugfixes and improvements
- Python 3 compatibility

**FuncDesigner:**

- Speedup, many improvements and some bugfixes for interval analysis (and thus interalg)
- Some more bugfixes and improvements
- Python 3 compatibility

**SpaceFuncs:**

- Changes in FuncDesigner made available using points in constraints, e.g. now you can add constraint "middle of line segment AB is middle of line segment CD" simply as 0.5*(A+B) == 0.5*(C+D) (or mere A+B == C+D)
- Python 3 compatibility

**DerApproximator:**

- Python 3 compatibility

**Backward incompatibilities:**

- NLSP renamed to SNLE (system of nonlinear equation)
- FuncDesigner AD on a single oovar returns array, not Python dict, e.g. before: f.D(point, a) = {a:some_value}, now: f.D(point, a) = some_value. Using Python list with single oovar, e.g. f.D(point, [a]), still returns dict.
- FD oovars() now returns ooarray instead of Python list

## 0.33 (2011-March-15)

**OpenOpt:**

- cplex has been connected
- New GLP solver interalg with guarantied precision (also can work in inexact mode)
- New solver amsg2p for medium-scaled NLP and NSP

**FuncDesigner:**

- Essential speedup for automatic differentiation when vector-variables are involved, for both dense and sparse cases
- Solving MINLP become available
- Add Uncertainty analysis
- Add Interval analysis
- Now you can solve systems of equations with automatic determination is the system linear or nonlinear (subjected to given set of free or fixed variables), see the doc entry for details
- FD Funcs min and max can work on lists of oofuns
- Bugfix for sparse SLE (system of linear equations), that slowed down computation time and demanded more memory
- New oofuns angle, cross
- Using OpenOpt result(oovars) is available, also, start points with oovars() now can be assigned easier

**SpaceFuncs:**

- Some bugfixes

**DerApproximator:**

- Adjusted with some changes in FuncDesigner

**Backward incompatibilities:**

- FD oovars() now returns ooarray instead of Python list
- New OpenOpt parameter p.useAttachedConstraints, is False by default, set it to True to involve them. Maybe this will be reworked till next release, where user- and kernel- attached constraints will be handled separately

## 0.32 (2010-December-15)

**OpenOpt:**

- New class: LCP (and related solver)
- New QP solver: qlcp
- New NLP solver: sqlcp
- New large-scale NLP/NSP solver gsubg. Currently it still requires lots of improvements (especially for constraints - their handling is very premature yet and often fails), but since the solver sometimes already works better than ipopt, algencan and other competitors it was tried with, I decided to include the one into the release.
- Now SOCP can handle Ax <= b constraints (and bugfix for handling lb <= x <= ub has been committed)
- Some other fixes and improvements

**FuncDesigner:**

- Systems of nonlinear equations: possibility to assign personal tolerance for an equation
- Add new function
*removeAttachedConstraints* - Add new oofuns
*min*and*max*(their capabilities are quite restricted yet) - Some fixes and improvements

**DerApproximator:**

- Some minor fixes

## 0.31 (2010-September-15)

**OpenOpt:**

- Lots of new NLP, NSP (nonsmooth) and GLP (global) solvers from nlopt have been connected
- New LP solver: pclp (very premature, but permissive license and pure Python implementation)
- CVXOPT abstol and feastol (defaults 10^-7) have been binded to openopt "ftol" and "contol" (defaults 10^-6), maxiters(100) to maxIter (now 1000, was 400). As for "refinement" and "reltol" - it's not done yet, you should use CVXOPT native approach to adjust them
- Some bugfixes (mostly wrt using sparse matrices) and code cleanup

**FuncDesigner:**

- New features: Integration, Translator
- Some speedup for functions evaluation, automatic differentiation, optimization problems with some fixed variables
- New parameter useSparse for optimization probs and automatic differentiation (sometimes autoselect works prematurely)
- New parameter exactShape for automatic differentiation (prevents flattering operations)
- Some bugfixes (mostly wrt using sparse matrices) and code cleanup

**DerApproximator:**

- Add parameter exactShape (prevents flattering operations on result)

**Backward incompatibilities:**

- "optVars" has been renamed to "freeVars" ("optVars" is not appropriate for some prob types, e.g. systems of (non)linear equations)
- Binding CVXOPT abstol and feastol to new default values (see the changes above)
- New FuncDesigner syntax for interpolation

## 0.29 (2010-June-15)

**OpenOpt:**

- Some bugfixes
- Some improvements for handling sparse matrices

**FuncDesigner:**

- Some improvements for automatic differentiation
- New feature: attached constraints
- New feature: oosystem
- Now you can model & solve ODE systems

**ralg**:

- Bugfix for problems with nonlinear equality constraints
- Major changes for problems with nConstraints>1

**DerApproximator:**

- Function get_d2
- Add new stencil

**Backward incompatibilities:**

- By default stencil for NSP and used-created oofuns (e.g. connected from non-Python code) now have derivatives approximation stencil №3 instead of №2, it may lead to speed decrease (but you can set it to 2 or 1 manually).

## 0.28 (2010-March-15)

- Some bugfixes, mostly related to scipy.sparse matrices used since previous release
- Export FuncDesigner and OpenOpt LP / MILP to MPS format files

**OpenOpt 0.28:**

- New solvers scipy.optimize fmin as scipy_fmin (NLP/NSP), lsqr (LLSP)
- Major changes for ralg (one of changes - now all active constraints are taken together)

**FuncDesigner 0.18:**

- Add FuncDesigner operator ifThenElse
- Personal tolerances for FuncDesigner constraints
- Some improvements in automatic differentiation (yet some more remain to be done)
- Now to define equality constraint you can use
*expression_1 == expression_2*, possibly with tolerance as well:*(xpression_1 == expression_2)(tol=0.0001)* - "Negative tolerances" for constraints (to be strict with appropriate scaling). However, maybe in future it will be replaced by something like myConstr(strict=True) for better understanding.
- named() marked as deprecated

**DerApproximator 0.18:**

- Minor code clean up

## 0.27 (2009-December-15)

**OpenOpt 0.27:**

- scipy_slsqp solver - bugfix for problems where some box-bound constraints lb<= x <= ub are finite and some infinite (Python inf was incorrectly passed to Fortran code, so +/- inf has been replace by +/- 1e50)
- ralg solver - bugfix for problems with several linear equality constraints (>1), and some minor changes
- Now for some problems you can use p.minimize(), p.maximize() instead of p.solve()
- Some code clean up and minor changes

**FuncDesigner 0.17:**

- Bugfix for FuncDesigner functions sum, sin
- Now you can use oovar/oofun indexation a[ind1:ind2] (yet you cannot use a[ind:] or a[:ind])
- Add FuncDesigner example for system of linear equations, possibly overdetermined
- Example of passing oovars through ordinary Python funcs
- Add "required size" for FuncDesigner oovars
- Now there are some more ways to extract optimal point coordinates from OpenOpt result structure, e.g. a_opt, b_opt, c_opt = r('a', 'b', 'c') or r(a, b, c).
- If you have scipy installed, it yields some benefits to automatic differentiation for large-scale problems

**DerApproximator 0.17:**

- some minor fixes for some functions output data formats

## 0.25 (2009-September-15)

- Minor changes for NLP/NSP solver ralg
- Some bugfixes, lots of code clean up
- OpenOpt can optimize FuncDesigner models, for some non-linear classes it provides automatic differentiation

**Backward incompatibilities:**

- oovar-oofun have been moved to standalone package (FuncDesigner)
- For some problems with nonlinear funcs, where user-supplied derivatives are absent, you should have DerApproximator installed.

## 0.24 (2009-June-15)

- New class: MINLP - mixed-integer nonlinear problems
- New class: Linear Uniform Norm Problems (LUNP)
- Now DFP can handle user-supplied derivatives
- Some changes for finite-difference derivatives approximation
- New handling of linear equality constraints by ralg and some other changes for the solver
- Some important bugfixes, code cleanup, minor doc improvements

**Backward incompatibilities:**

- Connection to PSwarm 1.4 instead of 1.3 (Python API is backward-incompatible for 1.4)
- Default p.storeIterPoints set to False (it affects r.iterValues.x - for large scale problems it eats quite lot of memory)

## 0.23 (2009-March-15)

- New class SDP (solvers: CVXOPT and DSDP)
- New class SOCP (solvers: CVXOPT, in future CVXOPT authors intend to connect DSDP SOCP solver, then it will be connected to OO)
- New class DFP (Data Fit Problem, syntax similar to MATLAB lsqcurvefit)
- Some changes to NLP/NSP solver ralg
- Some more minor changes, code cleanup, bugfixes, doc entries updates

Changes for named variables syntax:

- Check derivatives for oofun
- oolin constraints now are rendered into linear ones, provided all inputs of the oolin involved are oovar instances

**Contributors:**

**Thanks to Stepan Hlushak**for writing GLP solver de (based on differential evolution)

**Backward incompatibilities:**

- if you provide derivatives for constraints, then for each constraint c_i or h_j: R^n -> R^s_k you should provide dc_i or dh_j with exactly same number of outputs, i.e. R^n -> R^(s_k, n), otherwise correct solution is not guaranteed (for named variables syntax you shouldn't care of the issue, each oofun has single function for obtaining output and no more than a single user-provided function for obtaining output derivatives).

## 0.21 (2008-December-15)

- major changes for NLP / NSP solver ralg
- new converter: qp2nlp
- new converter: lp2nlp
- new converter: nllsp2nlp
- new converter: nlsp2nlp
- new converter: minimax to NLP
- Introducing OpenOpt GUI
- PSwarm 1.3 has been connected instead of v 1.1. It has much more parameters to modify and ability to use user-supplied callback function.
- Lots of changes related to oofun: add oovar and oolin, now fixed oovars can be correctly handled
- enhanced iterfcn connection for scipy fmin_cobyla
- some doc updates for result structure
- new openopt API func: oosolver
- some code cleanup and bugfixes
- some other minor changes

**Backward incompatibilities:**

- instead of "from scikits.openopt import ..." now you should use "from openopt import ..."
- LSP has been renamed to NLLSP (Non-Linear Least Squares Problem)
- for oofuns support of ordinary variables (x) had been ceased (it's hard to keep maintaining), use oovars instead.

## 0.19 (2008-September-15)

- Some changes for NLP/NSP solver ralg (especially related to handling linear constraints Ax <= b, Aeq x = beq, lb <= x <= ub)
- Bugfix for ralg IPOPT linear constraints handling
- ALGENCAN v 2.0.x has been connected (v 1.0 is no longer supported, v 2.0.3 or later is required)
- bugfix for constrained NLSP graphic output (constrained nssolve isn't turned to latest ralg version yet)
- scale parameter for lpSolve (p.scale = {False} | True | 0 | 1)
- New OO class LLAVP (linear least absolute values aka linear least deviations)
- Improved handling of non-linear functions with restricted dom
- GLP (global) solver galileo now can handle integer problems (via p.useInteger = 1 or True)
- Another one GLP solver connected: pswarm
- Lots of work related to oofun concept (see OO Doc page for details)
- Add converters llsp2nlp, llavp2nsp
- Convenient handling of maximization problems (via p.goal = 'max' or 'maximum')
- Some code clean up and bugfixes

**Backward incompatibilities:**

- Changed objective function in LLSP
- MATLAB-style gradtol renamed to gtol (for to provide same syntax to scipy.optimize fmin_bfgs, fmin_cg and less-to-type)

## 0.18 (2008-June-15)

- connection to glpk MILP solver (requires cvxopt v >= 1.0)
- connection to NLP solver IPOPT (requires pyipopt installation, that is currently available for Linux only)
- major changes for ralg
- splitting non-linear constraints can benefit for some solvers
- unified text output for NLP solvers
- handling of maximization problems (via p.goal = 'max' or 'maximum')
- some bugfixes, lots of code cleanup

## 0.17 (2008-March-15)

- new classes: GLP (global problem), MMP (mini-max problem)
- several new solvers written: goldenSection, nsmm
- some more solvers connected: scipy_slsqp, bvls, galileo
- possibility to change default solver parameters
- user-defined callback functions
- changes in auto derivatives check
- "noise" parameter for noisy functions
- some changes to NLP/NSP solver ralg
- some changes in graphical output: initial estimations xlim, ylim
- scaling
- some bugfixes

## 0.15 (2007-December-15)

- some new classes
- several new solvers written
- some more solvers connected
- NLP/NSP solver ralg can handle constrained problems
- some bugfixes
- some enhancements in graphical output (especially for constrained problems)