コード例 #1
0
ファイル: e02_csp.py プロジェクト: schroeji/Projekt-Euler
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
コード例 #2
0
ファイル: e02_csp.py プロジェクト: schroeji/Projekt-Euler
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"
コード例 #3
0
ファイル: e02_csp.py プロジェクト: schroeji/Projekt-Euler
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