TVM  0.9.4
tvm::solver::abstract::LeastSquareSolver Class Referenceabstract

#include <tvm/solver/abstract/LeastSquareSolver.h>

Inheritance diagram for tvm::solver::abstract::LeastSquareSolver:

Classes

struct  ImpactFromChanges
 
struct  MarkedAssignment
 

Public Types

template<typename K , typename T >
using map = utils::internal::map< K, T >
 
using AssignmentVector = std::vector< std::unique_ptr< MarkedAssignment > >
 
using AssignmentPtrVector = std::vector< MarkedAssignment * >
 
using MapToAssignment = map< constraint::abstract::LinearConstraint *, AssignmentPtrVector >
 

Public Member Functions

 LeastSquareSolver (bool verbose=false)
 
 LeastSquareSolver (const LeastSquareSolver &)=delete
 
LeastSquareSolveroperator= (const LeastSquareSolver &)=delete
 
virtual ~LeastSquareSolver ()=default
 
void startBuild (const VariableVector &x, int nObj, int nEq, int nIneq, bool useBounds=true, const hint::internal::Substitutions *const subs=nullptr)
 
void finalizeBuild ()
 
void addBound (LinearConstraintPtr bound)
 
void addConstraint (LinearConstraintPtr cstr)
 
void addObjective (LinearConstraintPtr obj, SolvingRequirementsPtr req, double additionalWeight=1)
 
void setMinimumNorm ()
 
bool solve ()
 
const Eigen::VectorXd & result () const
 
int constraintSize (const constraint::abstract::LinearConstraint &c) const
 
void process (const internal::SolverEvents &se)
 

Protected Member Functions

virtual void initializeBuild_ (int nObj, int nEq, int nIneq, bool useBounds)=0
 
virtual ImpactFromChanges resize_ (int nObj, int nEq, int nIneq, bool useBounds)=0
 
virtual void addBound_ (LinearConstraintPtr bound, RangePtr range, bool first)=0
 
virtual void addEqualityConstraint_ (LinearConstraintPtr cstr)=0
 
virtual void addIneqalityConstraint_ (LinearConstraintPtr cstr)=0
 
virtual void addObjective_ (LinearConstraintPtr obj, SolvingRequirementsPtr req, double additionalWeight=1)=0
 
virtual void setMinimumNorm_ ()=0
 
virtual void resetBounds_ ()=0
 
virtual void preAssignmentProcess_ ()
 
virtual void postAssignmentProcess_ ()
 
virtual bool solve_ ()=0
 
virtual const Eigen::VectorXd & result_ () const =0
 
virtual bool handleDoubleSidedConstraint_ () const =0
 
virtual Range nextEqualityConstraintRange_ (const constraint::abstract::LinearConstraint &cstr) const =0
 
virtual Range nextInequalityConstraintRange_ (const constraint::abstract::LinearConstraint &cstr) const =0
 
virtual Range nextObjectiveRange_ (const constraint::abstract::LinearConstraint &cstr) const =0
 
virtual void removeBounds_ (const Range &range)=0
 
virtual void updateEqualityTargetData (scheme::internal::AssignmentTarget &target)=0
 
virtual void updateInequalityTargetData (scheme::internal::AssignmentTarget &target)=0
 
virtual void updateBoundTargetData (scheme::internal::AssignmentTarget &target)=0
 
virtual void updateObjectiveTargetData (scheme::internal::AssignmentTarget &target)=0
 
virtual void applyImpactLogic (ImpactFromChanges &impact)
 
virtual void printProblemData_ () const =0
 
virtual void printDiagnostic_ () const =0
 
const VariableVectorvariables () const
 
const hint::internal::Substitutionssubstitutions () const
 
template<typename... Args>
void addAssignement (Args &&... args)
 

Protected Attributes

int nEq_
 
int nIneq_
 
int nObj_
 
int objSize_
 
int eqSize_
 
int ineqSize_
 

Detailed Description

Base class for a (constrained) least-square solver.

The problem to be solved has the general form min. ||Ax-b||^2 s.t. C_e x = d l <= C_i x <= u xl <= x <= xu

where l or u might be set to -inf or +inf, and the explicit bounds are optional.

When deriving this class, also remember to derive the factory class LSSolverFactory as well.

Member Typedef Documentation

◆ AssignmentPtrVector

◆ AssignmentVector

◆ map

template<typename K , typename T >
using tvm::solver::abstract::LeastSquareSolver::map = utils::internal::map<K, T>

◆ MapToAssignment

Constructor & Destructor Documentation

◆ LeastSquareSolver() [1/2]

tvm::solver::abstract::LeastSquareSolver::LeastSquareSolver ( bool  verbose = false)

