idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
GurobiCallbackI.h
1//
2// Created by henri on 31/03/23.
3//
4
5#ifndef CCG_WITH_NESTED_CG_GUROBICALLBACK_H
6#define CCG_WITH_NESTED_CG_GUROBICALLBACK_H
7
8#ifdef IDOL_USE_GUROBI
9
10#include <gurobi_c++.h>
11#include <memory>
12#include <list>
13#include "idol/mixed-integer/modeling/constraints/TempCtr.h"
14#include "idol/mixed-integer/optimizers/callbacks/Callback.h"
15
16namespace idol {
17 namespace Optimizers {
18 class Gurobi;
19 }
20 class GurobiCallbackI;
21}
22
23class idol::GurobiCallbackI : public GRBCallback, public CallbackI {
24
25 Optimizers::Gurobi& m_parent;
26 std::list<std::unique_ptr<Callback>> m_callbacks;
27
28 double m_best_obj = Inf;
29 double m_best_bound = -Inf;
30
31 GRBTempConstr gurobi_temp_constr(const TempCtr& t_temp_ctr);
32public:
33 explicit GurobiCallbackI(Optimizers::Gurobi& t_parent);
34
35 void add_callback(Callback* t_callback);
36
37 void call(CallbackEvent t_event);
38protected:
39 void callback() override;
40
41 [[nodiscard]] const Model& original_model() const override;
42
43 void add_lazy_cut(const TempCtr& t_lazy_cut) override;
44
45 void add_user_cut(const TempCtr& t_user_cut) override;
46
47 void submit_heuristic_solution(PrimalPoint t_solution) override;
48
49 [[nodiscard]] PrimalPoint primal_solution() const override;
50
51 [[nodiscard]] const Timer &time() const override;
52
53 [[nodiscard]] double best_obj() const override;
54
55 [[nodiscard]] double best_bound() const override;
56
57 void terminate() override;
58};
59
60#endif
61
62#endif //CCG_WITH_NESTED_CG_GUROBICALLBACK_H