idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Optimizers_ScenarioBasedKAdaptabilityProblemSolver.h
1//
2// Created by henri on 12.04.25.
3//
4
5#ifndef IDOL_OPTIMIZERS_SCENARIOBASEDKADAPTABILITYPROBLEMSOLVER_H
6#define IDOL_OPTIMIZERS_SCENARIOBASEDKADAPTABILITYPROBLEMSOLVER_H
7
8
9#include "idol/general/optimizers/Algorithm.h"
10#include "idol/general/optimizers/OptimizerFactory.h"
11#include "idol/bilevel/modeling/Description.h"
12#include "idol/robust/modeling/Description.h"
13
14namespace idol::Optimizers::Robust {
15 class ScenarioBasedKAdaptabilityProblemSolver;
16}
17
19 unsigned int m_K;
20 std::unique_ptr<OptimizerFactory> m_main_optimizer;
21 std::unique_ptr<OptimizerFactory> m_separation_optimizer;
22 const ::idol::Bilevel::Description& m_bilevel_description;
23 const ::idol::Robust::Description& m_robust_description;
24
25 bool m_has_first_stage_decisions = true;
26 unsigned int m_solution_index = 0;
27
28 std::optional<Var> m_epigraph_variable;
29 std::vector<std::vector<std::optional<Var>>> m_y_k;
30 std::vector<std::unique_ptr<Model>> m_master_problem;
31 std::list<Ctr> m_uncertain_constraints;
32 QuadExpr<Var> m_second_stage_objective;
33
34 std::vector<std::list<Ctr>> m_scenario_based_constraints;
35
36 [[nodiscard]] const Var& get_kadapt_var(const idol::Var &t_var, unsigned int t_k) const;
37 void build_master_if_not_exists();
38 void make_second_stage_variables_duplicates();
39 void make_epigraph_variable_if_not_exists();
40 void add_variables_to_master();
41 void add_deterministic_constraints_to_master();
42 void add_first_stage_objective();
43 void set_uncertainty_disjunction(unsigned int t_k, const std::list<PrimalPoint>& t_disjunction);
44public:
46 const idol::Bilevel::Description& t_bilevel_description,
47 const idol::Robust::Description& t_robust_description,
48 unsigned int t_K,
49 const OptimizerFactory& t_main_optimizer,
50 const OptimizerFactory& t_separation_optimizer);
51
52 [[nodiscard]] std::string name() const override;
53 [[nodiscard]] double get_var_primal(const Var &t_var) const override;
54 [[nodiscard]] double get_var_reduced_cost(const Var &t_var) const override;
55 [[nodiscard]] double get_var_ray(const Var &t_var) const override;
56 [[nodiscard]] double get_ctr_dual(const Ctr &t_ctr) const override;
57 [[nodiscard]] double get_ctr_farkas(const Ctr &t_ctr) const override;
58 [[nodiscard]] unsigned int get_n_solutions() const override;
59 [[nodiscard]] unsigned int get_solution_index() const override;
60
61 void set_uncertainty_disjunction(const std::vector<std::list<PrimalPoint>>& t_disjunctions);
62protected:
63 void add(const Var &t_var) override;
64 void add(const Ctr &t_ctr) override;
65 void add(const QCtr &t_ctr) override;
66 void remove(const Var &t_var) override;
67 void remove(const Ctr &t_ctr) override;
68 void remove(const QCtr &t_ctr) override;
69 void update() override;
70 void write(const std::string &t_name) override;
71 void hook_before_optimize() override;
72 void hook_optimize() override;
73 void set_solution_index(unsigned int t_index) override;
74 void update_obj_sense() override;
75 void update_obj() override;
76 void update_rhs() override;
77 void update_obj_constant() override;
78 void update_mat_coeff(const Ctr &t_ctr, const Var &t_var) override;
79 void update_ctr_type(const Ctr &t_ctr) override;
80 void update_ctr_rhs(const Ctr &t_ctr) override;
81 void update_var_type(const Var &t_var) override;
82 void update_var_lb(const Var &t_var) override;
83 void update_var_ub(const Var &t_var) override;
84 void update_var_obj(const Var &t_var) override;
85};
86
87#endif //IDOL_OPTIMIZERS_SCENARIOBASEDKADAPTABILITYPROBLEMSOLVER_H