Loading...
Searching...
No Matches
Formulation.h
1//
2// Created by Henri on 17/04/2026.
3//
4
5#ifndef IDOL_CVCCG_FORMULATION_H
6#define IDOL_CVCCG_FORMULATION_H
7#include <utility>
8#include <vector>
9
10#include "idol/mixed-integer/modeling/models/Model.h"
11
12namespace idol::Optimizers::Robust {
14}
15
16namespace idol::CVCCG {
17 class Formulation;
18}
19
21
22 class Uncertainty {
23 std::optional<Ctr> m_constraint;
24 public:
25 [[nodiscard]] bool is_constraint() const { return m_constraint.has_value(); }
26 [[nodiscard]] const Ctr& ctr() const { return m_constraint.value(); }
27
28 Uncertainty() = default;
29 Uncertainty(const Ctr& t_ctr) : m_constraint(t_ctr) {}
30 };
31
32 struct GeneratedScenario {
33 PrimalPoint scenario;
34 PrimalPoint master_solution;
35 };
36
37 struct LinkingConstraint {
38 Ctr ctr_in_uncertainty_set;
39 Map<long int, Var> critical_values;
40
41 LinkingConstraint(Ctr t_ctr) : ctr_in_uncertainty_set(std::move(t_ctr)) {}
42 };
43
45
46 // Analysis of the model
47 std::list<Var> m_linking_variables;
48 std::list<LinkingConstraint> m_linking_constraints;
49 std::vector<Uncertainty> m_uncertainties;
50 bool m_all_linking_variables_are_binary = true;
51 bool m_all_data_in_linking_constraints_is_integer = true;
52 bool m_use_indicator = false;
53
54 Model m_master;
55 Model m_sub_problem;
56
57 // Scenarios
58 std::list<GeneratedScenario> m_scenario_pool;
59 std::list<std::list<GeneratedScenario>::iterator> m_currently_present_scenarios;
60
61 void check_assumptions();
62 void initialize_master();
63 void initialize_sub_problem();
64
65 void add_scenario_to_master(const std::list<GeneratedScenario>::iterator& t_iterator_in_pool, Uncertainty& t_uncertainty);
66public:
68
69 Model& master() { return m_master; }
70 Model& sub_problem() { return m_sub_problem; }
71
72 void update_sub_problem_constraints(const PrimalPoint& t_master_solution);
73 unsigned int n_uncertainties() const { return m_uncertainties.size(); }
74 void update_sub_problem_objective(const PrimalPoint& t_master_solution, unsigned int t_index);
75 std::list<GeneratedScenario>::iterator add_scenario_to_pool(PrimalPoint&& t_scenario, PrimalPoint&& t_master_scenario);
76 void add_scenario_to_master(const std::list<GeneratedScenario>::iterator& t_iterator_in_pool);
77};
78
79#endif //IDOL_CVCCG_FORMULATION_H