Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
Worker.h
1#pragma once
2
3#include <filesystem>
4
5#include "IBendersProblemProvider.h"
6#include "SolverIO.h"
7#include "antares-xpansion/benders/output/OutputWriter.h"
8#include "antares-xpansion/multisolver_interface/Solver.h"
9#include "antares-xpansion/xpansion_interfaces/ILogger.h"
10#include "common.h"
11
18class Worker
19{
20public:
21 Worker(VariableMap variable_map, Logger logger, double cut_coefficient_tolerance);
22 void init(const std::string& solver_name,
23 int log_level,
24 const SolverLogManager& solver_log_manager,
25 ProblemsFormat format,
26 IBendersProblemProvider* benders_problem_provider);
27 virtual ~Worker() = default;
28
29 void get_value(double& lb) const;
30
31 void get_splex_num_of_ite_last(int& result) const;
32
33 void free();
34 void write_basis(const std::filesystem::path& filename) const;
35 [[nodiscard]] virtual std::shared_ptr<SolverAbstract> solver() const;
36
37public:
38 std::filesystem::path _base_filename;
39 VariableMap _name_to_id;
40 Int2Str _id_to_name;
42public:
43 void solve(int& lp_status,
44 const std::string& outputroot,
45 const std::string& output_master_mps_file_name,
46 std::shared_ptr<Output::OutputWriter> writer) const;
47 int RowIndex(const std::string& row_name) const;
48 void ChangeRhs(int id_row, double val) const;
49 void GetRhs(double* val, int id_row) const;
50 void AddRows(const std::vector<char>& qrtype_p,
51 const std::vector<double>& rhs_p,
52 const std::vector<double>& range_p,
53 const std::vector<int>& mstart_p,
54 const std::vector<int>& mclind_p,
55 const std::vector<double>& dmatval_p,
56 const std::vector<std::string>& row_names) const;
57
63 int Getnrows() const;
64
65 int Getncols() const;
66
67public:
68 std::shared_ptr<SolverAbstract> _solver = nullptr;
69 bool _is_master = false;
70
71 Logger logger_;
72
73private:
74 SolverIO solver_io_;
75 void writeProb(const std::filesystem::path& out) const;
76 double cut_coefficient_tolerance_;
77
78protected:
79 void roundIfWithinTolerance(std::vector<double>& values, int first, int last) const;
80};
Definition IBendersProblemProvider.h:7
Definition SolverIO.h:8
Definition SolverAbstract.h:20
Mother-class Worker.
Definition Worker.h:19
std::shared_ptr< SolverAbstract > _solver
Definition Worker.h:68
VariableMap _name_to_id
Definition Worker.h:39
void init(const std::string &solver_name, int log_level, const SolverLogManager &solver_log_manager, ProblemsFormat format, IBendersProblemProvider *benders_problem_provider)
Initialization of a problem.
Definition Worker.cpp:45
void solve(int &lp_status, const std::string &outputroot, const std::string &output_master_mps_file_name, std::shared_ptr< Output::OutputWriter > writer) const
Method to solve a problem.
Definition Worker.cpp:82
void get_splex_num_of_ite_last(int &result) const
Get the number of iteration needed to solve a problem.
Definition Worker.cpp:133
Int2Str _id_to_name
Definition Worker.h:40
int Getnrows() const
Returns the number of rows (constraints)
Definition Worker.cpp:169
void get_value(double &lb) const
Return the optimal value of a problem.
Definition Worker.cpp:25
void free()
Free the problem.
Definition Worker.cpp:11