A C++ Solver and Optimization Library

OptSolve++, in development since 1998, quickly brings powerful optimization capabilities to your C++ applications providing developers a more cost effective option than developing from scratch or using unproven solutions. Designed and developed for re-use, OptSolve++ offers a set of scalable and reliable pre-built software libraries that increase your productivity and substantially reduce your schedule and resource risk.

Powerful, standard optimization algorithms; easy-to-use object oriented design
OptSolve++ offers efficient and robust optimization of user-defined merit functions and an easy-to-use object oriented programming API. A canonical interface to the included optimizers is provided, making substituting one optimizer for another straight forward.

Taking full advantage of templating techniques and object-oriented design, OptSolve++ provides maximum flexibility in the choice of argument and return type for the merit function and in the configuration of options for the built-in algorithms.

OptSolve++ allows you to choose between algorithms requiring analytic derivatives and those that do not require gradient information. Functions for estimating numerical derivatives are also available.

With extensible object hierarchies that let you readily implement new algorithms or create a thin interface to existing C or C++ algorithms, OptSolve++ helps accelerate project deployment by reducing the planning, development and testing workload.

OptSolve++ library of nonlinear optimization algorithms

The choice of which optimizer to use depends on the type of function to be solved, as well as the information present about that function and its derivatives. The four main considerations are:

OptSolve++ Features and Benefits

Features

Benefits

Nonlinear Solvers for 1-D and N-D functions Provides versatility.
  • Offers a modified Newton-Raphson solver, using a Broyden technique to update the Jacobian.
  • Secant solver for 1-D functions.
Nonlinear Optimization Algorithms for N-D Functions Allows you to the define linear and nonlinear algorithms used in optimization.
  • Nonlinear simplex (no derivatives required).
  • Powell (no derivatives required).
  • Conjugate gradient (requires gradient of the function).
  • Levenberg-Marquardt - for nonlinear least squares problems - can use Broyden's method to estimate the Jacobian if function gradients are not available.
  • Simple bound constraints are imposed through a variable transformation approach.
Flexible Interface Offers ease-of-use through a common, function-like interface for all optimization algorithms.
  • Calls the solve() method of an optimizer or solver object.
  • Optimizer or solver object can be instantiated by passing it one or more C++ function pointers, plus an integer specifying the dimension of the space.
Offers complete control of the optimization or root-finding process.
Exception Handling Helps ensure graceful failure.
Extensible Object Hierarchies Can be readily extended to implement new algorithms or linked to existing C or C++ algorithms.
  • High-level implementation options offer unconstrained optimization for algorithms.
  • All methods for 1-D optimizers are templated over both the argument type and the return type.
  • Multidimensional optimizers are templated over return type and over the container type, making them "container free".

OptSolve++ is a cost effective solution
OptSolve++ is not only a best in class solution, it is also most economical solution available when considering cost and time savings. OptSolve++ is more cost-effective than developing from scratch or licensing large numerical packages and is more time efficient than using less proven free libraries.

Write it yourself

Download "free" library

OptSolve++

Learn characteristics and pitfalls of solvers Find, evaluate and choose code base License OptSolve++
Write code and tests Learn code, perhaps with limited or non-existent documentation and usage examples. Quickly learn code, using documentation, examples and leverage well-designed, canonical interfaces
Minimally document code Maintain code when needed, or try to get update Product commitment means regular updates, high quality documentation, examples and active user community
Minimally test code Run test suite, if provided OptSolve++ rigorously tested, and used by hundreds of developers
Create build environment for required platforms Possibly port build environment Pre-built static and dynamic libraries provided for a variety of common platforms; OptSolve++ Pro includes source and cross-platform build tools
Maintain as needed, when you have time Maintenance as developers volunteer Commitment to customer service

Platform and Compiler Options
OptSolve++ and OptSolve++ Pro are supported with these platform/compiler combinations:

Platforms

Compiler

Windows 2000/XP Microsoft Visual Studio.NET
Linux (Redhat 9, Mandrake 10, SuSE 9) gcc 3.3 and higher
Mac OS X 10.3 (Panther) gcc 3.3

Support and Maintenance Services
We offer excellent support and documentation as well as a long-term commitment to the product, exemplified by our substantial user base.