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

Language agnostic 拉丁方生成器?(类似数独的约束问题),language-agnostic,constraints,sudoku,latin-square,Language Agnostic,Constraints,Sudoku,Latin Square,目的 我们正在为实验设计设计一个拉丁方(类似数独的序列),需要遵循以下约束: 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 值不能在一行中重复 值不能在列中重复 值不能在任何两行中成对重复 前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 
  • 值不能在一行中重复
  • 值不能在列中重复
  • 值不能在任何两行中成对重复
前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个不同的值)。请注意,它与6x6网格中的数独相同,还有一个附加约束,即行之间没有重复的对(也称为bigrams)。也就是说,
23
仅显示在第一行,而不显示在其他行中,依此类推,每对显示一次

  • 值应与符合这些约束条件的其他6个值配对:
    • 第二组值不能在一行中重复
    • 第二组值不能在列中重复
    • 当与第一组值配对时,第二组值不能重复
也就是说,我们需要另外六个值(同样是任意的——它们可以是“a,b,c,d,e,f”)与前六个值成对。最后一个约束意味着如果在任何地方使用(
2
,a),则不能再次使用它

最后第二组约束就是问题所在。对于n=6的n x n网格,没有解决方案。这是工作中的活扳手。我们想尽量减少重复的次数,制作一对“sorta-kind”正交的拉丁方

问题

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

我们正在考虑为它编写一个解决方案,但如果已经存在某些问题,我们希望避免这样做。

看看:

在计算机科学中,Dancing Link,也称为DLX,是Donald Knuth提出的一种技术,用于有效地实现其算法X。算法X是一种递归的、不确定的、深度优先的回溯算法,可以找到精确覆盖问题的所有解。一些更为人熟知的精确封面问题包括平铺、N皇后问题和数独


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

?如果是,请标记为suchYou在解释第一组3个约束方面做得很好,但我不知道你所说的后一组约束是什么意思。你还说这是无法解决的,但要求解决?请澄清。不,不是作业。我以为有人会这么说。:)这是我们在我的工作场所遇到的一个真正的问题。@Brian:对“解决方案”这件事感到抱歉——一句话的一部分是从问题的前一稿中遗留下来的。我已经更新了倒数第二段来反映这一点。@Brian:关于约束条件:我们需要2个拉丁方。第一个约束不能让每行重复一对(第一组约束)。第二个只是一个普通的拉丁方,但它需要与第一个“有点”正交。(也就是说,当组合时,我们希望尽可能少地重复(2,a)、(3,b)、(4,a)等。)我们知道不存在完美的正交解,但我们希望尽可能接近。谢谢,我们之前没有意识到这一点。我不确定这会有多适用,因为这更像是一个最小化问题(目前)。我们可以看看是否可以将
n
更改为5或7。