
<ConsistencyModule:> circuit_offset(+Succ,+Offset,++CostMatrix,+ArcCosts,?Cost)

   Constrains elements in Succ (offset by Offset) to form a Hamiltonian circuit with cost Cost.

Arguments
   Succ                A collection of N different (domain) variables or integers
   Offset              Offset for Succ (An integer)
   CostMatrix          A NxN matrix collection of integers
   ArcCosts            A collection of N (domain) variables or integers.
   Cost                A (domain) variable or integer (array notation accepted).

Type
   library(gfd)

Description
  Succ is a collection of N elements presenting a digraph of N nodes, where
  the value of the i'th element of Succ - Offset represents the successor to 
  node i. The constraint enforces Succ to form a Hamiltonian circuit,
  a path through every node in the graph, visiting each node once and
  forming a circuit. Additionally,CostMatrix specifies the cost for 
  traversing between each pair of nodes:
  CostMatrix[i,j] represents the cost of travelling from node i to j, and 
  Cost is constrained to the total cost for the circuit. The i'th element of 
  ArcCosts is constrained to the cost of the arc in the circuit from node i.

  Note that the Gecode implementation of this constraint has index (node id)
  starting from 0, rather than 1. The value of Offset is incremented by 1 
  when the constraint is posted to Gecode.  A version of this constraint with
  native Gecode indexing, i.e. without adjusting Offset, is available 
  as circuit_offset_g/5.

  This constraint can be embedded in a constraint expression in its
  functional form (without the last argument).

  ConsistencyModule is the optional module specification to give the 
  consistency level for the propagation for this constraint: 
  gfd_gac for generalised arc consistency (domain consistency), 
  and gfd_vc for value consistency.

  This constraint is implemented by Gecode's circuit() constraint (variant with 
  cost and arc costs), using an offset of Offset + 1.



See Also
   circuit_offset / 2, circuit_offset / 4, circuit_offset_g / 5
