def backtracking(csp, ac_3=False): """ Implement the basic backtracking algorithm to solve a CSP. Optional: if ac_3 == True use the AC-3 algorithm for constraint propagation. Important: if ac_3 == false don't use AC-3! :param csp: A csp.ConstrainedSatisfactionProblem object representing the CSP to solve :return: A csp.ConstrainedSatisfactionProblem, where all Variables are set and csp.complete() returns True. (I.e. the solved CSP) """ if (csp.complete()): return csp var = firstUnassigned(csp.variables) if (var == None): # falls keine unbelegte Variable existiert ist Rekursionszweig abgeschlossen return csp for value in var.domain: var.set_value(value) fail = False # gibt an ob midnestens ein constraint verletzt wurde for constraint in csp.get_constraints_for_variable(var): if (not constraint.consistent()): fail = True break if (not fail): result = backtracking(csp,ac_3) if (result != None): return result var.set_value(None) return None
def mrvwd_rec (csp, order): if csp.complete(): return (csp, order) else: var=mrv_variable_degree(csp) order.append(var) for value in var.domain: var.value=value if csp.consistent(): result=mrvwd_rec(csp,order) if result!="failure": return result var.value=None return "failure"
def mrv_rec (csp, order): if (csp.complete()): return (csp, order) var = mrv_variable(csp) order.append(var) if (var == None): # falls keine unbelegte Variable existiert ist Rekursionszweig abgeschlossen return (csp, order) for value in var.domain: var.set_value(value) fail = False # gibt an ob midnestens ein constraint verletzt wurde for constraint in csp.get_constraints_for_variable(var): if (not constraint.consistent()): fail = True break if (not fail): result = mrv_rec(csp,order) if (result != None): return result #hier auf keinen Fall ein Tupel übergeben. war ein ganz dummer fehler var.set_value(None) return None