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//
8namespace Outerloop {
10 public:
11 explicit OuterLoopBiLevel(
12 const std::vector<Benders::Criterion::CriterionSingleInputData>
13 &outer_loop_input_data);
14 bool Update_bilevel_data_if_feasible(
15 const Point &x, const std::vector<double> &outer_loop_criterion,
16 double overall_cost, double invest_cost_at_x, double lambda);
17
18 void Init(const std::vector<double> &obj, const Point &max_invest,
19 const VariableMap &master_variable);
20 double LambdaMax() const { return lambda_max_; }
21 double LambdaMin() const { return lambda_min_; }
22 void SetLambda(double lambda) { lambda_ = lambda; }
23 double BilevelBestub() const { return bilevel_best_ub_; }
24 bool FoundFeasible() const { return found_feasible_; }
25 const Point &BilevelBestX() const;
26
27 private:
28 bool Check_bilevel_feasibility(
29 const std::vector<double> &outer_loop_criterion, double overall_cost);
30 void SetLambdaMaxToMaxInvestmentCosts(const std::vector<double> &obj,
31 const Point &max_invest,
32 const VariableMap &master_variable);
33 void Update(const Point &x, double overall_cost, double invest_cost_at_x);
34 bool IsCriterionSatisfied(const std::vector<double> &outer_loop_criterions);
35 bool found_feasible_ = false;
36 double bilevel_best_ub_ = +1e20;
37 Point bilevel_best_x_;
38
39 private:
40 double lambda_max_ = 0.0;
41 double lambda_min_ = 0.0;
42 double lambda_ = 0.0;
43 const std::vector<Benders::Criterion::CriterionSingleInputData>
44 &outer_loop_input_data_;
45};
46} // namespace Outerloop
Definition OuterLoopBiLevel.h:9