Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. import itertools, copy
  2. from csp import *
  3.  
  4. def arc_consistent(csp):
  5. csp = copy.deepcopy(csp)
  6. tda = {(x, c) for c in csp.constraints for x in scope(c)}
  7. while tda:
  8. x, c = tda.pop()
  9. ys = list(scope(c) - {x})
  10. new_domain = set()
  11. for xval in csp.var_domains[x]:
  12. assignment = {x: xval}
  13. for yvals in itertools.product(*[csp.var_domains[y] for y in ys]):
  14. assignment.update({y: yval for y, yval in zip(ys, yvals)})
  15. if satisfies(assignment, c):
  16. new_domain.add(xval)
  17. break
  18. if csp.var_domains[x] != new_domain:
  19. csp.var_domains[x] = new_domain
  20. for cprime in set(csp.constraints) - {c}:
  21. if x in scope(c):
  22. for z in scope(cprime):
  23. if x != z:
  24. tda.add((z, cprime))
  25. return csp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement