@@ -64,6 +64,8 @@ using ::operations_research::IntTupleSet;
6464using ::operations_research::IntVar;
6565using ::operations_research::IntVarElement;
6666using ::operations_research::IntVarIterator;
67+ using ::operations_research::IntVarLocalSearchOperator;
68+ using ::operations_research::LocalSearchFilter;
6769using ::operations_research::LocalSearchFilterManager;
6870using ::operations_research::LocalSearchOperator;
6971using ::operations_research::LocalSearchPhaseParameters;
@@ -299,6 +301,48 @@ class PyDecisionBuilderHelper : public PyDecisionBuilder {
299301 }
300302};
301303
304+ class PyLocalSearchOperator : public LocalSearchOperator {
305+ public:
306+ using LocalSearchOperator::LocalSearchOperator;
307+ bool MakeNextNeighbor (Assignment* delta, Assignment* deltadelta) override {
308+ PYBIND11_OVERRIDE_PURE_NAME (bool , LocalSearchOperator, " next_neighbor" ,
309+ MakeNextNeighbor, delta, deltadelta);
310+ }
311+ void Start (const Assignment* assignment) override {
312+ PYBIND11_OVERRIDE_PURE_NAME (void , LocalSearchOperator, " start" , Start,
313+ assignment);
314+ }
315+ void EnterSearch () override {
316+ PYBIND11_OVERRIDE_NAME (void , LocalSearchOperator, " enter_search" ,
317+ EnterSearch, );
318+ }
319+ void Reset () override {
320+ PYBIND11_OVERRIDE_NAME (void , LocalSearchOperator, " reset" , Reset, );
321+ }
322+ bool HasFragments () const override {
323+ PYBIND11_OVERRIDE_NAME (bool , LocalSearchOperator, " has_fragments" ,
324+ HasFragments, );
325+ }
326+ bool HoldsDelta () const override {
327+ PYBIND11_OVERRIDE_NAME (bool , LocalSearchOperator, " holds_delta" ,
328+ HoldsDelta, );
329+ }
330+ };
331+
332+ class PyIntVarLocalSearchOperator : public IntVarLocalSearchOperator {
333+ public:
334+ using IntVarLocalSearchOperator::IntVarLocalSearchOperator;
335+ using IntVarLocalSearchOperator::MakeOneNeighbor;
336+ bool MakeOneNeighbor () override {
337+ PYBIND11_OVERRIDE_NAME (bool , IntVarLocalSearchOperator, " one_neighbor" ,
338+ MakeOneNeighbor, );
339+ }
340+ void OnStart () override {
341+ PYBIND11_OVERRIDE_NAME (void , IntVarLocalSearchOperator, " on_start" ,
342+ OnStart, );
343+ }
344+ };
345+
302346class PySearchMonitor : public SearchMonitor {
303347 public:
304348 using SearchMonitor::SearchMonitor;
@@ -2540,6 +2584,41 @@ PYBIND11_MODULE(constraint_solver, m) {
25402584 },
25412585 py::return_value_policy::reference_internal);
25422586
2587+ py::class_<LocalSearchOperator, BaseObject, PyLocalSearchOperator>(
2588+ m, " LocalSearchOperator" , DOC (operations_research, LocalSearchOperator))
2589+ .def (py::init<>())
2590+ .def (" next_neighbor" , &LocalSearchOperator::MakeNextNeighbor,
2591+ py::arg (" delta" ), py::arg (" deltadelta" ))
2592+ .def (" start" , &LocalSearchOperator::Start, py::arg (" assignment" ))
2593+ .def (" enter_search" , &LocalSearchOperator::EnterSearch)
2594+ .def (" reset" , &LocalSearchOperator::Reset)
2595+ .def (" has_fragments" , &LocalSearchOperator::HasFragments)
2596+ .def (" holds_delta" , &LocalSearchOperator::HoldsDelta);
2597+
2598+ py::class_<IntVarLocalSearchOperator, LocalSearchOperator,
2599+ PyIntVarLocalSearchOperator>(m, " IntVarLocalSearchOperator" , " " )
2600+ .def (py::init<const std::vector<IntVar*>&, bool >(), py::arg (" vars" ),
2601+ py::arg (" keep_inverse_values" ) = false )
2602+ .def (" size" , &IntVarLocalSearchOperator::Size)
2603+ .def (" var" , &IntVarLocalSearchOperator::Var, py::arg (" index" ),
2604+ py::return_value_policy::reference_internal)
2605+ .def (" is_incremental" , &IntVarLocalSearchOperator::IsIncremental)
2606+ .def (" value" , &IntVarLocalSearchOperator::Value, py::arg (" index" ))
2607+ .def (" old_value" , &IntVarLocalSearchOperator::OldValue, py::arg (" index" ))
2608+ .def (" prev_value" , &IntVarLocalSearchOperator::PrevValue,
2609+ py::arg (" index" ))
2610+ .def (" set_value" , &IntVarLocalSearchOperator::SetValue, py::arg (" index" ),
2611+ py::arg (" value" ))
2612+ .def (" activate" , &IntVarLocalSearchOperator::Activate, py::arg (" index" ))
2613+ .def (" deactivate" , &IntVarLocalSearchOperator::Deactivate,
2614+ py::arg (" index" ))
2615+ .def (" activated" , &IntVarLocalSearchOperator::Activated, py::arg (" index" ))
2616+ .def (" add_vars" , &IntVarLocalSearchOperator::AddVars, py::arg (" vars" ))
2617+ .def (
2618+ " one_neighbor" ,
2619+ [](PyIntVarLocalSearchOperator* op) { return op->MakeOneNeighbor (); })
2620+ .def (" on_start" , &IntVarLocalSearchOperator::OnStart);
2621+
25432622 py::class_<DecisionBuilder, BaseObject>(
25442623 m, " DecisionBuilderBase" , DOC (operations_research, DecisionBuilder))
25452624 .def (" __str__" , &DecisionBuilder::DebugString)
0 commit comments