A C++ Framework for Optimization
Loading...
Searching...
No Matches
Separation.h
1//
2// Created by Henri on 21/01/2026.
3//
4
5#ifndef IDOL_CCG_SEPARATION_H
6#define IDOL_CCG_SEPARATION_H
7#include "idol/general/utils/IteratorForward.h"
8#include "idol/general/utils/Point.h"
9#include "idol/robust/modeling/Description.h"
10#include "idol/bilevel/modeling/Description.h"
11
12namespace idol {
13 namespace Bilevel {
14 class Description;
15 }
16
17 namespace CCG {
18 class Formulation;
19 }
20
21 namespace Robust::CCG {
22 class Separation;
23 }
24
25 namespace Optimizers::Robust {
26 class ColumnAndConstraintGeneration;
27 }
28}
29
31 std::vector<PrimalPoint> m_scenarios;
32 std::optional<double> m_submitted_upper_bound;
33 SolutionStatus m_status = Loaded;
34 SolutionReason m_reason = NotSpecified;
36protected:
37 virtual void operator()() = 0;
38 void submit_upper_bound(double t_value);
39 void add_scenario(PrimalPoint t_scenario) { m_scenarios.emplace_back(std::move(t_scenario)); }
40 void clear_scenarios() { m_scenarios.clear(); }
41 void terminate();
42 void set_status(SolutionStatus t_status, SolutionReason t_reason);
43
44 [[nodiscard]] const PrimalPoint& get_master_solution() const;
45 [[nodiscard]] Env& get_env() const;
46 [[nodiscard]] const idol::Optimizers::Robust::ColumnAndConstraintGeneration& get_parent() const { return *m_parent; }
47 [[nodiscard]] const idol::Robust::Description& get_robust_description() const;
48 [[nodiscard]] const idol::Bilevel::Description& get_bilevel_description() const;
49 [[nodiscard]] const idol::CCG::Formulation& get_formulation() const;
50public:
51 virtual ~Separation() = default;
52
53 [[nodiscard]] auto scenarios() const { return ConstIteratorForward(m_scenarios); }
54
55 [[nodiscard]] virtual Separation* clone() const = 0;
56
57 virtual std::pair<idol::Model, idol::Bilevel::Description> build_separation_problem();
58
60};
61
62#endif //IDOL_CCG_SEPARATION_H