idol
A C++ Framework for Optimization
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 {
13 class PessimisticAsOptimistic;
14}
15
17 const Bilevel::Description* m_description = nullptr;
18 std::unique_ptr<OptimizerFactory> m_optimistic_bilevel_optimizer;
19public:
20 PessimisticAsOptimistic() = default;
21
22 explicit PessimisticAsOptimistic(const Bilevel::Description& t_description);
23
25
26 PessimisticAsOptimistic& with_optimistic_bilevel_optimizer(const OptimizerFactory& t_optimizer);
27
28 PessimisticAsOptimistic& operator+=(const OptimizerFactory& t_optimizer) {
29 return with_optimistic_bilevel_optimizer(t_optimizer);
30 }
31
32 void set_bilevel_description(const Description &t_bilevel_description) override;
33
34 Optimizer *operator()(const Model &t_model) const 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
Optimizer * operator()(const Model &t_model) const override
OptimizerFactory * clone() const override