◆ LeastSquareSolver() [2/2]

tvm::solver::abstract::LeastSquareSolver::LeastSquareSolver ( const LeastSquareSolver )
delete

◆ ~LeastSquareSolver()

virtual tvm::solver::abstract::LeastSquareSolver::~LeastSquareSolver ( )
virtualdefault

Member Function Documentation

◆ addAssignement()

template<typename... Args>
void tvm::solver::abstract::LeastSquareSolver::addAssignement ( Args &&...  args)
inlineprotected

◆ addBound()

void tvm::solver::abstract::LeastSquareSolver::addBound ( LinearConstraintPtr  bound)

Add a bound constraint to the solver. If multiple bounds appears on the same variable, their intersection is taken.

◆ addBound_()

virtual void tvm::solver::abstract::LeastSquareSolver::addBound_ ( LinearConstraintPtr  bound,
RangePtr  range,
bool  first 
)
protectedpure virtual

◆ addConstraint()

void tvm::solver::abstract::LeastSquareSolver::addConstraint ( LinearConstraintPtr  cstr)

Add a constraint to the solver.

◆ addEqualityConstraint_()

virtual void tvm::solver::abstract::LeastSquareSolver::addEqualityConstraint_ ( LinearConstraintPtr  cstr)
protectedpure virtual

◆ addIneqalityConstraint_()

virtual void tvm::solver::abstract::LeastSquareSolver::addIneqalityConstraint_ ( LinearConstraintPtr  cstr)
protectedpure virtual

◆ addObjective()

void tvm::solver::abstract::LeastSquareSolver::addObjective ( LinearConstraintPtr  obj,
SolvingRequirementsPtr  req,
double  additionalWeight = 1 
)

Add an objective to the solver with given requirements

Parameters
objThe linear expression added in least-square form
reqThe solving requirements. Only the weight-related requirements will be taken into account
additionalWeightAn additional factor that will multiply the other weights.

◆ addObjective_()

virtual void tvm::solver::abstract::LeastSquareSolver::addObjective_ ( LinearConstraintPtr  obj,
SolvingRequirementsPtr  req,
double  additionalWeight = 1 
)
protectedpure virtual

◆ applyImpactLogic()

virtual void tvm::solver::abstract::LeastSquareSolver::applyImpactLogic ( ImpactFromChanges impact)
protectedvirtual

If for a derived class, the change on a category implies the change on others, impact is changed accordingly.

Reimplemented in tvm::solver::QuadprogLeastSquareSolver, tvm::solver::QLDLeastSquareSolver, tvm::solver::LSSOLLeastSquareSolver, and tvm::solver::LexLSLeastSquareSolver.

◆ constraintSize()

int tvm::solver::abstract::LeastSquareSolver::constraintSize ( const constraint::abstract::LinearConstraint c) const

Return the constraint size for the solver. This can be different from the actual constraint size if the constraint is a double-sided inequality but the solver only accept simple sided constraints

◆ finalizeBuild()

void tvm::solver::abstract::LeastSquareSolver::finalizeBuild ( )

Finalize the build.

◆ handleDoubleSidedConstraint_()

virtual bool tvm::solver::abstract::LeastSquareSolver::handleDoubleSidedConstraint_ ( ) const
protectedpure virtual

◆ initializeBuild_()

virtual void tvm::solver::abstract::LeastSquareSolver::initializeBuild_ ( int  nObj,
int  nEq,
int  nIneq,
bool  useBounds 
)
protectedpure virtual

◆ nextEqualityConstraintRange_()

virtual Range tvm::solver::abstract::LeastSquareSolver::nextEqualityConstraintRange_ ( const constraint::abstract::LinearConstraint cstr) const
protectedpure virtual

◆ nextInequalityConstraintRange_()

virtual Range tvm::solver::abstract::LeastSquareSolver::nextInequalityConstraintRange_ ( const constraint::abstract::LinearConstraint cstr) const
protectedpure virtual

◆ nextObjectiveRange_()

virtual Range tvm::solver::abstract::LeastSquareSolver::nextObjectiveRange_ ( const constraint::abstract::LinearConstraint cstr) const
protectedpure virtual

◆ operator=()

LeastSquareSolver& tvm::solver::abstract::LeastSquareSolver::operator= ( const LeastSquareSolver )
delete

◆ postAssignmentProcess_()

virtual void tvm::solver::abstract::LeastSquareSolver::postAssignmentProcess_ ( )
inlineprotectedvirtual

◆ preAssignmentProcess_()

virtual void tvm::solver::abstract::LeastSquareSolver::preAssignmentProcess_ ( )
inlineprotectedvirtual

◆ printDiagnostic_()

