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 "user-cut-callback";
41 : impl::CutSeparation(InvalidSolution, t_separation_problem, std::move(t_cut), t_type) {}
46 if (!m_optimizer_factory) {
47 throw Exception(
"No optimizer has been given.");
50 auto* model = m_model->clone();
51 model->use(*m_optimizer_factory);
53 auto* result =
new Strategy(model, m_cut, m_type);
58 [[nodiscard]] CallbackFactory *clone()
const override {
59 return new UserCutCallback(*
this);
62 UserCutCallback& with_separation_optimizer(
const OptimizerFactory& t_optimizer_factory) {
64 if (m_optimizer_factory) {
65 throw Exception(
"An optimizer has already been given.");
68 m_optimizer_factory.reset(t_optimizer_factory.clone());