目录
未校对
8 Search
8.1 Search trees
- Q: 如何理解"leaves all of which are ‘manifestly failed’."
A:
The reference to ‘manifestly’ means that it is straightforward to generate all solutions to the CSP, in case it is ‘manifestly solved’, or to determine that no solution to it exists, in case it is ‘manifestly failed’.
是不严格概念,不同的理解引出不同的标准,不同的算法等。
- Q: 搜索的可行性:叶子的并等价于()。
定义域有限对可行性有什么帮助?
A: 根节点
极端地,暴力搜最后总能逐个讨论
不过定义域不有限也未必不能搜到底讨论。
8.2 Labeling trees
- Q: labeling和enumerating有何区别?
A: enumerating:二叉树。不全部分类讨论而是一次弄出一个 - Q: 用贪心法解释select in the search algorithms the variables with the smallest domains first.
A: 提示:考虑分到某一步,此时先分定义域小的再分定义域大的,还是先分定义域大的再分定义域小的?
此时可以说明任意相邻两次拆分都是先分小的。从而贪心。 - Q: 对于暴力讨论加上剪枝和传播时,传播是reduce后面(future)变量定义域还是前面?为什么?
A: reduce后面。前面是单元素集。
注:reduce时,任何一个集合到空集了即失败。 - Q: 如何理解“不用CSP表示树的节点”?
A: 嵌入。即从某种对象可构造到CSP的“保持结构的单射”。
例如instantiation,部分instantiation,\(\mathcal D\mathcal E\)等
8.4 Instances of prop labeling trees
- Q: FORWARD CHECKING和MAC有何区别?
A: 前者每次对\(i+1\sim n\)的每个变量定义域中每个值和前面\(i\)个一起看是否一致即可。不一致则删。
后者看“删除值”之后,进一步看会不会让有些定义域(在arc consistency的剪法下)变空。
注:forward checking的forward和look ahead的ahead有点让人容易被迷惑。一个指的是“前面”,一个指的是“未来”
(look forward可以是“展望未来”……总之这俩术语迷惑) - Q: 两种LOOK AHEAD和什么local consistency联系?
A: “不完全”(弱)的和directional arc consistency联系(“只删会导致后面定义域空的”)
“强”的,即MAC和arc consistency联系(“删任何会导致定义域空的”)
8.5 Search algorithms for the labeling trees
- Q: 如何理解call-by-value和call-by-variable
A: 提示:某种类型和该类型的指针不是一种类型。 - Q: 如何理解Backtrack-free Search和“树的兄弟是否有序”的关系?
A: 提示:Backtrack-free只尝试一次,失败就失败了不回溯。所以成败结果和“选了哪条路”有关。这时树的兄弟在实际中被考察的顺序决定结果。
正常的有回溯的方法,兄弟顺序不影响结果。 - Q: 为了保证Backtrack-free能正常找到解,对应()consistency(且对图的width有要求)。
A: strong \(k-\)
注:回忆\(k-consistency\)的核心思想就是“延拓instantiation”的定义域到新的一个元素。 - Q: 如何理解
remove from the resulting tree all the leaves L with the following property:
there exists a sibling of L lying to its right which is not a leaf;
in the original tree these removed nodes will be visited by the algorithm, but will not be selected since their unique descendant in the original tree is a failed node
A: 带有约束传播的backtrack-free相比没有约束传播,简单来说就是不“左边一条路走到黑”,如果发现传播后马上失败(“叶子”)就及时“右移一个兄弟”
所以如果叶子右边有非叶子,那这个叶子不会被选择。
(注:然而这种做法显然也会“走上歧路”,因为它只“预考虑一步”)
- Q: backtrack中的递归调用相比前面的backtrack-free with constraint propagation有何不同?
A: “预先看到底”而不是“预先看一步”
(思考:递归和回溯有何联系?) - Q: backtrack with constraint propagation得到哪种树里的哪种节点?(成功时)
A: prop labaling tree(注意是通过propagation多做了一些“剪枝”的。不是简单的reduced labeling tree.),最左侧的“成功”节点
(说白了就是直接暴力分类讨论。每次“讨论完一类再讨论下一类”。第一个成功的类就是最左侧的)
8.7 Search algorithms for finite constrained optimization problems
- Q: Monotocity包含了Bound嘛
A: 否。\(obj\)值和\(h\)在对应单元素集上的值未必相等,而是\(obj \le h\)
Monotocity是说非单元素集的\(h\)大于等于单元素集的。
Bound是说单元素集的h大于对应\(obj\) - Q: 如何理解NIL和-infinity?
-infinity和cost constraint有何联系?
A: NIL:无解的标识符
-infinity:还没找到解时,任何一个解都马上“放进来”。对于最大化,初始是最小(-infinity)。对于最小化反之。
cost constraint此时就是\(obj>-infinity\),即相当于没有cost constraint. - Q: cost constraint的()(选填“语法”或“语义”)是合法的时,可以“动态添加约束”。例如()
A: 语法
线性规划问题中,目标函数也线性。
8.8 Heuristics for search algorithms
- Q: 如何理解"Select a most constrained variable, ..., non-linear equation to a linear one"
A: 提示:出现在更多约束,则“传播威力”大,剪更多东西。甚至可能“代入法”把一些非线性式变为线性式。 - Q: Value selection(比如选择最大/最小/中间)和之前的Variable selection体现在搜索树上有什么异同?
A: 都是过程中动态生成树的结构
只不过一个是兄弟之间排序问题,另一个直接把后面每一层考察什么变量的顺序改了。 - Q: 约束求解(而不是优化)问题也可以用heuristic function决定取值嘛?
A: 可以。比如“某种程度上反映概率”“把约束求解问题转化成约束优化问题”之类。当然并不严格。
8.9 An abstract branch and bound algorithm
- Q: 为了处理无穷定义域,本节相比labeling tree做了什么处理?
A: 每个子节点不再是“labeling”,而是引入了某个抽象的“列举有限个子节点”的过程(children)