Optimization::Solver::PLDPSolver Class Reference

#include <Mathematics/PLDPSolver.hh>

Public Member Functions

 PLDPSolver (unsigned int CardU, double *iPu, double *Px, double *Pu, double *iLQ)
 Constructor. More...
 
 ~PLDPSolver ()
 Destructor. More...
 
int SolveProblem (double *CstPartOfTheCostFunction, unsigned int NbOfConstraints, double *LinearPartOfConstraints, double *CstPartOfConstraints, double *ZMPRef, double *XkYk, double *X, std::vector< int > &SimilarConstraint, unsigned int NumberOfRemovedConstraints, bool StartingSequence)
 Solve the optimization problem. More...
 

Protected Member Functions

void InitializeSolver ()
 
void AllocateMemoryForSolver ()
 
double ComputeAlpha (vector< unsigned int > &NewActivatedConstraints, vector< int > &SimilarConstraint)
 
void StoreCurrentZMPSolution (double *XkYk)
 
void WriteCurrentZMPSolution (string filename, double *XkYk)
 
Initial solution methods related
int ComputeInitialSolution (double *ZMPRef, double *XkYk, bool StartingSequence)
 
int PrecomputeiPuPx ()
 
Projected descent direction methods related
int ComputeProjectedDescentDirection ()
 Compute Projected descent direction. More...
 
int ForwardSubstitution ()
 Forward substitution. First Phase EE^t v2 = v1 <-> LL^t v2 = v1 Now solving L y = v1. More...
 
int BackwardSubstitution ()
 Compute v2 q (14b) in Dimitrov 2009. Second phase a Now solving LL^t v2 = v1 <-> L y = v1 with L^t v2 = y y solved with first phase. So now we are looking for v2. More...
 

Detailed Description

This class implements a two stage strategy to solve the following optimal problem:

Constructor & Destructor Documentation

◆ PLDPSolver()

PLDPSolver::PLDPSolver ( unsigned int  CardU,
double *  iPu,
double *  Px,
double *  Pu,
double *  iLQ 
)

Constructor.

◆ ~PLDPSolver()

PLDPSolver::~PLDPSolver ( )

Destructor.

Member Function Documentation

◆ AllocateMemoryForSolver()

void PLDPSolver::AllocateMemoryForSolver ( )
protected

Allocate memory for solver.

◆ BackwardSubstitution()

int PLDPSolver::BackwardSubstitution ( )
protected

Compute v2 q (14b) in Dimitrov 2009. Second phase a Now solving LL^t v2 = v1 <-> L y = v1 with L^t v2 = y y solved with first phase. So now we are looking for v2.

◆ ComputeAlpha()

double PLDPSolver::ComputeAlpha ( vector< unsigned int > &  NewActivatedConstraints,
vector< int > &  SimilarConstraint 
)
protected

Detecting violated constraints

◆ ComputeInitialSolution()

int PLDPSolver::ComputeInitialSolution ( double *  ZMPRef,
double *  XkYk,
bool  StartingSequence 
)
protected

Compute the initial solution

The initial solution of the problem is given by eq(14) Dimitar ICRA 2008 U0 = iPu * Px [Xkt Ykt]t + iPu * ZMPRef The only part which can not be precomputed is ZMPRef.

◆ ComputeProjectedDescentDirection()

int PLDPSolver::ComputeProjectedDescentDirection ( )
protected

Compute Projected descent direction.

◆ ForwardSubstitution()

int PLDPSolver::ForwardSubstitution ( )
protected

Forward substitution. First Phase EE^t v2 = v1 <-> LL^t v2 = v1 Now solving L y = v1.

◆ InitializeSolver()

void PLDPSolver::InitializeSolver ( )
protected

Initialize the internal variables of the class.

◆ PrecomputeiPuPx()

int PLDPSolver::PrecomputeiPuPx ( )
protected

Precompite iPuPx

◆ SolveProblem()

int PLDPSolver::SolveProblem ( double *  CstPartOfTheCostFunction,
unsigned int  NbOfConstraints,
double *  LinearPartOfConstraints,
double *  CstPartOfConstraints,
double *  ZMPRef,
double *  XkYk,
double *  X,
std::vector< int > &  SimilarConstraint,
unsigned int  NumberOfRemovedConstraints,
bool  StartingSequence 
)

Solve the optimization problem.

Initialization de cholesky.

Step two: Compute the projected descent direction.

Step three : Compute alpha

Compute new solution.

◆ StoreCurrentZMPSolution()

void PLDPSolver::StoreCurrentZMPSolution ( double *  XkYk)
protected

Store the current ZMP solution for hot start purposes.

◆ WriteCurrentZMPSolution()

void PLDPSolver::WriteCurrentZMPSolution ( string  filename,
double *  XkYk 
)
protected

Write current ZMP ref trajectory associated with current value of m_Vk.


The documentation for this class was generated from the following files: