A C++ Solver and Optimization Library

OptSolve++ 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 Algorithm
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++ 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. See the OptSolve++ Configuration Matrix for product compatibility information.

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

Download

If you would like to examine OptSolve++ yourself, you can obtain the software from the OptSolve++ download page.

 

Learn More About OptSolve++

  • FAQ

OptSolve++

Frequently Asked Questions


What is OptSolve++?

OptSolve++ is a suite of C++ class libraries designed for efficient and robust optimization of nonlinear user-specified functions. OptSolve++ has a convenient interface for controlling the optimization process. The user can allow OptSolve++ to make reasonable default choices for the necessary parameters or assume complete control of each step. The user must provide a C++ function that implements the user-defined merit function to be minimized.


Where should I send my questions related to OptSolve++?

Address technical questions via email to the OptSolve++ discussion list; Address all other questions to sales@txcorp.com.


Is non-commercial licensing available?

Yes. OptSolve++ is available for no cost for academic, non-commercial use.


What is the difference between OptSolve++ and OptSolve++ Pro?

When you purchase OptSolve++, you will receive pre-build static and dynamic libraries for your selected platform. OptSolve++ Pro provides pre-built libraries, source code and cross-platform build scripts for all supported platforms.