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
- Powell - A good choice for problems where the slowness of nonlinear simplex is an issue but a gradient calculation is not available. It is not as robust as nonlinear simplex, but it converges to a solution faster.
- Conjugate Gradient - Very robust; however, it requires the gradient of the function. A numerical gradient can be used, but as with all numerical approximations accuracy of the solution suffers as a result.
- Nonlinear Simplex - Very accurate for low-dimensional optimization problems, and since it does not require a gradient calculation it can be used when that information is unavailable or a high-cost function. Nonlinear simplex algorithms are quick to come "in range" of the minimum, but often very slow to provide a high degree of accuracy. This slowness of convergence is a trade off for not using estimations of the function or gradient and the imprecision they include.
- Levenberg-Marquardt - The de facto standard for nonlinear parametric optimizations.
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:
- Dimensionality of function.
- Whether an analytic derivative is available.
- Cost of evaluating the function and its derivative.
- Efficiency vs. robustness.
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:
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.
How to Purchase
Email sales or call 303-444-2416 to purchase or for further product information.
Also visit the
pricing web page for details regarding pricing and licensing.