Loading...
Searching...
No Matches
Optimizers_ROCPP.h
1//
2// Created by Henri on 13/05/2026.
3//
4
5#ifndef IDOL_OPTIMIZERS_ROCPP_KADAPTABILITY_H
6#define IDOL_OPTIMIZERS_ROCPP_KADAPTABILITY_H
7
8#include "idol/general/optimizers/Optimizer.h"
9#include "idol/bilevel/modeling/Description.h"
10#include "idol/robust/modeling/Description.h"
11#include "idol/robust/optimizers/wrappers/ROCPP.h"
12
13namespace idol::Optimizers::Robust {
14 class ROCPP;
15}
16
17#define THROW_NOT_IMPLEMENTED { throw std::runtime_error("Not implemented " + std::string(__FUNCTION__) + ".\n" + std::string(__FILE__) + ":" + std::to_string(__LINE__) + "\n"); }
18
19class idol::Optimizers::Robust::ROCPP : public Optimizer {
20 const idol::Bilevel::Description& m_bilevel_description;
21 const idol::Robust::Description& m_robust_description;
22 idol::Robust::ROCPP::Approximation m_approximation;
23 std::unique_ptr<OptimizerFactory> m_optimizer_factory;
24 const unsigned int m_n_policies;
25
26 std::unique_ptr<Model> m_model;
27protected:
28 void build() override {}
29 void add(const Var& t_var) override THROW_NOT_IMPLEMENTED
30 void add(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
31 void add(const QCtr& t_ctr) override THROW_NOT_IMPLEMENTED
32 void remove(const Var& t_var) override THROW_NOT_IMPLEMENTED
33 void remove(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
34 void remove(const QCtr& t_ctr) override THROW_NOT_IMPLEMENTED
35 void update() override {}
36 void write(const std::string& t_name) override THROW_NOT_IMPLEMENTED
37 void hook_optimize() override;
38 void set_solution_index(unsigned t_index) override THROW_NOT_IMPLEMENTED
39 void update_obj_sense() override THROW_NOT_IMPLEMENTED
40 void update_obj() override THROW_NOT_IMPLEMENTED
41 void update_rhs() override THROW_NOT_IMPLEMENTED
42 void update_obj_constant() override THROW_NOT_IMPLEMENTED
43 void update_mat_coeff(const Ctr& t_ctr, const Var& t_var) override THROW_NOT_IMPLEMENTED
44 void update_ctr_type(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
45 void update_ctr_rhs(const Ctr& t_ctr) override THROW_NOT_IMPLEMENTED
46 void update_var_type(const Var& t_var) override THROW_NOT_IMPLEMENTED
47 void update_var_lb(const Var& t_var) override THROW_NOT_IMPLEMENTED
48 void update_var_ub(const Var& t_var) override THROW_NOT_IMPLEMENTED
49 void update_var_obj(const Var& t_var) override THROW_NOT_IMPLEMENTED
50
51 void throw_if_no_deterministic_model() const;
52public:
53 ROCPP(const Model& t_parent,
54 const idol::Robust::Description& t_robust_description,
55 const idol::Bilevel::Description& t_bilevel_description,
56 idol::Robust::ROCPP::Approximation t_approximation,
57 const OptimizerFactory& t_optimizer,
58 unsigned int t_n_policies);
59
60 [[nodiscard]] std::string name() const override { return "ROC++"; }
61 [[nodiscard]] SolutionStatus get_status() const override;
62 [[nodiscard]] SolutionReason get_reason() const override;
63 [[nodiscard]] double get_best_obj() const override;
64 [[nodiscard]] double get_best_bound() const override;
65 [[nodiscard]] double get_var_primal(const Var& t_var) const override;
66 [[nodiscard]] double get_var_reduced_cost(const Var& t_var) const override;
67 [[nodiscard]] double get_var_ray(const Var& t_var) const override;
68 [[nodiscard]] double get_ctr_dual(const Ctr& t_ctr) const override;
69 [[nodiscard]] double get_ctr_farkas(const Ctr& t_ctr) const override;
70 [[nodiscard]] double get_relative_gap() const override;
71 [[nodiscard]] double get_absolute_gap() const override;
72 [[nodiscard]] unsigned get_n_solutions() const override;
73 [[nodiscard]] unsigned get_solution_index() const override;
74
75 static bool is_available();
76};
77
78#endif //IDOL_OPTIMIZERS_ROCPP_KADAPTABILITY_H