Loading...
Searching...
No Matches
PADM.h
1//
2// Created by Henri on 22/04/2026.
3//
4
5#ifndef IDOL_PADM_H
6#define IDOL_PADM_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 PADM;
14}
15
17 const Description* m_description = nullptr;
18 std::unique_ptr<OptimizerFactory> m_single_level_optimizer;
19protected:
20 Optimizer *create(const Model &t_model) const override;
21public:
22 PADM() = default;
23
24 explicit PADM(const Bilevel::Description& t_description);
25
26 PADM(const PADM& t_src);
27
28 void set_bilevel_description(const Description &t_bilevel_description) override;
29
30 [[nodiscard]] OptimizerFactory *clone() const override;
31
32 PADM& with_single_level_optimizer(const OptimizerFactory& t_deterministic_optimizer);
33
34 PADM& operator+=(const OptimizerFactory& t_optimizer) { return with_single_level_optimizer(t_optimizer); }
35};
36
37#endif //IDOL_PADM_H