TVM  0.9.4
LSSOLLeastSquareSolver.h
Go to the documentation of this file.
1 /* Copyright 2017-2020 CNRS-AIST JRL and CNRS-UM LIRMM */
2 
3 #pragma once
4 
6 
7 #include <eigen-lssol/LSSOL_FP.h>
8 #include <eigen-lssol/LSSOL_LS.h>
9 
10 namespace tvm
11 {
12 
13 namespace solver
14 {
15 class LSSOLLSSolverFactory;
16 
19 {
20  TVM_ADD_NON_DEFAULT_OPTION(big_number, constant::big_number)
21  TVM_ADD_DEFAULT_OPTION(crashTol, double)
22  TVM_ADD_DEFAULT_OPTION(feasibilityMaxIter, int)
23  TVM_ADD_NON_DEFAULT_OPTION(feasibilityTol, 1e-6)
24  TVM_ADD_DEFAULT_OPTION(infiniteBnd, double)
25  TVM_ADD_DEFAULT_OPTION(infiniteStep, double)
26  TVM_ADD_DEFAULT_OPTION(optimalityMaxIter, int)
27  TVM_ADD_DEFAULT_OPTION(persistence, bool)
28  TVM_ADD_DEFAULT_OPTION(printLevel, int)
29  TVM_ADD_DEFAULT_OPTION(rankTol, double)
30  TVM_ADD_NON_DEFAULT_OPTION(verbose, false)
31  TVM_ADD_NON_DEFAULT_OPTION(warm, true)
32 
33 public:
35 };
36 
39 {
40 public:
42 
43 protected:
44  void initializeBuild_(int nObj, int nEq, int nIneq, bool useBounds) override;
45  ImpactFromChanges resize_(int nObj, int nEq, int nIneq, bool useBounds) override;
46  void addBound_(LinearConstraintPtr bound, RangePtr range, bool first) override;
49  void addObjective_(LinearConstraintPtr cstr, SolvingRequirementsPtr req, double additionalWeight) override;
50  void setMinimumNorm_() override;
51  void resetBounds_() override;
52  void preAssignmentProcess_() override;
53  void postAssignmentProcess_() override;
54  bool solve_() override;
55  const Eigen::VectorXd & result_() const override;
56  bool handleDoubleSidedConstraint_() const override { return true; }
60 
61  void removeBounds_(const Range & range) override;
66 
68 
69  void printProblemData_() const override;
70  void printDiagnostic_() const override;
71 
72 private:
73  using VectorXdTail = decltype(Eigen::VectorXd().tail(1));
74 
75  Eigen::MatrixXd A_;
76  Eigen::MatrixXd C_;
77  Eigen::VectorXd b_;
78  Eigen::VectorXd l_;
79  Eigen::VectorXd u_;
80 
81  VectorXdTail cl_; // part of l_ corresponding to general constraints
82  VectorXdTail cu_; // part of u_ corresponding to general constraints
83 
84  Eigen::LSSOL_LS ls_;
85  Eigen::LSSOL_FP fp_;
86 
87  bool autoMinNorm_;
88  double big_number_;
89 };
90 
95 {
96 public:
99 
100  std::unique_ptr<abstract::LSSolverFactory> clone() const override;
101  std::unique_ptr<abstract::LeastSquareSolver> createSolver() const override;
102 
103 private:
104  LSSOLLSSolverOptions options_;
105 };
106 
107 } // namespace solver
108 
109 } // namespace tvm
#define TVM_ADD_DEFAULT_OPTION(optionName, type)
Definition: Option.h:21
#define TVM_ADD_NON_DEFAULT_OPTION(optionName, defaultValue)
Definition: Option.h:30
#define TVM_DLLAPI
Definition: api.h:35
Definition: Range.h:19
Definition: LinearConstraint.h:56
Definition: AssignmentTarget.h:37
Definition: LSSOLLeastSquareSolver.h:95
std::unique_ptr< abstract::LeastSquareSolver > createSolver() const override
std::unique_ptr< abstract::LSSolverFactory > clone() const override
LSSOLLSSolverFactory(const LSSOLLSSolverOptions &options={})
Definition: LSSOLLeastSquareSolver.h:19
Definition: LSSOLLeastSquareSolver.h:39
Range nextEqualityConstraintRange_(const constraint::abstract::LinearConstraint &cstr) const override
void updateObjectiveTargetData(scheme::internal::AssignmentTarget &target) override
void updateInequalityTargetData(scheme::internal::AssignmentTarget &target) override
void printDiagnostic_() const override
void addEqualityConstraint_(LinearConstraintPtr cstr) override
void updateBoundTargetData(scheme::internal::AssignmentTarget &target) override
const Eigen::VectorXd & result_() const override
void updateEqualityTargetData(scheme::internal::AssignmentTarget &target) override
bool handleDoubleSidedConstraint_() const override
Definition: LSSOLLeastSquareSolver.h:56
void addObjective_(LinearConstraintPtr cstr, SolvingRequirementsPtr req, double additionalWeight) override
void initializeBuild_(int nObj, int nEq, int nIneq, bool useBounds) override
ImpactFromChanges resize_(int nObj, int nEq, int nIneq, bool useBounds) override
void printProblemData_() const override
void removeBounds_(const Range &range) override
LSSOLLeastSquareSolver(const LSSOLLSSolverOptions &options={})
Range nextInequalityConstraintRange_(const constraint::abstract::LinearConstraint &cstr) const override
void applyImpactLogic(ImpactFromChanges &impact)
Range nextObjectiveRange_(const constraint::abstract::LinearConstraint &cstr) const override
void addIneqalityConstraint_(LinearConstraintPtr cstr) override
void addBound_(LinearConstraintPtr bound, RangePtr range, bool first) override
Definition: LeastSquareSolver.h:220
Definition: LeastSquareSolver.h:37
Definition: Clock.h:12
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