virtual void tvm::solver::abstract::LeastSquareSolver::printDiagnostic_ ( ) const
protectedpure virtual

◆ printProblemData_()

virtual void tvm::solver::abstract::LeastSquareSolver::printProblemData_ ( ) const
protectedpure virtual

◆ process()

void tvm::solver::abstract::LeastSquareSolver::process ( const internal::SolverEvents se)

Update the data according to the events

◆ removeBounds_()

virtual void tvm::solver::abstract::LeastSquareSolver::removeBounds_ ( const Range range)
protectedpure virtual

Remove the bounds on variable at given range from the data passed to the solver (e.g. set the bounds to -/+Inf).

Implemented in tvm::solver::QuadprogLeastSquareSolver, tvm::solver::LSSOLLeastSquareSolver, tvm::solver::LexLSLeastSquareSolver, and tvm::solver::QLDLeastSquareSolver.

◆ resetBounds_()

virtual void tvm::solver::abstract::LeastSquareSolver::resetBounds_ ( )
protectedpure virtual

◆ resize_()

virtual ImpactFromChanges tvm::solver::abstract::LeastSquareSolver::resize_ ( int  nObj,
int  nEq,
int  nIneq,
bool  useBounds 
)
protectedpure virtual

◆ result()

const Eigen::VectorXd& tvm::solver::abstract::LeastSquareSolver::result ( ) const

Get the result of the previous call to solve()

◆ result_()

virtual const Eigen::VectorXd& tvm::solver::abstract::LeastSquareSolver::result_ ( ) const
protectedpure virtual

◆ setMinimumNorm()

void tvm::solver::abstract::LeastSquareSolver::setMinimumNorm ( )

Set ||x||^2 as the least square objective of the problem.

Warning
this replace previously added objectives.

◆ setMinimumNorm_()

virtual void tvm::solver::abstract::LeastSquareSolver::setMinimumNorm_ ( )
protectedpure virtual

◆ solve()

bool tvm::solver::abstract::LeastSquareSolver::solve ( )

Solve the problem

Returns
true upon success of the resolution.

◆ solve_()

virtual bool tvm::solver::abstract::LeastSquareSolver::solve_ ( )
protectedpure virtual

◆ startBuild()

void tvm::solver::abstract::LeastSquareSolver::startBuild ( const VariableVector x,
int  nObj,
int  nEq,
int  nIneq,
bool  useBounds = true,
const hint::internal::Substitutions *const  subs = nullptr 
)

Open a build sequence for a problem on the current variables (set through the inherited ProblemComputationData::addVariable) with the specified dimensions, allocating the memory needed.

Parameters
xThe variables of the problem. The object need to be valid until ::finalizeBuild is called.
nObjRow size of A.
nEqRow size of C_e.
nIneqRow size of C_i.
useBoundsPresence of explicit bounds in the problem.
subsPossible substitutions used for solving.

Once a build is started, objective, constraints and bounds can be added through ::addObjective, ::addConstraint and ::addBound, until ::finalizeBuild is called.

◆ substitutions()

const hint::internal::Substitutions* tvm::solver::abstract::LeastSquareSolver::substitutions ( ) const
inlineprotected

◆ updateBoundTargetData()

virtual void tvm::solver::abstract::LeastSquareSolver::updateBoundTargetData ( scheme::internal::AssignmentTarget target)
protectedpure virtual

◆ updateEqualityTargetData()

virtual void tvm::solver::abstract::LeastSquareSolver::updateEqualityTargetData ( scheme::internal::AssignmentTarget target)
protectedpure virtual

◆ updateInequalityTargetData()

virtual void tvm::solver::abstract::LeastSquareSolver::updateInequalityTargetData ( scheme::internal::AssignmentTarget target)
protectedpure virtual

◆ updateObjectiveTargetData()

virtual void tvm::solver::abstract::LeastSquareSolver::updateObjectiveTargetData ( scheme::internal::AssignmentTarget target)
protectedpure virtual

◆ variables()

const VariableVector& tvm::solver::abstract::LeastSquareSolver::variables ( ) const
inlineprotected

Member Data Documentation

◆ eqSize_

int tvm::solver::abstract::LeastSquareSolver::eqSize_
protected

◆ ineqSize_

int tvm::solver::abstract::LeastSquareSolver::ineqSize_
protected

◆ nEq_

int tvm::solver::abstract::LeastSquareSolver::nEq_
protected

◆ nIneq_

int tvm::solver::abstract::LeastSquareSolver::nIneq_
protected

◆ nObj_

int tvm::solver::abstract::LeastSquareSolver::nObj_
protected

◆ objSize_

int tvm::solver::abstract::LeastSquareSolver::objSize_
protected

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