Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
MergeMPS.h
1#pragma once
2
3#include <optional>
4
5#include "antares-xpansion/benders/benders_core/SolverIO.h"
6#include "antares-xpansion/benders/benders_core/common.h"
7#include "antares-xpansion/benders/factories/WriterFactories.h"
8#include "antares-xpansion/helpers/solver_utils.h"
9
10constexpr char MERGE_MPS_LOGGER_CONTEXT[] = "MergeMPS";
11
13{
14public:
16 Logger logger,
17 std::shared_ptr<Output::OutputWriter> writer);
18
19 virtual ~AbstractMergeMPS() = default;
20
21 virtual void launch() = 0;
22
23protected:
24 void terminate(const std::string& location, const std::string& message) const;
25
26 void export_problem(const std::string& filename = "log_merged", bool export_lp = false) const;
27
28 [[nodiscard]] std::shared_ptr<SolverAbstract> get_local_solver(
29 const std::filesystem::path& root_dir,
30 const std::string& filename) const;
31 void multiply_obj_by_weight_factor(SolverAbstract& local_solver, double weight) const;
32 VariableMap merge_local_solver(SolverAbstract& local_solver,
33 const std::string& local_prefix,
34 const VariableMap& local_var_map,
35 const std::string& filename) const;
36
37 std::shared_ptr<Output::OutputWriter> writer_;
38 MergeMPSOptions options_;
39 Logger logger_;
40
41 const SolverFactory factory_;
42 SolverIO solver_io_;
43 std::shared_ptr<SolverAbstract> ptr_merged_solver_;
44};
45
47{
48public:
49 using AbstractMergeMPS::AbstractMergeMPS;
50
51 void launch() override;
52
53private:
54 void build_problem();
55 bool solve(int nb_threads = 16) const;
56 void output_solution(bool is_sol_optimal);
57
58 [[nodiscard]] double get_problem_obj_weight(int nb_subproblems, const std::string& name) const;
59 void add_coupling_constraints();
60
61 CouplingMap structure_;
62};
63
Definition MergeMPS.h:13
void multiply_obj_by_weight_factor(SolverAbstract &local_solver, double weight) const
Weights local solver's objective function by a given value.
Definition MergeMPS.cpp:63
void export_problem(const std::string &filename="log_merged", bool export_lp=false) const
Export problem into INPUTROOT/filename and optionally writes the lp variant We do it this way because...
Definition MergeMPS.cpp:164
VariableMap merge_local_solver(SolverAbstract &local_solver, const std::string &local_prefix, const VariableMap &local_var_map, const std::string &filename) const
Merges local to global solver.
Definition MergeMPS.cpp:114
void terminate(const std::string &location, const std::string &message) const
Interrupt the program and output current merged .lp and .mps files.
Definition MergeMPS.cpp:92
std::shared_ptr< SolverAbstract > get_local_solver(const std::filesystem::path &root_dir, const std::string &filename) const
Creates a local solver from a MPS file.
Definition MergeMPS.cpp:41
Definition MergeMPS.h:47
void launch() override
Merge and solve master and subproblems.
Definition MergeMPS.cpp:187
Definition SolverAbstract.h:203
Definition SolverFactory.h:41
Definition SolverIO.h:8
Definition launch.py:1
Definition common.h:181