目录
未校对
7 Constraint propagation algorithms
- Q: 举例说明“Sometimes a CSP can already be solved solely by means of a constraint propagation algorithm”.
A: 对于具体例子有unifier问题,线性方程组等。
更抽象的有关于有向图“归纳”造instantiation的定理等。 - Q: 在propagation过程中,我们需要关注stabilizing结果的存在性(“收敛性”),唯一性,以及()。
A: 算法的效率(“收敛速度”)(即:减少redundant/irrelevant applications)
7.1 Generic iteration algorithms
7.1.1
- Q: 为什么用偏序关系作为考察迭代的框架?
A: 迭代形成链,链内部往往有一定序关系,可证明收敛性等。
要有序关系,但不同链之间往往难以排成全序(如,对于笛卡尔积,定义:\(a\)逐元素都先于\(b\),\(a\)才先于\(b\)),所以用偏序。 - Q: 为了证明一族有限个单调函数对于有最小元的偏序集的least common fixed point(最小公共不动点)可以由()得到,只需归纳利用单调性。
这里的least是在偏序关系中的最小,定义是(),单调也是在偏序关系中的单调,定义是()。
A: 对偏序集\(D\)最小元素\(\perp\)任意应用若干次\(f_{n_i}\)直至找到不动点
\(d\sqsubseteq e,\forall e\in D\)则\(d\)为最小元(“小于等于”一切元)
\(f(d)\sqsubseteq f(e),\forall d\sqsubseteq e\)则\(f\)为单调函数
注:这里的单调性是非常强的性质,它保证了应用后两个函数结果仍可以比较!这就在某种程度上绕过了考察偏序集的一些困难,从而导出了此命题。 - Q: 接上,保持单调,再加入()和可交换条件,则可显式写出最小公共不动点为()。
A: 幂等(idempotent),\(f_1\cdots f_k(\perp)\)(当然,此处可任意交换函数复合的顺序)
注:可以看到幂等在此起了核心作用。看起来像是能“吸收”任何新复合进来的。 - Q: Semi-commutativity即“推入下标大的函数,结果变大”时,除了幂等和单调再加入()条件才能推出和2.类似的结论,因为()
结论(不是问条件)与2.不同的点是()
A: inflationary(\(x\sqsubseteq f(x)\))
从外往内交换越交换越大(而不是相等) 这只有一个方向 还需要inflationary给出另一个方向
最小公共不动点必须是\(f_1f_2\cdots f_k (\perp)\),不能用其它顺序去复合函数 - Q: 类似于单调有界必有极限的思想,对于有限偏序集,考察()(当然,单调等条件继承1.)的有限函数集合,不断迭代后一定能找到不动点。
如果想加强结论,使得这不动点确实是公共不动点从而套用1.,可以加入()条件。
A: inflationary
regular(即如果\(f(d_m)\ne d_m\)则在\(step>m\)之后\(f\)至少被迭代过程使用了一次)
7.1.2
- Q: 考察计算最小公共不动点的算法。之前有关交换性的结论对应()的做法,()对应依次应用各个函数的做法。
而regular条件对应()的做法。
A: 任意顺序应用所有函数
有关半交换性的结论
不断尝试应用函数,如果应用某个函数\(g\)导致\(f\)从\(f(d)=d\)变成\(fg(d)\ne g(d)\)了,就照顾regular条件而将\(f\)添加进待考察集合\(G\). (如果不产生这种效果即可直接删除\(g\))当\(G\)空了就说明迭代完成。 - Q: 接上,关于“regular”的算法处,为什么我们要添加“多余”的函数进入\(G\)?
A: 精确计算哪些函数要添加可能花费过大。 - Q: 接上,“字典序”和“循环不变量”等证明算法正确性的用法此处是具体如何使用的?
A: 某量在循环中单调且“有界”或说有限("well-foundedness",没有无穷递降序列),就可确定最终一定“停在某个值”(“极限”)。
比如此处按字典序\((d,cardG)\),可以论证\(d\)最后停留在某一不动点。
“循环不变量”:谓词\(\forall f\in F-G, f(d)=d\)是循环不变量,所以最终“极限”\(d\)确实是公共不动点。
7.1.3
- Q: 解说记号\((\perp_1,\cdots,\perp_n)\).
A: Cartesian product of the partial orderings中,每个分量都是最小元,则总体也是笛卡尔积的最小元。 - Q: 为什么要考虑函数“是否依赖于某个变量”(即:该变量的改变是否可能影响函数值)的性质?
A: 可以快速检测\(g(d)=d\)是否成立(这显然等价于对于\(g\)的"scheme",\(g(d[s]) = d[s]\))
可以快速检测\(f(g(d))=f(d)\)是否成立(这显然等价于\(f\)依赖于某个\(i\),使得\(d[i]\ne g(d[i])\))
就不需要依次检测每个变量,多了很多无谓比较。
注:这里两次用到\(g(d)\),显然应该新引入变量\(d'\)存储\(g(d)\),而不要重复计算。
7.2 From partial orderings to CSPs
- Q: 对于CSP问题,偏序集(分量)元素,公共不动点,函数,单调分别具体指什么?
A: 偏序集(每个分量)的元素是:定义域的子集或约束的子集(一元关系或多元关系),各个集合(关系)之间以“包含于”关系形成偏序
公共不动点:满足local consistency(无法再剪枝)
函数:“剪枝规则”
单调:剪枝规则“保持包含于关系” - Q: 最小元指的是空集嘛?
A: 如果按本书的偏序集不动点算法记号,则不是。是全集。
7.3 - 7.6
- Q: 对于node consistency,我们使用“交换性对应的算法”“半交换性对应的算法”还是“regularity对应的算法”?
A: 交换性对应的算法(因为node consistency的剪枝过程有交换性)。即以任意顺序应用一遍。 - Q: 对于arc consistency,我们使用哪种算法?
A: 没有交换性或半交换性。只能对有限情况,使用regular对应的算法。 - Q: 为什么有向的arc consistency就有了半交换性?
A: 假设总是拿编号大变量去剪编号小变量的定义域。
那么只有“拿3剪2,再拿2剪1”这样的结构会让1额外被多剪。
7.7 - 7.8
- Q: 对无向path consistency使用算法时,考察的函数集合是什么?
A: 对于每个三元组\(x,y,z\),都有3个函数(3条规则) - Q: 如何理解"Note that in contrast to the Arc Algorithm Theorem we do not need to assume that the CSP is finite, but only that its binary constraints are finite."
A: 此处偏序集的元素是二元关系,而不是定义域。所以不要求定义域有限,而是二元关系有限。 - Q: 对于有向情况,如何理解\(V_{x,y}\)里只有5类元素,缺了一类?这个有向指的是dirctional path consistency嘛?
A: 确定剪了\((x,y)\)的二元关系,考察它可能影响的函数(关于\(x,y,u\)的函数)
\(x,u\)先后顺序不确定,\(y,u\)也不确定,所以各自对应了两类函数(即\(f^y_{x,u},f^y_{u,x},f^x_{u,y},f^x_{y,u}\).
但\(x,y\)先后顺序确定,故只对应一类函数\(f_{x,y}^u\)
这里的有向只是讨论\(x,y,u\)间关系。即实际操作中哪些转置哪些不转置。
“consistency”仍然是无向path consistency的定义,即剪每个二元约束,并不是像directional path consistency一样只剪“靠前”的二元约束。 - Q: 接上,directional path consistency可以带来()性。待考察的函数集合是()
A: 半交换
把一共\(C_n^3\)个函数排列成“四面体”,即“越来越小的一系列三角形”。前面是剪编号小的(依据编号大的)。即第一个是\(f_{x_1,x_2}^{x_n}\).
这样一来,所有非交换的情况肯定都是先应用后面的函数(先剪了编号大的,从而使得应用靠前函数依据编号大剪编号小受到影响)
7.9
- Q: k-consistency的不充要对构造算法有影响嘛?
A: 这个不充要性是“规则下封闭”不等价于“local consistency”。前者可以推出后者。而我们本章就是得到函数不动点(规则封闭),能推出local consistency. 所以不影响。 - Q: 为什么额外引入\(\frac {C_X}{C_X\cap \bar {C_X}}\)规则对应的那些函数?
A: 提升算法实际运行的效率,但不改变等价性。
7.11
- Q: 对于“同类”算法,规则集直接取并就可以保证算法收敛结果能()
A: 同时满足多种local consistency - Q: 解说“This vast repertoire of operations is sufficient to describe the domain reduction rules that we considered so far”
A: 通过证明基本操作具有性质,操作间复合保持性质,构造出一系列满足性质的操作。
类似于“原始递归函数”等的思想。
具体地,思想类似于\(f(a)<f(b),g(a)<g(b),h(a_1,a_2)<h(b_1,b_2),h(f(a),g(a))<h(f(b),g(b))\)(其中所有涉及字母a的都小于对应的涉及字母b的) - Q: 解说前述某些算法的不确定性。
A: 某些“算法”的“select”等步不确定,所以并不是狭义定义下的算法。
实际运行中,根据数据结构不同(队列?哈希?),将具体地schedule它们(具体实现不同,效率和稳定性等可能不同)。 - Q: (为了效率)使用本章的算法一定要得到local consistent CSP嘛?
A: 不一定。比如中途fail直接停止。fail的那一刻不一定local consistent.
(但实际上你可以做一些多余的动作,比如对arc consistency,直接剪到全空,则trivially arc consistent了)