prolog – 观点数独

我正在寻找替代视点来解决使用约束编程的数独问题.

经典观点是使用可以从1到9取值的有限域(行,列)变量.这是一个很好的观点,并且很容易为它定义约束.例如:(1,2)变量值为4表示4表示第2列第1行.

但是很难提出其他观点.我尝试并提出了采用二进制值的三维矩阵的观点.例如,变量(1,2,7),其中1表示值意味着第2列中的第1行中有7个.但如果所有其他视点都无法提供良好的约束,则应使用二进制值.

还有其他好的观点吗?

编辑:一个好的观点应该允许简洁地表达约束.我更喜欢允许使用尽可能少的约束来描述问题的视点,只要这些约束具有有效的算法.

定义观点:视点是一对X,D,其中X = {x1,… . . ,xn}是一组变量,
和D是一组域;对于每个xi∈X,关联域Di是一组
x的可能值.必须有可能将变量和值赋予意义
在问题P方面的CSP,以及在视点中说什么分配
X,D旨在用P表示.

最佳答案 您提供的视点是数独构建的关系(行,列,数字)的位置编码的同态映射.

另一种方法是编码限制集(行[1-9],列[1-9],正方形[ul,um,ur,ml,mm,mr,ll,lm,lr]或任何适用的限制)和是否放置了某个数字.这可能会
在定义约束方面很糟糕. (所以我猜它被认为是不好的).它要求将限制集之间的关系分别编码为“已知”.

例如.经典观点中的a(2,5,7)在这个替代方案中意味着(第2,7栏),(第5,7栏)和(第7段).

如您所见,问题在于逻辑位置和各种约束之间关系的编码.
经典的vieport建立在对位置数据进行编码的基础上,并对可能的位置应用约束. (解释和接触sudoko以解决问题的方式.)替代方案是使用约束集作为视点,并且需要将定位作为约束来解决.

然而,正常人可能会从这种表现中得到一个结. (而且我不会自愿想出制约因素……)

点赞