目的
我们正在为需要遵循这些限制的实验设计设计一个拉丁方(类似数独的序列):
前3个约束的示例:
2 3 5 7 11 13
7 2 11 3 13 5
11 5 2 13 7 3
3 7 13 2 5 11
5 13 3 11 2 7
13 11 7 5 3 2
在这里,我们选择素数,但值是任意的(只要有6个不同的值)。请注意,它与6 x 6网格中的sudoku相同,附加约束条件是跨行没有重复对(a.k.a. bigrams)。也就是说,2 3
仅出现在第一行,但不会出现在其他行中,依此类推每一对。
也就是说,我们需要另外六个值(再次,任意 - 它们可以是“a,b,c,d,e,f”)与前六个值配对。最后一个约束意味着如果您使用(2
,a)任何地方,则无法再次使用它。
最后的第二组约束是问题。 n + n网格没有解决方案,其中n = 6.这就是工作中的猴子扳手。我们希望最小化重复次数,以形成“sorta-kinda”正交的拉丁方格对。
问题
你以前遇到过这个问题吗? (如果有一个工具可以生成解决方案,那就太好了。)我们只需要一个这样的例子用于我们的目的。我们已经尝试了几种不同的施工策略。
我们正在为编写求解器的想法而调情,但如果已存在某些事情,我们希望避免这样做。
答案 0 :(得分:2)
在计算机科学中,Dancing Links,也称为DLX,是Donald Knuth建议的有效实现算法X的技术。算法X是一种递归的,非确定性的,深度优先的回溯算法,可以找到所有解决方案。掩护问题。一些比较着名的确切覆盖问题包括平铺,N皇后问题和数独。
答案 1 :(得分:0)
我们编写了一个随机置换解决方案的解算器,并在隔夜运行后获得了最佳平衡解决方案。它可能不是最好的方法,但由于约束条件不存在完美的解决方案,我们认为它应该比找到“不那么糟糕”解决方案的其他方法更好。