Loading...
Searching...
No Matches
PessimisticAsOptimistic.h
1//
2// Created by henri on 22.01.25.
3//
4
5#ifndef IDOL_PESSIMISTICASOPTIMISTIC_H
6#define IDOL_PESSIMISTICASOPTIMISTIC_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 {
14}
15
17 const Bilevel::Description* m_description = nullptr;
18 std::unique_ptr<OptimizerFactory> m_optimistic_bilevel_optimizer;
19protected:
20 [[nodiscard]] Optimizer *create(const Model &t_model) const override;
21public:
22 PessimisticAsOptimistic() = default;
23
24 explicit PessimisticAsOptimistic(const Bilevel::Description& t_description);
25
26 PessimisticAsOptimistic(const PessimisticAsOptimistic& t_src);
27
28 PessimisticAsOptimistic& with_optimistic_bilevel_optimizer(const OptimizerFactory& t_optimizer);
29
30 PessimisticAsOptimistic& operator+=(const OptimizerFactory& t_optimizer) {
31 return with_optimistic_bilevel_optimizer(t_optimizer);
32 }
33
34 void set_bilevel_description(const Description &t_bilevel_description) override;
35
36 [[nodiscard]] OptimizerFactory *clone() const override;
37
38 static std::pair<Model, Bilevel::Description> make_model(const Model &t_model, const Bilevel::Description &t_description);
39};
40
41namespace idol {
42 static Bilevel::PessimisticAsOptimistic operator+(const Bilevel::PessimisticAsOptimistic& t_pessimistic_as_optimistic, const OptimizerFactory& t_optimizer) {
43 Bilevel::PessimisticAsOptimistic result(t_pessimistic_as_optimistic);
44 result += t_optimizer;
45 return result;
46 }
47}
48
49#endif //IDOL_PESSIMISTICASOPTIMISTIC_H