观点数独
Viewpoints Sudoku
我正在寻找使用约束规划解决数独问题的替代观点。
经典观点是使用有限域(行,列)变量,取值范围为1到9。这是一个很好的观点,而且很容易定义约束为了它。例如:(1,2) 值为 4 的变量表示 4 在第 1 行第 2 列中。
但很难提出其他观点。我尝试并提出了采用二进制值的 3 维矩阵的观点。例如变量 (1,2,7) 以 1 作为值意味着第 1 行第 2 列有一个 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],或任何限制适用)以及是否在其中放置了某个数字。这可能会是
在定义约束方面很糟糕。 (所以我猜这被认为是不好的)。它要求将限制集之间的关系分别编码为"known"。
例如经典观点中的 (2,5,7) 在此替代方案中表示 (row2,7),(col5,7) 和 (um,7)。
如您所见,问题在于逻辑位置与各种约束之间关系的编码。
经典视口建立在编码位置数据的基础上,并对可能的放置施加约束。 (解释和解决数独的方式。)另一种方法是使用约束集作为视点,需要将定位作为约束来解决。
不过,普通人可能会因为这种表现而陷入困境。 (而且我不会自愿找出限制...)
另一种可能的观点如下:
让我们首先为每个 3x3 区域关联一个数字(左上角为 1,顶部为 2,等等),并在每个区域内为其中的所有 9 个方块分配一个数字(左上角为 1 , top 是 2,等等)。
X={Xi,j | i ∈ 1..9, j ∈ 1..9 } 其中 Xi,j 具有域 1..9 并指定区域 j 中数字 i 的位置。区域约束已经用这个模型编码了,剩下的两个是行和列约束。
这是行约束:
对于每个数字 i ∈ 1..9
对于每个 (a,b,c) ∈ {(1,2,3),(4,5,6),(7,8,9)}
(X<sub>i,a</sub>,X<sub>i,b</sub>,X<sub>i,c</sub>) ∈ {(1 ,4,7),(1,4,8),(1,4,9),(1,5,7),(1,5,8),(1,5,9),(1,6 ,7),(1,6,8),(1,6,9),(2,4,7),(2,4,8),(2,4,9),(2,5,7 ),(2,5,8),(2,5,9),(2,6,7),(2,6,8),(2,6,9),(3,4,7), (3,4,8),(3,4,9),(3,5,7),(3,5,8),(3,5,9),(3,6,7),(3 ,6,8),(3,6,9)}
列约束类似,但具有 (a,b,c) ∈ {(1,4,7),(2,5,8),(3,6,9)}。
此视图是基于区域的,但存在其他两个基于行和列的类似视图。
存在其他视图,例如 X={Xi,j | i ∈ 1..9, j ∈ 1..9 } ∪ {Yi,j | i ∈ 1..9, j ∈ 1..9 } 其中 Xi,j 是区域 j 中数字 i 的行(从 1 到 3),Yi,j 它的列。您需要做的就是弄清楚如何表达约束。
我正在寻找使用约束规划解决数独问题的替代观点。
经典观点是使用有限域(行,列)变量,取值范围为1到9。这是一个很好的观点,而且很容易定义约束为了它。例如:(1,2) 值为 4 的变量表示 4 在第 1 行第 2 列中。
但很难提出其他观点。我尝试并提出了采用二进制值的 3 维矩阵的观点。例如变量 (1,2,7) 以 1 作为值意味着第 1 行第 2 列有一个 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],或任何限制适用)以及是否在其中放置了某个数字。这可能会是 在定义约束方面很糟糕。 (所以我猜这被认为是不好的)。它要求将限制集之间的关系分别编码为"known"。
例如经典观点中的 (2,5,7) 在此替代方案中表示 (row2,7),(col5,7) 和 (um,7)。
如您所见,问题在于逻辑位置与各种约束之间关系的编码。 经典视口建立在编码位置数据的基础上,并对可能的放置施加约束。 (解释和解决数独的方式。)另一种方法是使用约束集作为视点,需要将定位作为约束来解决。
不过,普通人可能会因为这种表现而陷入困境。 (而且我不会自愿找出限制...)
另一种可能的观点如下:
让我们首先为每个 3x3 区域关联一个数字(左上角为 1,顶部为 2,等等),并在每个区域内为其中的所有 9 个方块分配一个数字(左上角为 1 , top 是 2,等等)。
X={Xi,j | i ∈ 1..9, j ∈ 1..9 } 其中 Xi,j 具有域 1..9 并指定区域 j 中数字 i 的位置。区域约束已经用这个模型编码了,剩下的两个是行和列约束。
这是行约束:
对于每个数字 i ∈ 1..9
对于每个 (a,b,c) ∈ {(1,2,3),(4,5,6),(7,8,9)}
(X<sub>i,a</sub>,X<sub>i,b</sub>,X<sub>i,c</sub>) ∈ {(1 ,4,7),(1,4,8),(1,4,9),(1,5,7),(1,5,8),(1,5,9),(1,6 ,7),(1,6,8),(1,6,9),(2,4,7),(2,4,8),(2,4,9),(2,5,7 ),(2,5,8),(2,5,9),(2,6,7),(2,6,8),(2,6,9),(3,4,7), (3,4,8),(3,4,9),(3,5,7),(3,5,8),(3,5,9),(3,6,7),(3 ,6,8),(3,6,9)}
列约束类似,但具有 (a,b,c) ∈ {(1,4,7),(2,5,8),(3,6,9)}。
此视图是基于区域的,但存在其他两个基于行和列的类似视图。
存在其他视图,例如 X={Xi,j | i ∈ 1..9, j ∈ 1..9 } ∪ {Yi,j | i ∈ 1..9, j ∈ 1..9 } 其中 Xi,j 是区域 j 中数字 i 的行(从 1 到 3),Yi,j 它的列。您需要做的就是弄清楚如何表达约束。