import static choco.Choco.*; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.kernel.model.Model; import choco.kernel.solver.Solver; import choco.kernel.solver.ContradictionException; import choco.kernel.solver.constraints.integer.AbstractLargeIntSConstraint; import choco.kernel.solver.variables.integer.IntDomainVar; import choco.kernel.memory.IStateInt; import choco.kernel.memory.trailing.StoredInt; import choco.kernel.model.variables.integer.IntegerExpressionVariable; import choco.kernel.model.variables.integer.IntegerVariable; // // Subtour Elimination Constraint // see "Solving Small TSPs with Constraints" by Caseau & Laburthe // public class SubtourElimination extends AbstractLargeIntSConstraint { private IStateInt[] start; // the start of a chain private IStateInt[] end; // the end of a chain private IStateInt[] length; // the length of the chain private int n; public SubtourElimination(Solver s,IntDomainVar[] S) { // (0) super(S); n = S.length; start = new StoredInt[n]; end = new StoredInt[n]; length = new StoredInt[n]; for (int i=0;i