Module org.maxicp

Class NoOverlapWithPositionDecomposition

java.lang.Object
org.maxicp.cp.engine.core.AbstractCPConstraint
org.maxicp.cp.engine.constraints.scheduling.NoOverlapWithPositionDecomposition
All Implemented Interfaces:
CPConstraint, ConcreteConstraint<ConcreteCPModel>

public class NoOverlapWithPositionDecomposition extends AbstractCPConstraint
A constraint that enforces a permutation (ordering) of interval variables, typically used for routing/scheduling problems such as TSP or job sequencing.

This constraint models a sequence of visits where:

  • Each interval represents a visit/task to be scheduled
  • posOfInterval[i] gives the position of interval i in the sequence
  • intervalInPos[p] gives the interval at position p in the sequence

The constraint enforces:

  • Inverse permutation relationship between posOfInterval and intervalInPos
  • No overlap between intervals
  • Minimum transition times between consecutive intervals (if specified)
See Also:
  • Field Details

    • n

      public final int n
      Number of intervals
    • intervals

      public final CPIntervalVar[] intervals
      Intervals
    • posOfInterval

      public final CPIntVar[] posOfInterval
      posOfInterval[i] is the position of node i in the tour
    • intervalInPos

      public final CPIntVar[] intervalInPos
      intervalInPos[i] is the node at position i in the tour
  • Constructor Details

    • NoOverlapWithPositionDecomposition

      public NoOverlapWithPositionDecomposition(CPIntervalVar[] intervals, CPIntVar[] posOfInterval, CPIntVar[] intervalInPos)
      Creates a permutation constraint with zero transition times.
      Parameters:
      intervals - the interval variables to be sequenced (all intervals must belong to the same solver)
      posOfInterval - position variables: posOfInterval[i] is the position of interval i (domain 0..n-1)
      intervalInPos - inverse position variables: intervalInPos[p] is the interval at position p (domain 0..n-1)
    • NoOverlapWithPositionDecomposition

      public NoOverlapWithPositionDecomposition(CPIntervalVar[] intervals, CPIntVar[] posOfInterval, CPIntVar[] intervalInPos, int[][] minTransition)
      Creates a permutation constraint with minimum transition times between intervals.

      The transition time matrix must satisfy the triangular inequality property, i.e., for all i, j, k: minTransition[i][j] <= minTransition[i][k] + minTransition[k][j].

      Parameters:
      intervals - the interval variables to be sequenced (all intervals must belong to the same solver)
      posOfInterval - position variables: posOfInterval[i] is the position of interval i (domain 0..n-1)
      intervalInPos - inverse position variables: intervalInPos[p] is the interval at position p (domain 0..n-1)
      minTransition - a square matrix where minTransition[i][j] is the minimum transition time from interval i to interval j. Must have dimensions n×n where n is the number of intervals.
      Throws:
      AssertionError - if the matrix dimensions don't match the number of intervals
      AssertionError - if the triangular inequality is violated
  • Method Details