拉丁方生成器? (类似数独的约束问题)

时间:2009-11-18 17:02:23

标签: language-agnostic constraints sudoku latin-square

目的

我们正在为需要遵循这些限制的实验设计设计一个拉丁方(类似数独的序列):

  • 值不能连续重复
  • 值不能在列中重复
  • 值不能在任何两行中成对重复

前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仅出现在第一行,但不会出现在其他行中,依此类推每一对。

  • 值应与另外6个符合这些约束的值配对:
    • 第二组值不能连续重复
    • 第二组值不能在列
    • 中重复
    • 与第1设定值配对时,不能重复第2设定值。

也就是说,我们需要另外六个值(再次,任意 - 它们可以是“a,b,c,d,e,f”)与前六个值配对。最后一个约束意味着如果您使用(2,a)任何地方,则无法再次使用它。

最后的第二组约束是问题。 n + n网格没有解决方案,其中n = 6.这就是工作中的猴子扳手。我们希望最小化重复次数,以形成“sorta-kinda”正交的拉丁方格对。

问题

你以前遇到过这个问题吗? (如果有一个工具可以生成解决方案,那就太好了。)我们只需要一个这样的例子用于我们的目的。我们已经尝试了几种不同的施工策略。

我们正在为编写求解器的想法而调情,但如果已存在某些事情,我们希望避免这样做。

2 个答案:

答案 0 :(得分:2)

看看:Dancing Links

  

在计算机科学中,Dancing Links,也称为DLX,是Donald Knuth建议的有效实现算法X的技术。算法X是一种递归的,非确定性的,深度优先的回溯算法,可以找到所有解决方案。掩护问题。一些比较着名的确切覆盖问题包括平铺,N皇后问题和数独。

答案 1 :(得分:0)

我们编写了一个随机置换解决方案的解算器,并在隔夜运行后获得了最佳平衡解决方案。它可能不是最好的方法,但由于约束条件不存在完美的解决方案,我们认为它应该比找到“不那么糟糕”解决方案的其他方法更好。