Loading...
Searching...
No Matches
Optimizers_MaxMinRelaxation.h
1//
2// Created by Henri on 04/06/2026.
3//
4
5#ifndef IDOL_OPTIMIZERS_MAXMINRELAXATION_H
6#define IDOL_OPTIMIZERS_MAXMINRELAXATION_H
7
8#include "idol/bilevel/modeling/Description.h"
9#include "idol/general/optimizers/Algorithm.h"
10#include "idol/general/optimizers/OptimizerFactory.h"
11#include "idol/robust/modeling/Description.h"
12#include "idol/mixed-integer/modeling/objects/Env.h"
13
14#define THROW_NOT_IMPLEMENTED { throw Exception("Called function " + std::string(__FUNCTION__) + " in " + std::string(__FILE__) + ":" + std::to_string(__LINE__) + ", which is not implemented."); }
15
16namespace idol::Optimizers::Robust {
17 class MaxMinRelaxation;
18}
19
21 const idol::Robust::Description& m_description;
22 const idol::Bilevel::Description& m_bilevel_description;
23 std::unique_ptr<OptimizerFactory> m_master_optimizer_factory;
24 std::unique_ptr<OptimizerFactory> m_deterministic_optimizer_factory;
25 const bool m_use_indicator;
26 const std::list<PrimalPoint> m_initial_scenarios;
27
28 struct Formulation {
29 Model model;
30 idol::Robust::Description description;
31
32 Formulation(Model&& t_hpr, idol::Robust::Description&& t_description);
33 };
34
35 std::unique_ptr<Formulation> m_formulation;
36public:
37 MaxMinRelaxation(const Model& t_model,
38 const idol::Robust::Description& t_description,
39 const idol::Bilevel::Description& t_bilevel_description,
40 const OptimizerFactory& t_master_optimizer,
41 const OptimizerFactory& t_deterministic_optimizer,
42 bool t_use_indicator,
43 const std::list<PrimalPoint>& t_initial_scenarios
44 );
45
46 [[nodiscard]] std::string name() const override { return "max-min relaxation"; }
47 [[nodiscard]] double get_var_primal(const Var& t_var) const override;
48 [[nodiscard]] double get_var_reduced_cost(const Var& t_var) const override THROW_NOT_IMPLEMENTED
49 [[nodiscard]] double get_var_ray(const Var& t_var) const override THROW_NOT_IMPLEMENTED
50 [[nodiscard]] double get_ctr_dual(const Ctr& t_ctr) const override THROW_NOT_IMPLEMENTED
51 [[nodiscard]] double get_ctr_farkas(const Ctr& t_ctr) const override THROW_NOT_IMPLEMENTED
52 [[nodiscard]] unsigned get_n_solutions() const override THROW_NOT_IMPLEMENTED
53 [[nodiscard]] unsigned get_solution_index() const override THROW_NOT_IMPLEMENTED
54
55 [[nodiscard]] const idol::Robust::Description& description() const { return m_description; }
56 [[nodiscard]] const OptimizerFactory& get_master_optimizer_factory() const { return *m_master_optimizer_factory; }
57 [[nodiscard]] const OptimizerFactory& get_deterministic_optimizer_factory() const { return *m_deterministic_optimizer_factory; }
58 [[nodiscard]] bool use_indicator() const { return m_use_indicator; }
59 [[nodiscard]] const Formulation& get_formulation() const { return *m_formulation; }
60
61 void build_model();
62protected:
63 void add(const Var& t_var) override THROW_NOT_IMPLEMENTED
64 void add(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
65 void add(const QCtr& t_ctr) override THROW_NOT_IMPLEMENTED
66 void add(const SOSCtr& t_ctr) override THROW_NOT_IMPLEMENTED
67 void remove(const Var& t_var) override THROW_NOT_IMPLEMENTED
68 void remove(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
69 void remove(const QCtr& t_ctr) override THROW_NOT_IMPLEMENTED
70 void remove(const SOSCtr& t_ctr) override THROW_NOT_IMPLEMENTED
71 void update() override {}
72 void write(const std::string& t_name) override THROW_NOT_IMPLEMENTED
73 void hook_before_optimize() override;
74 void hook_optimize() override;
75 void set_solution_index(unsigned t_index) override THROW_NOT_IMPLEMENTED
76 void update_obj_sense() override {}
77 void update_obj() override {}
78 void update_rhs() override THROW_NOT_IMPLEMENTED
79 void update_obj_constant() override THROW_NOT_IMPLEMENTED
80 void update_mat_coeff(const Ctr& t_ctr, const Var& t_var) override THROW_NOT_IMPLEMENTED
81 void update_ctr_type(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
82 void update_ctr_rhs(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
83 void update_var_type(const Var& t_var) override THROW_NOT_IMPLEMENTED
84 void update_var_lb(const Var& t_var) override;
85 void update_var_ub(const Var& t_var) override;
86 void update_var_obj(const Var& t_var) override THROW_NOT_IMPLEMENTED
87
88 void throw_if_no_formulation() const;
89};
90
91#endif //IDOL_OPTIMIZERS_MAXMINRELAXATION_H