idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Callback.h
1//
2// Created by henri on 12/04/23.
3//
4
5#ifndef IDOL_CALLBACK_H
6#define IDOL_CALLBACK_H
7
8#include "idol/general/utils/Point.h"
9
10namespace idol {
11 class TempCtr;
12
13 class Timer;
14
20 enum CallbackEvent {
21 NodeLoaded,
22 IncumbentSolution,
23 InvalidSolution,
24 PrunedSolution
25 };
26
27 static std::ostream &operator<<(std::ostream& t_os, idol::CallbackEvent t_event) {
28 using namespace idol;
29 switch (t_event) {
30 case IncumbentSolution: return t_os << "IncumbentSolution";
31 case InvalidSolution: return t_os << "InvalidSolution";
32 case NodeLoaded: return t_os << "NodeLoaded";
33 case PrunedSolution: return t_os << "PrunedSolution";
34 default:;
35 }
36 throw Exception("Enum out of bounds.");
37 }
38
39 class Callback;
40 class CallbackI;
41}
42
44 friend class ::idol::Callback;
45protected:
46 [[nodiscard]] virtual const Model& original_model() const = 0;
47
48 virtual void add_user_cut(const TempCtr& t_cut) = 0;
49
50 virtual void add_lazy_cut(const TempCtr& t_cut) = 0;
51
52 virtual void submit_heuristic_solution(PrimalPoint t_solution) = 0;
53
54 [[nodiscard]] virtual PrimalPoint primal_solution() const = 0;
55
56 [[nodiscard]] virtual const Timer& time() const = 0;
57
58 [[nodiscard]] virtual double best_obj() const = 0;
59
60 [[nodiscard]] virtual double best_bound() const = 0;
61
62 virtual void terminate() = 0;
63
64 void execute(Callback& t_cb, CallbackEvent t_event);
65public:
66 virtual ~CallbackI() = default;
67};
68
70 friend class ::idol::CallbackI;
71public:
72 virtual ~Callback() = default;
73protected:
77 [[nodiscard]] virtual const Model& original_model() const;
78
82 virtual void submit_heuristic_solution(const PrimalPoint& t_solution);
83
88 virtual void add_user_cut(const TempCtr& t_cut);
89
94 virtual void add_lazy_cut(const TempCtr& t_cut);
95
100 [[nodiscard]] virtual PrimalPoint primal_solution() const;
101
106 [[nodiscard]] const Timer& time() const;
107
112 [[nodiscard]] double best_obj() const;
113
118 [[nodiscard]] double best_bound() const;
119
123 void terminate();
124
130 virtual void operator()(CallbackEvent t_event) = 0;
131private:
132 CallbackI* m_interface = nullptr;
133
134 void throw_if_no_interface() const;
135};
136
137#endif //IDOL_CALLBACK_H
const Timer & time() const
virtual void add_lazy_cut(const TempCtr &t_cut)
virtual void operator()(CallbackEvent t_event)=0
double best_obj() const
virtual void submit_heuristic_solution(const PrimalPoint &t_solution)
virtual PrimalPoint primal_solution() const
virtual void add_user_cut(const TempCtr &t_cut)
virtual const Model & original_model() const
double best_bound() const