对于一项研究作业,我在C#中重新创建了Norvig的算法,以解决数独作为约束满足问题(CSP)与局部搜索相结合的解决方案,以及一个正方形的可能值的量。现在我需要创建它的扩展或变体,我对这个算法确保弧度一致性的程度感到困惑。目前的算法基本上为此做的是:
现在我的问题是:这个算法是否确保完全的弧度一致性?如果没有,我怎么能改善我的CPS算法?
如果有人能帮我解决这个问题,我将不胜感激!
提前致谢。
最好的问候。
答案 0 :(得分:0)
我很惊讶你添加本地搜索,因为数独在CP中真的很容易解决(通常没有任何分支)。无论如何,Arc一致性可能有三种不同的含义:
在约束网络上建立弧一致性:粗略意味着您调用约束的过滤算法,直到达到修复点。默认情况下,所有求解程序都会执行此操作。使用这个术语的人通常会假设每个约束都有自己的弧一致性算法(参见下一点),对于二元约束来说这是正确的,但在一般情况下通常是错误的(以及现实生活中的问题)。
为约束建立弧一致性:粗略地意味着从每个变量中删除所有属于没有解决方案的值(无论模型的其余部分)。它取决于您用于约束的过滤算法(您可以在过滤功率和运行时间之间进行不同的权衡)。
在问题上建立弧一致性:假设您使用一个自定义全局约束建模整个问题,然后应用先前的定义。
那么你在整个问题上建立AC吗?这意味着所有未经过滤的变量/值赋值都属于解决方案吗?根据你的描述,答案是否定的。
您是否在每个约束上建立AC?嗯,这取决于你的模型。如果你只使用二元约束来陈述你的问题,那么我会说是的。如果要改进过滤,则应使用全局约束,例如AllDifferent。这种约束的弧一致过滤算法比你描述的更复杂,但它也更强大!
您可以查看使用example的Choco Solver。 您还可以使用不同的一致性级别(例如绑定一致性)。