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