Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
OuterLoopBiLevel.h
1#pragma once
2#include "antares-xpansion/benders/benders_core/CriterionInputDataReader.h"
3
4// TODO
5typedef std::map<std::string, double> Point;
6typedef std::map<std::string, int> VariableMap;
7
8//
9namespace Outerloop
10{
12{
13public:
14 explicit OuterLoopBiLevel(
15 const std::vector<Benders::Criterion::CriterionSingleInputData>& outer_loop_input_data);
16 bool Update_bilevel_data_if_feasible(const Point& x,
17 const std::vector<double>& outer_loop_criterion,
18 double overall_cost,
19 double invest_cost_at_x,
20 double lambda);
21
22 void Init(const std::vector<double>& obj,
23 const Point& max_invest,
24 const VariableMap& master_variable);
25
26 double LambdaMax() const
27 {
28 return lambda_max_;
29 }
30
31 double LambdaMin() const
32 {
33 return lambda_min_;
34 }
35
36 void SetLambda(double lambda)
37 {
38 lambda_ = lambda;
39 }
40
41 double BilevelBestub() const
42 {
43 return bilevel_best_ub_;
44 }
45
46 bool FoundFeasible() const
47 {
48 return found_feasible_;
49 }
50
51 const Point& BilevelBestX() const;
52
53private:
54 bool Check_bilevel_feasibility(const std::vector<double>& outer_loop_criterion,
55 double overall_cost);
56 void SetLambdaMaxToMaxInvestmentCosts(const std::vector<double>& obj,
57 const Point& max_invest,
58 const VariableMap& master_variable);
59 void Update(const Point& x, double overall_cost, double invest_cost_at_x);
60 bool IsCriterionSatisfied(const std::vector<double>& outer_loop_criterions);
61 bool found_feasible_ = false;
62 double bilevel_best_ub_ = +1e20;
63 Point bilevel_best_x_;
64
65private:
66 double lambda_max_ = 0.0;
67 double lambda_min_ = 0.0;
68 double lambda_ = 0.0;
69 const std::vector<Benders::Criterion::CriterionSingleInputData>& outer_loop_input_data_;
70};
71} // namespace Outerloop
Definition OuterLoopBiLevel.h:12