16 std::unique_ptr<Model> m_model;
17 std::unique_ptr<OptimizerFactory> m_optimizer_factory;
22 : m_model(t_src.m_model->clone()),
25 m_optimizer_factory(t_src.m_optimizer_factory ? t_src.m_optimizer_factory->clone() :
nullptr) {}
31 void hook_add_cut(
const TempCtr &t_cut)
override {
35 [[nodiscard]] std::string name()
const override {
36 return "lazy-cut-callback";
41 : impl::CutSeparation(IncumbentSolution, t_separation_problem, std::move(t_cut), t_type) {}
47 if (!m_optimizer_factory) {
48 throw Exception(
"No optimizer has been given.");
51 auto* model = m_model->clone();
52 model->use(*m_optimizer_factory);
54 auto* result =
new Strategy(model, m_cut, m_type);
59 [[nodiscard]] CallbackFactory *clone()
const override {
60 return new LazyCutCallback(*
this);
63 LazyCutCallback& with_separation_optimizer(
const OptimizerFactory& t_optimizer_factory) {
65 if (m_optimizer_factory) {
66 throw Exception(
"An optimizer has already been given.");
69 m_optimizer_factory.reset(t_optimizer_factory.clone());