我对必须用 Numberjack 解决的这个问题感到抓狂,这是一个用于 CSP 的 python 库。我们有 nxm 个带有彩色边的正方形。这些方格必须以anxm 网格排列,使方格的相邻边具有相同的颜色。正方形可以旋转和移动。一个例子:
我考虑过使用 4 个矩阵(一个用于 nord,一个用于 sud,一个用于西,一个用于东侧)和一个颜色的数字。Nord(i,j)、West(i,j)、East(i,j)、Sud(i,j) 描述网格上的正方形 i,j。我必须考虑哪些限制?
我对必须用 Numberjack 解决的这个问题感到抓狂,这是一个用于 CSP 的 python 库。我们有 nxm 个带有彩色边的正方形。这些方格必须以anxm 网格排列,使方格的相邻边具有相同的颜色。正方形可以旋转和移动。一个例子:
我考虑过使用 4 个矩阵(一个用于 nord,一个用于 sud,一个用于西,一个用于东侧)和一个颜色的数字。Nord(i,j)、West(i,j)、East(i,j)、Sud(i,j) 描述网格上的正方形 i,j。我必须考虑哪些限制?
由于这听起来像是作业,让我概述一个有效的模型:
将每种给定类型的瓷砖描述为五元组(Type,N,E,S,W)
,其中
Type
是此类瓷砖的标识符,并且N,E,S,W
是北,东,南和西侧的颜色。对于每种类型的瓷砖,有四个这样的元组用于不同的旋转。
用 nxm 相似元组表示网格(Type,N,E,S,W)
,其中
Type
范围在图块类型标识符和N,E,S,W
颜色之上。
然后,您需要三种类型的约束,所有这些都应该在 Numberjack(和其他有限域样式求解器)中很容易表示: