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