Как создать конфликтный набор алгоритмов обратного прыжка на основе aima-java? - PullRequest
2 голосов
/ 01 апреля 2019

Я изучаю тему csp, и я застреваю с алгоритмом backjumping.В книге AIMA говорится, что можно получить алгоритм обратного прыжка с небольшой модификацией алгоритма обратного отслеживания с установленным конфликтом.Дело в том, что я не вижу, как установить конфликт в Java.

Я нашел код python, как описано ниже:

def backjumping(assignments, conflict_sets, csp):
    if is_complete(assignments, csp):
        return assignments
    var = select_unassigned_variable(assignments, csp)
    if var is not None:
        # creating conflict set of var
        if len(assignments.keys()) > 1:
            last_var = next(reversed(assignments))
            conflict_sets[var].append(last_var)
            conflict_sets[var].append(conflict_sets[last_var])
    # update conflict set after failure
    else:
        last_var = next(reversed(assignments))
        conflict_sets[last_var].append(conflict_sets[var])
        conflict_sets[last_var].remove(last_var)
        var = last_var
    for value in order_domain_values(var, csp):
        inferences = {}
        if is_consistent(var, value, csp):
            assignments[var] = value
            inferences = inference(var, value, assignments, csp, InferenceType.AC3)
            for key, val in inferences.items():
                assignments[key] = val
            res = backjumping(assignments, conflict_sets, csp)
            if res:
                return res
        assignments.pop(var, None)
        for key, _ in inferences.items():
            assignments.pop(key, None)
    return False
...