【发布时间】:2018-10-06 19:01:47
【问题描述】:
我正在尝试为给定算法的约束满足问题实现这个递归回溯函数:
function BACKTRACKING-SEARCH(csp) returns solution/failure
return RECURSIVE-BACKTRACKING({},csp)
function RECURSIVE-BACKTRACKING(assignment,csp) returns soln/failure
if assignment is complete then return assignment
var <- SELECT-UNASSIGNED-VARIABLE(VARIABLES[csp],assignment,csp)
for each value in ORDER-DOMAIN-VALUES(var,assignment,csp) do
if value is consistent with assignment given CONSTRAINT[csp] then
add {var = value} to assignment
result <- RECURSIVE-BACKTRACKING(assignment, csp)
if result != failure then return result
remove {var = value} from assignment
return failure
BACKTRACKING-SEARCH(csp) 中 csp 的输入是一个 csp 类,它包含 a) 状态列表,b) 颜色列表,以及 c) 以状态为键且值为该州不能具有相同颜色的邻居列表。
问题是我很难理解算法是如何正确工作的。如果有人能给我这个算法的正确解释,将不胜感激。我的一些具体问题是:
if assignment is complete then return assignment
我假设由于赋值是作为空字典 {} 输入的,因此这将返回解决方案,即包含状态及其颜色的字典。但是,我不明白如何检查作业是否完成?是否类似于根据状态数量检查字典的大小?
var <- SELECT-UNASSIGNED-VARIABLE(VARIABLES[csp],assignment,csp)
输入 csp 类包含一个状态列表,我假设这可能只是 var 等于弹出列表中的一个值?我想,让我感到困惑的是,考虑到我的输入,我不确定参数 (VARIABLES[csp], assignment, csp) 在做什么。
for each value in ORDER-DOMAIN-VALUES(var,assignment,csp) do
再一次,对 (var, assignment, csp) 的输入到底在做什么感到困惑。但我假设它会遍历状态字典中的每个值(邻居)?
if value is consistent with assignment given CONSTRAINT[csp] then
add {var = value} to assignment
result <- RECURSIVE-BACKTRACKING(assignment, csp)
if result != failure then return result
remove {var = value} from assignment
如何正确检查值是否与给定约束[csp] 的赋值一致?我认为约束应该是我尚未实现的 csp 类的一部分?我不明白这个 if 语句在检查方面做了什么。如果有人能清楚地解释这个 if 语句和 if 语句的主体,那将是非常有用的。
【问题讨论】:
-
这是某种深奥的语言,还是只是书中的算法?如果是后者,引用来源可能会有所帮助,因为这里似乎缺少很多上下文。书籍通常会在前面的章节中解释他们用于伪代码的符号。
-
取自演讲幻灯片
标签: algorithm artificial-intelligence recursive-backtracking