在约束满足问题中,试探法可用于提高bactracking求解器的性能。简单回溯求解器的三种常见启发式方法是:
- 最小剩余值(此变量仍然有多少个有效值)
- 度启发式(此变量影响多少其他变量)
- 最小约束值(什么值将为其他变量留下最多其他值)
前两个非常明显并且易于实现。首先选择在其域中剩余值最少的变量,如果存在联系,请选择影响其他变量最多的变量。这样,如果求解器中的父级步骤选择了错误的分配,则如果选择的变量变量剩余的值最少,而影响其他事情最多的话,您可能会更快地发现并节省时间。
这些很简单,定义明确,易于实现。
在我所看到的任何地方,最小约束值都没有明确定义。人工智能:一种现代方法(罗素和诺维格)说:
它更喜欢排除约束图中相邻变量的最少选择的值。
搜索“最小约束值”仅基于此教科书显示了许多大学幻灯片,没有进一步的算法信息。
为此启发式给出的唯一示例是一种情况,其中一个值选择消除了相邻变量的所有选择,而另一个则没有。该示例的问题在于,这是一个小问题,当检查潜在分配与问题约束的一致性时,将立即消除这种情况。因此,在我能找到的所有示例中,最小约束值启发式方法实际上并没有以任何方式使求解器性能受益,除了添加冗余检查带来的较小负面影响外。
我唯一想到的另一件事是测试每个变量的相邻变量的可能赋值,并计算该变量的每个可能赋值所存在的邻居的可能赋值的数量,然后对该变量的值进行排序如果选择了该值,则基于可用的邻居分配数。但是,我看不到如何对随机顺序进行改进,因为这需要测试大量变量组合并基于计数结果进行排序。
谁能提供对最小约束值的更有用的描述,并解释该最小约束值的版本将如何实际产生改进?