什么是最小约束值?


11

在约束满足问题中,试探法可用于提高bactracking求解器的性能。简单回溯求解器的三种常见启发式方法是:

  • 最小剩余值(此变量仍然有多少个有效值)
  • 度启发式(此变量影响多少其他变量)
  • 最小约束值(什么值将为其他变量留下最多其他值)

前两个非常明显并且易于实现。首先选择在其域中剩余值最少的变量,如果存在联系,请选择影响其他变量最多的变量。这样,如果求解器中的父级步骤选择了错误的分配,则如果选择的变量变量剩余的值最少,而影响其他事情最多的话,您可能会更快地发现并节省时间。

这些很简单,定义明确,易于实现。

在我所看到的任何地方,最小约束值都没有明确定义。人工智能:一种现代方法(罗素和诺维格)说:

它更喜欢排除约束图中相邻变量的最少选择的值。

搜索“最小约束值”仅基于此教科书显示了许多大学幻灯片,没有进一步的算法信息。

为此启发式给出的唯一示例是一种情况,其中一个值选择消除了相邻变量的所有选择,而另一个则没有。该示例的问题在于,这是一个小问题,当检查潜在分配与问题约束的一致性时,将立即消除这种情况。因此,在我能找到的所有示例中,最小约束值启发式方法实际上并没有以任何方式使求解器性能受益,除了添加冗余检查带来的较小负面影响外。

我唯一想到的另一件事是测试每个变量的相邻变量的可能赋值,并计算该变量的每个可能赋值所存在的邻居的可能赋值的数量,然后对该变量的值进行排序如果选择了该值,则基于可用的邻居分配数。但是,我看不到如何对随机顺序进行改进,因为这需要测试大量变量组合并基于计数结果进行排序。

谁能提供对最小约束值的更有用的描述,并解释该最小约束值的版本将如何实际产生改进?


AI:AMA(第228页)提到了最小约束值启发式方法是Haralick和Elliot(1980)提出的。这篇论文(在这里找到)使用的语言与AI:AMA中使用的语言大不相同,因此我很难确定哪一部分引用了LCV启发式方法。
瑞安

Answers:


3

看到这个链接:

https://people.cs.pitt.edu/~wiebe/courses/CS2710/lectures/constraintSat.example.txt

它首先选择变量“ O”,然后使用所有合法值“ i”测试“ O”,以查看“ O”的邻居“ N”的减少数量。它添加了所有这些。并选择导致减少量减少的“ i”:

   sums = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0}
   For i from 0 to 9:  
     plug "o=i" into the constraint formulas
     For each neighbor "N" of "o" in the constraint graph:
       sums[i] += the number of values remaining for "N"

它选择“ i”,以便:

sums[i] = MAX{sums[i] | for all "i" that is a member of "O",s valid values}

希望这可以帮助您找到答案!


1
这不能回答explain how that version of least-constraining-value would actually yield an improvement?
skrtbhtngr

1

我认为这里最主要的是根据求解器编写的任务来应用这些启发式方法。并且如果某个变量的选定值没有在另一个变量的域中留下单个值的可能性(假设我们只有一个解决方案存在严重约束的问题),那么该解决方案将陷入停顿。 。而且,随机搜索可以沿着正确的道路进行,而最终导致错误的决定。而且如果出错,则必须进行回溯(请参阅冲突导向的回跳),这需要花费大量的计算时间。但是使用LCV启发式算法的算法更有可能沿着更正确的路径前进,并且不需要回报。但是,如果存在约束不足的问题,我认为它将非常类似于随机搜索。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.