#include <LPInitSolver.h>
Public Member Functions | |
LPInitSolver (const LP &lp) | |
Construct with an LP problem. More... | |
VectorValues | solve () const |
Private Member Functions | |
InequalityFactorGraph | addSlackVariableToInequalities (Key yKey, const InequalityFactorGraph &inequalities) const |
Turn Cx <= d into Cx - y <= d factors. More... | |
LP::shared_ptr | buildInitialLP (Key yKey) const |
build initial LP More... | |
GaussianFactorGraph::shared_ptr | buildInitOfInitGraph () const |
std::vector< std::pair< Key, Matrix > > | collectTerms (const LinearInequality &factor) const |
Collect all terms of a factor into a container. More... | |
double | compute_y0 (const VectorValues &x0) const |
y = max_j ( Cj*x0 - dj ) – due to the inequality constraints y >= Cx - d More... | |
Private Attributes | |
const LP & | lp_ |
Friends | |
class | LPInitSolverInitializationTest |
This LPInitSolver implements the strategy in Matlab: http://www.mathworks.com/help/optim/ug/linear-programming-algorithms.html#brozyzb-9 Solve for x and y: min y st Ax = b Cx - y <= d where , , and Ax = b and Cx <= d is the constraints of the original problem.
If the solution for this problem {x*,y*} has y* <= 0, we'll have x* a feasible initial point of the original problem otherwise, if y* > 0 or the problem has no solution, the original problem is infeasible.
The initial value of this initial problem can be found by solving min ||x||^2 s.t. Ax = b to have a solution x0 then y = max_j ( Cj*x0 - dj ) – due to the constraints y >= Cx - d
WARNING: If some xj in the inequality constraints does not exist in the equality constraints, set them as zero for now. If that is the case, the original problem doesn't have a unique solution (it could be either infeasible or unbounded). So, if the initialization fails because we enforce xj=0 in the problematic inequality constraint, we can't conclude that the problem is infeasible. However, whether it is infeasible or unbounded, we don't have a unique solution anyway.
Definition at line 53 of file LPInitSolver.h.
|
inline |
Construct with an LP problem.
Definition at line 59 of file LPInitSolver.h.
|
private |
Turn Cx <= d into Cx - y <= d factors.
Definition at line 96 of file LPInitSolver.cpp.
|
private |
build initial LP
Definition at line 51 of file LPInitSolver.cpp.
|
private |
Build the following graph to solve for an initial value of the initial problem min ||x||^2 s.t. Ax = b
Definition at line 62 of file LPInitSolver.cpp.
|
private |
Collect all terms of a factor into a container.
Definition at line 86 of file LPInitSolver.cpp.
|
private |
y = max_j ( Cj*x0 - dj ) – due to the inequality constraints y >= Cx - d
Definition at line 76 of file LPInitSolver.cpp.
VectorValues gtsam::LPInitSolver::solve | ( | ) | const |
Definition at line 27 of file LPInitSolver.cpp.
|
friend |
Definition at line 86 of file LPInitSolver.h.
|
private |
Definition at line 55 of file LPInitSolver.h.