template<class PROBLEM, class POLICY, class INITSOLVER>
class gtsam::ActiveSetSolver< PROBLEM, POLICY, INITSOLVER >
This class implements the active set algorithm for solving convex Programming problems.
- Template Parameters
-
PROBLEM | Type of the problem to solve, e.g. LP (linear program) or QP (quadratic program). |
POLICY | specific detail policy tailored for the particular program |
INITSOLVER | Solver for an initial feasible solution of this problem. |
|
| ActiveSetSolver (const PROBLEM &problem) |
| Constructor.
|
|
std::pair< VectorValues, VectorValues > | optimize (const VectorValues &initialValues, const VectorValues &duals=VectorValues(), bool useWarmStart=false) const |
| Optimize with provided initial values For this version, it is the responsibility of the caller to provide a feasible initial value, otherwise, an exception will be thrown. More...
|
|
std::pair< VectorValues, VectorValues > | optimize () const |
| For this version the caller will not have to provide an initial value. More...
|
|
GaussianFactorGraph | buildDualGraph (const InequalityFactorGraph &workingSet, const VectorValues &delta) const |
| Just for testing... More...
|
|
GaussianFactorGraph | buildWorkingGraph (const InequalityFactorGraph &workingSet, const VectorValues &xk=VectorValues()) const |
| Build a working graph of cost, equality and active inequality constraints to solve at each iteration. More...
|
|
State | iterate (const State &state) const |
| Iterate 1 step, return a new state with a new workingSet and values.
|
|
InequalityFactorGraph | identifyActiveConstraints (const InequalityFactorGraph &inequalities, const VectorValues &initialValues, const VectorValues &duals=VectorValues(), bool useWarmStart=false) const |
| Identify active constraints based on initial values.
|
|
int | identifyLeavingConstraint (const InequalityFactorGraph &workingSet, const VectorValues &lambdas) const |
| Identifies active constraints that shouldn't be active anymore.
|
|
|
boost::tuple< double, int > | computeStepSize (const InequalityFactorGraph &workingSet, const VectorValues &xk, const VectorValues &p, const double &maxAlpha) const |
| Compute minimum step size alpha to move from the current point xk to the next feasible point along a direction p: x' = xk + alpha*p, where alpha \in [0,maxAlpha]. More...
|
|
template<typename FACTOR > |
TermsContainer | collectDualJacobians (Key key, const FactorGraph< FACTOR > &graph, const VariableIndex &variableIndex) const |
| Finds the active constraints in the given factor graph and returns the Dual Jacobians used to build a dual factor graph.
|
|
JacobianFactor::shared_ptr | createDualFactor (Key key, const InequalityFactorGraph &workingSet, const VectorValues &delta) const |
| Creates a dual factor from the current workingSet and the key of the the variable used to created the dual factor.
|
|
template<class PROBLEM , class POLICY , class INITSOLVER >
Compute minimum step size alpha to move from the current point xk
to the next feasible point along a direction p:
x' = xk + alpha*p, where alpha \in [0,maxAlpha].
For QP, maxAlpha = 1. For LP: maxAlpha = Inf.
- Returns
- a tuple of (minAlpha, closestFactorIndex) where closestFactorIndex is the closest inactive inequality constraint that blocks xk to move further and that has the minimum alpha, or (-1, maxAlpha) if there is no such inactive blocking constraint.
If there is a blocking constraint, the closest one will be added to the working set and become active in the next iteration.