idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
MinMax_Dualize.h
1//
2// Created by henri on 29.11.24.
3//
4
5#ifndef IDOL_BILEVEL_MINMAX_DUALIZE_H
6#define IDOL_BILEVEL_MINMAX_DUALIZE_H
7
8#include "idol/general/optimizers/OptimizerFactory.h"
9#include "idol/bilevel/modeling/Description.h"
10#include "idol/bilevel/optimizers/BilevelOptimizerInterface.h"
11#include "idol/mixed-integer/modeling/models/KKT.h"
12
13namespace idol::Bilevel::MinMax {
14 class Dualize;
15}
16
18 const Bilevel::Description* m_description = nullptr;
19 std::unique_ptr<OptimizerFactory> m_single_level_optimizer;
20 std::unique_ptr<Reformulators::KKT::BoundProvider> m_bound_provider;
21public:
22 Dualize();
23
24 explicit Dualize(const Bilevel::Description& t_description);
25
26 Dualize(const Dualize& t_src);
27
28 Optimizer *operator()(const Model &t_model) const override;
29
30 [[nodiscard]] OptimizerFactory *clone() const override;
31
32 void set_bilevel_description(const Description &t_bilevel_description) override;
33
34 Dualize& with_single_level_optimizer(const OptimizerFactory& t_deterministic_optimizer);
35
36 Dualize& with_bound_provider(const Reformulators::KKT::BoundProvider& t_bound_provider);
37
38 Dualize& operator+=(const OptimizerFactory& t_optimizer) { return with_single_level_optimizer(t_optimizer); }
39
40 static Model make_model(const Model& t_model, const Bilevel::Description& t_description);
41
42 static Model make_model(const Model& t_model, const Bilevel::Description& t_description, ::idol::Reformulators::KKT::BoundProvider& t_bound_provider);
43};
44
45namespace idol {
46 static Bilevel::MinMax::Dualize operator+(const Bilevel::MinMax::Dualize& t_MINMAX_DUALIZE, const OptimizerFactory& t_optimizer) {
47 Bilevel::MinMax::Dualize result(t_MINMAX_DUALIZE);
48 result += t_optimizer;
49 return result;
50 }
51}
52
53#endif //IDOL_BILEVEL_MINMAX_DUALIZE_H
Optimizer * operator()(const Model &t_model) const override
OptimizerFactory * clone() const override