From d44fb1b423f9d6658c142c041143a4f54b5106d3 Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Mon, 15 Oct 2018 13:41:52 +0200 Subject: [PATCH] add missing swig rule; remove redundant constraint in sat table implementation --- ortools/sat/java/sat.i | 1 + ortools/sat/table.cc | 11 ++++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ortools/sat/java/sat.i b/ortools/sat/java/sat.i index 4806546337..25dd2d05ae 100644 --- a/ortools/sat/java/sat.i +++ b/ortools/sat/java/sat.i @@ -55,6 +55,7 @@ PROTO2_RETURN(operations_research::sat::CpSolverResponse, %feature("director") operations_research::sat::SolutionCallback; %unignore operations_research::sat::SolutionCallback; +%unignore operations_research::sat::SolutionCallback::~SolutionCallback; %rename (bestObjectiveBound) operations_research::sat::SolutionCallback::BestObjectiveBound; %rename (numBinaryPropagations) operations_research::sat::SolutionCallback::NumBinaryPropagations; %rename (numBooleans) operations_research::sat::SolutionCallback::NumBooleans; diff --git a/ortools/sat/table.cc b/ortools/sat/table.cc index cc047bce8f..89294171a6 100644 --- a/ortools/sat/table.cc +++ b/ortools/sat/table.cc @@ -394,9 +394,6 @@ std::function TransitionConstraint( : IntegerValue(transition[2])); } - // Exactly one tuple literal is true. - model->Add(ExactlyOneConstraint(tuple_literals)); - // Fully instantiate vars[time]. // Tricky: because we started adding constraints that can propagate, the // possible values returned by encoding might not contains all the value @@ -434,18 +431,18 @@ std::function TransitionConstraint( out_encoding[s.front()] = Literal(var, true); out_encoding[s.back()] = Literal(var, false); } else if (s.size() > 1) { - std::vector state_literals; for (const IntegerValue state : s) { const Literal l = Literal(model->Add(NewBooleanVariable()), true); out_encoding[state] = l; - state_literals.push_back(l); } - // Exactly one state literal is true. - model->Add(ExactlyOneConstraint(state_literals)); } } // Now we link everything together. + // + // Note that we do not need the ExactlyOneConstraint(tuple_literals) + // because it is already implicitely encoded since we have exactly one + // transition value. if (!in_encoding.empty()) { ProcessOneColumn(tuple_literals, in_states, in_encoding, model); }