Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
ProblemModifier.h
1
2#ifndef ANTARESXPANSION_PROBLEMMODIFIER_H
3#define ANTARESXPANSION_PROBLEMMODIFIER_H
4
5#include "antares-xpansion/multisolver_interface/SolverAbstract.h"
6
7#include <map>
8#include <memory>
9#include <vector>
10
11#include "antares-xpansion/lpnamer/model/ActiveLinks.h"
12#include "antares-xpansion/lpnamer/helper/ColumnToChange.h"
13#include "antares-xpansion/xpansion_interfaces/LogUtils.h"
14#include "antares-xpansion/lpnamer/model/Problem.h"
15#include "antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h"
16
18 public:
20 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger)
21 : logger_(logger) {}
22
23 void changeProblem(
24 Problem *problem, const std::vector<ActiveLink> &active_links,
25 const std::map<linkId, ColumnsToChange> &p_ntc_columns,
26 const std::map<linkId, ColumnsToChange> &p_direct_cost_columns,
27 const std::map<linkId, ColumnsToChange> &p_indirect_cost_columns);
28
29 unsigned int get_candidate_col_id(const std::string &cand_name) const;
30 bool has_candidate_col_id(const std::string &cand_name) const;
32 : public LogUtils::XpansionError<std::runtime_error> {
33 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
34 };
35
36 private:
37 void changeProblem(
38 const std::vector<ActiveLink> &active_links,
39 const std::map<linkId, ColumnsToChange> &p_ntc_columns,
40 const std::map<linkId, ColumnsToChange> &p_direct_cost_columns,
41 const std::map<linkId, ColumnsToChange> &p_indirect_cost_columns);
42
43 void remove_bounds_for(const std::vector<int> &col_ids) const;
44
45 void change_upper_bounds_to_pos_inf(const std::vector<int> &col_id) const;
46
47 void change_lower_bounds_to_neg_inf(const std::vector<int> &col_id) const;
48
49 void add_new_columns(const std::vector<Candidate> &candidates);
50
51 void add_new_ntc_constraints(
52 const std::vector<ActiveLink> &active_links,
53 const std::map<linkId, ColumnsToChange> &p_ntc_columns);
54
55 void add_new_direct_cost_constraints(
56 const std::vector<ActiveLink> &active_links,
57 const std::map<linkId, ColumnsToChange> &p_cost_columns);
58
59 void add_new_indirect_cost_constraints(
60 const std::vector<ActiveLink> &active_links,
61 const std::map<linkId, ColumnsToChange> &p_cost_columns);
62
63 Problem *_math_problem;
64 std::map<std::string, unsigned int> _candidate_col_id;
65 unsigned int _n_cols_at_start = 0;
66
67 void add_direct_profile_column_constraint(std::vector<double> &dmatval,
68 std::vector<int> &colind,
69 std::vector<char> &rowtype,
70 std::vector<double> &rhs,
71 std::vector<int> &rstart,
72 const ActiveLink &link,
73 const ColumnToChange &column);
74
75 void add_indirect_profile_ntc_column_constraint(std::vector<double> &dmatval,
76 std::vector<int> &colind,
77 std::vector<char> &rowtype,
78 std::vector<double> &rhs,
79 std::vector<int> &rstart,
80 const ActiveLink &link,
81 const ColumnToChange &column);
82 void add_indirect_cost_column_constraint(std::vector<double> &dmatval,
83 std::vector<int> &colind,
84 std::vector<char> &rowtype,
85 std::vector<double> &rhs,
86 std::vector<int> &rstart,
87 const ActiveLink &link,
88 const ColumnToChange &column);
89 bool candidateContributionDirectIsNotNull(const ColumnToChange &column,
90 unsigned int chronicle_to_use,
91 const Candidate &candidate) const;
92 unsigned int chronicleToUse(const ActiveLink &link) const;
93 std::vector<Candidate> candidates_with_not_null_profile(
94 const std::vector<ActiveLink> &active_links,
95 const std::set<int> &time_steps) const;
96
97 bool candidateContributionIndirectIsNotNull(const ColumnToChange &column,
98 unsigned int chronicle_to_use,
99 const Candidate &candidate) const;
100 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger_;
101};
102
103#endif // ANTARESXPANSION_PROBLEMMODIFIER_H
Candidate class.
Definition Candidate.h:33
Definition ProblemModifier.h:32
Definition ProblemModifier.h:17
Decorator to the SolverAbstract class.
Definition Problem.h:15
Definition ColumnToChange.h:6