Project
LinearSolver.h
Go to the documentation of this file.
1 #ifndef LINEARSOLVER_H
2 #define LINEARSOLVER_H
3 
10 #include "../app.h"
11 #include "../types/AlternativesPerformance.h"
12 #include "ortools/linear_solver/linear_solver.h"
13 #include "spdlog/spdlog.h"
14 
15 #include <string>
16 
35 class LinearSolver {
36 public:
46  float delta = 0.000001, std::string solver = "GLOP");
47 
48  ~LinearSolver();
49 
56 
66  void updateConstraints(std::vector<std::vector<std::vector<bool>>> x_matrix,
67  std::vector<std::vector<std::vector<bool>>> y_matrix);
68 
78  std::pair<float, std::vector<float>>
79  solve(std::vector<std::vector<std::vector<bool>>> x_matrix,
80  std::vector<std::vector<std::vector<bool>>> y_matrix);
81 
88 
94  operations_research::MPSolver *getSolver() const;
95 
101  std::vector<operations_research::MPVariable *> getWeights() const;
102 
108  std::vector<operations_research::MPVariable *> getXa() const;
109 
115  std::vector<operations_research::MPVariable *> getXap() const;
116 
122  std::vector<operations_research::MPVariable *> getYa() const;
123 
129  std::vector<operations_research::MPVariable *> getYap() const;
130 
136  Config getConf() const;
137 
138 private:
140  operations_research::MPSolver *solver;
141  std::string solver_name;
142  Config &conf;
143 
144  // value use to transform strict inequalities into non-strict ones
145  float delta;
146 
147  // variables
148  std::vector<operations_research::MPVariable *> x_a;
149  std::vector<operations_research::MPVariable *> x_ap;
150  std::vector<operations_research::MPVariable *> y_a;
151  std::vector<operations_research::MPVariable *> y_ap;
152  std::vector<operations_research::MPVariable *> weights;
153  operations_research::MPVariable *lambda;
154 
155  // constraints
156  std::vector<operations_research::MPConstraint *> x_constraints;
157  std::vector<operations_research::MPConstraint *> y_constraints;
158  std::vector<operations_research::MPConstraint *> weights_constraint;
159 };
160 
161 #endif
Dataset datastructure.
Definition: AlternativesPerformance.h:35
External linear solver wrapper.
Definition: LinearSolver.h:35
Config getConf() const
void updateConstraints(std::vector< std::vector< std::vector< bool >>> x_matrix, std::vector< std::vector< std::vector< bool >>> y_matrix)
std::pair< float, std::vector< float > > solve(std::vector< std::vector< std::vector< bool >>> x_matrix, std::vector< std::vector< std::vector< bool >>> y_matrix)
std::vector< operations_research::MPVariable * > getXa() const
LinearSolver(AlternativesPerformance &ap, Config &conf, float delta=0.000001, std::string solver="GLOP")
operations_research::MPSolver * getSolver() const
std::vector< operations_research::MPVariable * > getXap() const
std::vector< operations_research::MPVariable * > getYa() const
AlternativesPerformance & getAlternativesPerformance() const
void initializeSolver()
std::vector< operations_research::MPVariable * > getWeights() const
std::vector< operations_research::MPVariable * > getYap() const
High level configuration of the app.
Definition: config.h:20