55 const std::vector<int> & nEq,
56 const std::vector<int> & nIneq,
83 const Eigen::VectorXd &
result()
const;
99 int numberOfLevels()
const {
return useBounds_ ?
static_cast<int>(nEq_.size()) + 1 :
static_cast<int>(nEq_.size()); }
109 bool bounds_ =
false;
112 template<
typename Derived>
113 static bool willReallocate(
const Eigen::DenseBase<Derived> & M,
int rows,
int cols = 1);
122 return std::any_of(equalityConstraints_.begin(), equalityConstraints_.end(), [](
bool b) { return b; })
123 || std::any_of(inequalityConstraints_.begin(), inequalityConstraints_.end(), [](
bool b) { return b; })
128 virtual void initializeBuild_(
const std::vector<int> & nEq,
const std::vector<int> & nIneq,
bool useBounds) = 0;
138 virtual const Eigen::VectorXd &
result_()
const = 0;
161 template<
typename... Args>
162 void addAssignement(Args &&... args);
174 template<
typename... Args>
180 template<
typename K,
typename T>
187 bool useBounds_ =
false;
194 bool buildInProgress_;
203 std::vector<MapToAssignment> equalityConstraintToAssignments_;
204 std::vector<MapToAssignment> inequalityConstraintToAssignments_;
222 virtual std::unique_ptr<HLSSolverFactory>
clone()
const = 0;
223 virtual std::unique_ptr<HierarchicalLeastSquareSolver>
createSolver()
const = 0;
226 std::string solverName_;
229 template<
typename... Args>
231 { assignments_.emplace_back(
new MarkedAssignment(std::forward<Args>(args)...)); }
233 template<
typename Derived>
237 {
return M.rows() * M.cols() != rows * cols; }
#define TVM_DLLAPI
Definition: api.h:35
Definition: VariableVector.h:41
Definition: LinearConstraint.h:56
Definition: Substitutions.h:24
Definition: AssignmentTarget.h:37
Definition: Assignment.h:32
Definition: HierarchicalLeastSquareSolver.h:215
virtual std::unique_ptr< HLSSolverFactory > clone() const =0
virtual ~HLSSolverFactory()=default
HLSSolverFactory(const std::string &solverName)
Definition: HierarchicalLeastSquareSolver.h:217
virtual std::unique_ptr< HierarchicalLeastSquareSolver > createSolver() const =0
Definition: HierarchicalLeastSquareSolver.h:35
virtual void addEqualityConstraint_(LinearConstraintPtr cstr, SolvingRequirementsPtr req)=0
void process(const internal::SolverEvents &se)
virtual void updateEqualityTargetData(int lvl, scheme::internal::AssignmentTarget &target)=0
void addBound(LinearConstraintPtr bound)
virtual void setMinimumNorm_()=0
virtual void addIneqalityConstraint_(LinearConstraintPtr cstr, SolvingRequirementsPtr req)=0
virtual ImpactFromChanges resize_(const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds)=0
HierarchicalLeastSquareSolver & operator=(const HierarchicalLeastSquareSolver &)=delete
std::vector< MarkedAssignment * > AssignmentPtrVector
Definition: HierarchicalLeastSquareSolver.h:183
std::vector< int > nIneq_
Definition: HierarchicalLeastSquareSolver.h:189
std::vector< int > eqSize_
Definition: HierarchicalLeastSquareSolver.h:190
const hint::internal::Substitutions * substitutions() const
Definition: HierarchicalLeastSquareSolver.h:159
virtual void updateBoundTargetData(scheme::internal::AssignmentTarget &target)=0
virtual ~HierarchicalLeastSquareSolver()=default
virtual void addBound_(LinearConstraintPtr bound, RangePtr range, bool first)=0
virtual void printDiagnostic_() const =0
virtual void initializeBuild_(const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds)=0
HierarchicalLeastSquareSolver(bool verbose=false)
virtual void printProblemData_() const =0
int numberOfLevels() const
Definition: HierarchicalLeastSquareSolver.h:99
std::vector< std::unique_ptr< MarkedAssignment > > AssignmentVector
Definition: HierarchicalLeastSquareSolver.h:182
void startBuild(const VariableVector &x, const std::vector< int > &nEq, const std::vector< int > &nIneq, bool useBounds, const hint::internal::Substitutions *const subs=nullptr)
virtual Range nextEqualityConstraintRange_(int lvl, const constraint::abstract::LinearConstraint &cstr) const =0
virtual void postAssignmentProcess_()
Definition: HierarchicalLeastSquareSolver.h:136
virtual bool handleDoubleSidedConstraint_() const =0
virtual void resetBounds_()=0
void addConstraint(LinearConstraintPtr cstr, SolvingRequirementsPtr req)
int constraintSize(const constraint::abstract::LinearConstraint &c) const
virtual const Eigen::VectorXd & result_() const =0
const Eigen::VectorXd & result() const
std::vector< int > ineqSize_
Definition: HierarchicalLeastSquareSolver.h:191
virtual Range nextInequalityConstraintRange_(int lvl, const constraint::abstract::LinearConstraint &cstr) const =0
virtual void applyImpactLogic(ImpactFromChanges &impact)
virtual void preAssignmentProcess_()
Definition: HierarchicalLeastSquareSolver.h:135
virtual void removeBounds_(const Range &range)=0
map< constraint::abstract::LinearConstraint *, AssignmentPtrVector > MapToAssignment
Definition: HierarchicalLeastSquareSolver.h:184
HierarchicalLeastSquareSolver(const HierarchicalLeastSquareSolver &)=delete
virtual void updateInequalityTargetData(int lvl, scheme::internal::AssignmentTarget &target)=0
void addAssignement(Args &&... args)
Definition: HierarchicalLeastSquareSolver.h:230
utils::internal::map< K, T > map
Definition: HierarchicalLeastSquareSolver.h:181
const VariableVector & variables() const
Definition: HierarchicalLeastSquareSolver.h:158
std::vector< int > nEq_
Definition: HierarchicalLeastSquareSolver.h:188
Definition: SolverEvents.h:14
bool eq(const ObjType &l, const ObjType &r, MemberType ObjType::*member, Args &&... args)
Definition: Log.h:39
std::map< KeyWithId, Value, IdLess< KeyWithId >, Allocator > map
Definition: map.h:41
std::shared_ptr< constraint::abstract::LinearConstraint > LinearConstraintPtr
Definition: defs.h:59
std::shared_ptr< Range > RangePtr
Definition: defs.h:61
std::shared_ptr< requirements::SolvingRequirementsWithCallbacks > SolvingRequirementsPtr
Definition: defs.h:63
Definition: HierarchicalLeastSquareSolver.h:103
ImpactFromChanges & orAssign(const ImpactFromChanges &other)
bool any() const
Definition: HierarchicalLeastSquareSolver.h:120
ImpactFromChanges(const std::vector< bool > &eq, std::vector< bool > &ineq, bool bounds)
ImpactFromChanges(int nLvl)
ImpactFromChanges operator||(const ImpactFromChanges &other)
ImpactFromChanges operator||(bool b)
std::vector< bool > inequalityConstraints_
Definition: HierarchicalLeastSquareSolver.h:108
std::vector< bool > equalityConstraints_
Definition: HierarchicalLeastSquareSolver.h:107
static bool willReallocate(const Eigen::DenseBase< Derived > &M, int rows, int cols=1)
Definition: HierarchicalLeastSquareSolver.h:234
Definition: HierarchicalLeastSquareSolver.h:173
bool markedForRemoval
Definition: HierarchicalLeastSquareSolver.h:178
scheme::internal::Assignment assignment
Definition: HierarchicalLeastSquareSolver.h:177
MarkedAssignment(Args &&... args)
Definition: HierarchicalLeastSquareSolver.h:175