Я изучаю тему 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