Class ConvexSolver

java.lang.Object
org.ojalgo.optimisation.GenericSolver
org.ojalgo.optimisation.convex.ConvexSolver
All Implemented Interfaces:
Optimisation, Optimisation.Solver
Direct Known Subclasses:
BasePrimitiveSolver, IterativeRefinementSolver

public abstract class ConvexSolver extends GenericSolver
ConvexSolver solves optimisation problems of the form:

min 1/2 [X]T[Q][X] - [C]T[X]
when [AE][X] == [BE]
and [AI][X] invalid input: '<'= [BI]

The matrix [Q] is assumed to be symmetric (it must be made that way) and positive (semi)definite:

  • If [Q] is positive semidefinite, then the objective function is convex: In this case the quadratic program has a global minimizer if there exists some feasible vector [X] (satisfying the constraints) and if the objective function is bounded below on the feasible region.
  • If [Q] is positive definite and the problem has a feasible solution, then the global minimizer is unique.

The general recommendation is to construct optimisation problems using ExpressionsBasedModel and not worry about solver details. If you do want to instantiate a convex solver directly use the ConvexSolver.Builder class. It will return an appropriate subclass for you.

When the KKT matrix is nonsingular, there is a unique optimal primal-dual pair (x,l). If the KKT matrix is singular, but the KKT system is still solvable, any solution yields an optimal pair (x,l). If the KKT system is not solvable, the quadratic optimization problem is unbounded below or infeasible.