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

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

Inheritance diagram for tvm::solver::abstract::HierarchicalLeastSquareSolver:

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

 HierarchicalLeastSquareSolver (bool verbose=false)
 
 HierarchicalLeastSquareSolver (const HierarchicalLeastSquareSolver &)=delete
 
HierarchicalLeastSquareSolveroperator= (const HierarchicalLeastSquareSolver &)=delete
 
virtual ~HierarchicalLeastSquareSolver ()=default
 
void startBuild (const VariableVector &x, const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds, const hint::internal::Substitutions *const subs=nullptr)
 
void finalizeBuild ()
 
void addBound (LinearConstraintPtr bound)
 
void addConstraint (LinearConstraintPtr cstr, SolvingRequirementsPtr req)
 
void setMinimumNorm ()
 
bool solve ()
 
const Eigen::VectorXd & result () const
 
int constraintSize (const constraint::abstract::LinearConstraint &c) const
 
void process (const internal::SolverEvents &se)
 
int numberOfLevels () const
 

Protected Member Functions

virtual void initializeBuild_ (const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds)=0
 
virtual ImpactFromChanges resize_ (const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds)=0
 
virtual void addBound_ (LinearConstraintPtr bound, RangePtr range, bool first)=0
 
virtual void addEqualityConstraint_ (LinearConstraintPtr cstr, SolvingRequirementsPtr req)=0
 
virtual void addIneqalityConstraint_ (LinearConstraintPtr cstr, SolvingRequirementsPtr req)=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_ (int lvl, const constraint::abstract::LinearConstraint &cstr) const =0
 
virtual Range nextInequalityConstraintRange_ (int lvl, const constraint::abstract::LinearConstraint &cstr) const =0
 
virtual void removeBounds_ (const Range &range)=0
 
virtual void updateEqualityTargetData (int lvl, scheme::internal::AssignmentTarget &target)=0
 
virtual void updateInequalityTargetData (int lvl, scheme::internal::AssignmentTarget &target)=0
 
virtual void updateBoundTargetData (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

bool useBounds_ = false
 
std::vector< int > nEq_
 
std::vector< int > nIneq_
 
std::vector< int > eqSize_
 
std::vector< int > ineqSize_
 

Detailed Description

Base class for a hierarchical least-square solver.

The problem to be solved has the general form lex.min. (||v_1||^2, ||w_1||^2, ...., ||v_p||^2, ||w_p||^2) s.t. A_i x + v_i = b_i i= 1..p l_i <= C_i x + w_i <= u_i i= 1..p

where l_i or u_i might be set to -inf or +inf.

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

Member Typedef Documentation

◆ AssignmentPtrVector

◆ AssignmentVector

◆ map

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

◆ MapToAssignment

Constructor & Destructor Documentation

◆ HierarchicalLeastSquareSolver() [1/2]

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

◆ HierarchicalLeastSquareSolver() [2/2]

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

◆ ~HierarchicalLeastSquareSolver()

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

Member Function Documentation

◆ addAssignement()

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

◆ addBound()

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

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

◆ addBound_()

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

◆ addConstraint()

void tvm::solver::abstract::HierarchicalLeastSquareSolver::addConstraint ( LinearConstraintPtr  cstr,
SolvingRequirementsPtr  req 
)

Add a constraint to the solver.

◆ addEqualityConstraint_()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::addEqualityConstraint_ ( LinearConstraintPtr  cstr,
SolvingRequirementsPtr  req 
)
protectedpure virtual

◆ addIneqalityConstraint_()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::addIneqalityConstraint_ ( LinearConstraintPtr  cstr,
SolvingRequirementsPtr  req 
)
protectedpure virtual

◆ applyImpactLogic()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::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::LexLSHierarchicalLeastSquareSolver.

◆ constraintSize()

int tvm::solver::abstract::HierarchicalLeastSquareSolver::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::HierarchicalLeastSquareSolver::finalizeBuild ( )

Finalize the build.

◆ handleDoubleSidedConstraint_()

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

◆ initializeBuild_()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::initializeBuild_ ( const std::vector< int > &  nEq,
const std::vector< int > &  nIneq,
bool  useBounds 
)
protectedpure virtual

◆ nextEqualityConstraintRange_()

virtual Range tvm::solver::abstract::HierarchicalLeastSquareSolver::nextEqualityConstraintRange_ ( int  lvl,
const constraint::abstract::LinearConstraint cstr 
) const
protectedpure virtual

◆ nextInequalityConstraintRange_()

virtual Range tvm::solver::abstract::HierarchicalLeastSquareSolver::nextInequalityConstraintRange_ ( int  lvl,
const constraint::abstract::LinearConstraint cstr 
) const
protectedpure virtual

◆ numberOfLevels()

int tvm::solver::abstract::HierarchicalLeastSquareSolver::numberOfLevels ( ) const
inline

Number of priority levels

◆ operator=()

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

◆ postAssignmentProcess_()

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

◆ preAssignmentProcess_()

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

◆ printDiagnostic_()

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

◆ printProblemData_()

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

◆ process()

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

Update the data according to the events

◆ removeBounds_()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::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::LexLSHierarchicalLeastSquareSolver.

◆ resetBounds_()

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

◆ resize_()

virtual ImpactFromChanges tvm::solver::abstract::HierarchicalLeastSquareSolver::resize_ ( const std::vector< int > &  nEq,
const std::vector< int > &  nIneq,
bool  useBounds 
)
protectedpure virtual

◆ result()

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

Get the result of the previous call to solve()

◆ result_()

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

◆ setMinimumNorm()

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

Set x = 0 as the last priority level of the problem.

Warning
This will overwrite any other constraint at this level. You should dedicated the last level to this, possibly by adding one more level.

◆ setMinimumNorm_()

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

◆ solve()

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

Solve the problem

Returns
true upon success of the resolution.

◆ solve_()

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

◆ startBuild()

void tvm::solver::abstract::HierarchicalLeastSquareSolver::startBuild ( const VariableVector x,
const std::vector< int > &  nEq,
const std::vector< int > &  nIneq,
bool  useBounds,
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.
nEqFor each priority level, the row size of A_i.
nIneqFor each priority level the row size of C_i.
useBoundsPresence of explicit bounds as the first priority level in the problem.
subsPossible substitutions used for solving.

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

◆ substitutions()

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

◆ updateBoundTargetData()

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

◆ updateEqualityTargetData()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::updateEqualityTargetData ( int  lvl,
scheme::internal::AssignmentTarget target 
)
protectedpure virtual

◆ updateInequalityTargetData()

virtual void tvm::solver::abstract::HierarchicalLeastSquareSolver::updateInequalityTargetData ( int  lvl,
scheme::internal::AssignmentTarget target 
)
protectedpure virtual

◆ variables()

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

Member Data Documentation

◆ eqSize_

std::vector<int> tvm::solver::abstract::HierarchicalLeastSquareSolver::eqSize_
protected

◆ ineqSize_

std::vector<int> tvm::solver::abstract::HierarchicalLeastSquareSolver::ineqSize_
protected

◆ nEq_

std::vector<int> tvm::solver::abstract::HierarchicalLeastSquareSolver::nEq_
protected

◆ nIneq_

std::vector<int> tvm::solver::abstract::HierarchicalLeastSquareSolver::nIneq_
protected

◆ useBounds_

bool tvm::solver::abstract::HierarchicalLeastSquareSolver::useBounds_ = false
protected

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