数独作为CSP(弧度一致性)

时间:2016-06-30 14:42:42

标签: algorithm constraints sudoku consistency

对于一项研究作业,我在C#中重新创建了Norvig的算法,以解决数独作为约束满足问题(CSP)与局部搜索相结合的解决方案,以及一个正方形的可能值的量。现在我需要创建它的扩展或变体,我对这个算法确保弧度一致性的程度感到困惑。目前的算法基本上为此做的是:

  • 将每个方块的可能值(域)初始化为[1,...,n * n]。
  • 通过从域中删除指定的值,通过从域中消除每个可能的值并更新每个对等体(同一子网格/行/列中的正方形)来完成对方块的每个值的赋值。 (这不是完全确保弧一致性,因为这些是对等体之间的唯一约束;它们可能没有相同的值吗?)
  • 当从方块的域中删除一个值时,它还会检查该单元中是否只剩下1个方格的值。如果是这样,它会将其分配给该方块(也可以通过消除可能的值,将其减少到该值)。

现在我的问题是:这个算法是否确保完全的弧度一致性?如果没有,我怎么能改善我的CPS算法?

如果有人能帮我解决这个问题,我将不胜感激!

提前致谢。

最好的问候。

1 个答案:

答案 0 :(得分:0)

我很惊讶你添加本地搜索,因为数独在CP中真的很容易解决(通常没有任何分支)。无论如何,Arc一致性可能有三种不同的含义:

  • 在约束网络上建立弧一致性:粗略意味着您调用约束的过滤算法,直到达到修复点。默认情况下,所有求解程序都会执行此操作。使用这个术语的人通常会假设每个约束都有自己的弧一致性算法(参见下一点),对于二元约束来说这是正确的,但在一般情况下通常是错误的(以及现实生活中的问题)。

  • 为约束建立弧一致性:粗略地意味着从每个变量中删除所有属于没有解决方案的值(无论模型的其余部分)。它取决于您用于约束的过滤算法(您可以在过滤功率和运行时间之间进行不同的权衡)。

  • 在问题上建立弧一致性:假设您使用一个自定义全局约束建模整个问题,然后应用先前的定义。

那么你在整个问题上建立AC吗?这意味着所有未经过滤的变量/值赋值都属于解决方案吗?根据你的描述,答案是否定的。

您是否在每个约束上建立AC?嗯,这取决于你的模型。如果你只使用二元约束来陈述你的问题,那么我会说是的。如果要改进过滤,则应使用全局约束,例如AllDifferent。这种约束的弧一致过滤算法比你描述的更复杂,但它也更强大!

您可以查看使用exampleChoco Solver。 您还可以使用不同的一致性级别(例如绑定一致性)。