Loading...
Searching...
No Matches
BilevelBasedBranchAndBound.h
1//
2// Created by Henri on 03/02/2026.
3//
4
5#ifndef IDOL_NESTEDBRANCHANDCUT_H
6#define IDOL_NESTEDBRANCHANDCUT_H
7
8#include "idol/general/optimizers/OptimizerFactory.h"
9#include "idol/robust/modeling/Description.h"
10#include "idol/bilevel/modeling/Description.h"
11
12namespace idol::Robust {
14}
15
17 const Bilevel::Description& m_bilevel_description;
18 const Robust::Description& m_robust_description;
19
20 std::unique_ptr<OptimizerFactory> m_optimality_bilevel_optimizer;
21 std::unique_ptr<OptimizerFactory> m_feasibility_bilevel_optimizer;
22 std::optional<bool> m_with_first_stage_relaxation;
23protected:
24 [[nodiscard]] Optimizer *create(const Model &t_model) const override;
25public:
26 BilevelBasedBranchAndBound(const Robust::Description& t_robust_description,
27 const Bilevel::Description& t_bilevel_description);
28
29 BilevelBasedBranchAndBound(const BilevelBasedBranchAndBound& t_src);
30
31 [[nodiscard]] OptimizerFactory *clone() const override { return new BilevelBasedBranchAndBound(*this); }
32
33 BilevelBasedBranchAndBound& with_optimality_bilevel_optimizer(const OptimizerFactory& t_factory);
34
35 BilevelBasedBranchAndBound& with_feasibility_bilevel_optimizer(const OptimizerFactory& t_factory);
36
37 BilevelBasedBranchAndBound& with_first_stage_relaxation(bool t_value);
38
39};
40
41#endif //IDOL_NESTEDBRANCHANDCUT_H