| Initialization: generate an initial solution , set and ; |
| While a stopping time condition is not met and , do |
| 1. initialize the value of the best move: set ; |
| 2. generate the best move: for each non assigned variable and each value , test move on as follows: |
| (a) assignment phase: give value to variable and compute the associated set of conflicting variables; |
| (b) reassignment phase (optional): for each variable of , if it is possible to assign another admissible value to |
| without augmenting the number of violations, do it and remove from ; |
| (c) let be the so obtained candidate neighbor solution (which might be non feasible at this stage); |
| (d) update the best candidate move: if , set and ; |
| 3. repairing phase on the best move: remove the value of the conflicting variables of and let be the |
| resulting new current solution; |
| 4. update the record: if , set and |
| Output: solution (which is a complete feasible solution if ); |