Trisha Shetty (Editor)

Backmarking

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Backmarking

In constraint satisfaction, backmarking is a variant of the backtracking algorithm.

Backmarking works like backtracking by iteratively evaluating variables in a given order, for example, x 1 , , x n . It improves over backtracking by maintaining information about the last time a variable x i was instantiated to a value and information about what changed since then. In particular:

  1. for each variable x i and value a , the algorithm records information about the last time x i has been set to a ; in particular, it stores the minimal index j < i such that the assignment to x 1 , , x j , x i was then inconsistent;
  2. for each variable x i , the algorithm stores some information relative to what changed since the last time it has evaluated x i ; in particular, it stores the minimal index k < i of a variable that was changed since then.

The first information is collected and stored every time the algorithm evaluates a variable x i to a , and is done by simply checking consistency of the current assignments for x 1 , x i , for x 1 , x 2 , x i , for x 1 , x 2 , x 3 , x i , etc.

The second information is changed every time another variable is evaluated. In particular, the index of the "maximal unchanged variable since the last evaluation of x i " is possibly changed every time another variable x j changes value. Every time an arbitrary variable x j changes, all variables x i with i > j are considered in turn. If k was their previous associated index, this value is changed to m i n ( k , j ) .

The data collected this way is used to avoid some consistency checks. In particular, whenever backtracking would set x i = a , backmarking compares the two indexes relative to x i and the pair x i = a . Two conditions allow to determine partial consistency or inconsistency without checking with the constraints. If k is the minimal index of a variable that changed since the last time x i was evaluated and j is the minimal index such that the evaluation of x 1 , , x j , x i was consistent the last time x i has been evaluated to a , then:

  1. if j < k , the evaluation of x 1 , , x j , x i is still inconsistent as it was before, as none of these variables changed so far; as a result, no further consistency check is necessary;
  2. if j k , the evaluation x 1 , , x k , x i is still consistent as it was before; this allows for skipping some consistency checks, but the assignment x 1 , , x i may still be inconsistent.

Contrary to other variants to backtracking, backmarking does not reduce the search space but only possibly reduce the number of constraints that are satisfied by a partial solution.

References

Backmarking Wikipedia