Sta*_*nko 5 prolog sudoku constraint-programming
我正在寻找使用约束编程来解决数独问题的替代观点。
经典观点是使用可以取值从1到9 的有限域(行,列)变量。这是一个很好的观点,并且很容易为其定义约束。例如:(1,2)变量的值为4意味着4在第2列的第1行中。
但是很难提出其他观点。我尝试并提出了采用二进制值的3维矩阵的观点。例如变量(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]或任何适用的限制)进行编码其中是否放置了某个数字。就定义约束而言,这可能会很糟糕。(所以我猜这应该被认为是不好的)。它需要将限制集之间的关系编码为单独“已知”。
例如,经典观点中的 (2,5,7) 在该替代方案中意味着 (row2,7)、(col5,7) 和 (um,7)。
正如您所看到的,问题在于逻辑位置和各种约束之间关系的编码。经典的视角建立在对位置数据进行编码的基础上,并对可能的放置应用约束。(解释和解决数独问题的方式。)另一种方法是使用约束集作为视点,并需要将定位作为约束来解决。
不过,普通人的大脑可能会因为这种表现而感到困惑。(而且我不会自愿找出限制因素......)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |