什么是解决非布尔拼图的好算法?

时间:2017-07-12 10:00:34

标签: algorithm

感谢您花时间考虑这个问题。

我的问题是解决一个没有完美解决方案的非布尔拼图。 在常规拼图中,两个匹配并且可以彼此相邻放置,或者不匹配。 在非布尔拼图中,任何棋子都可以放在任何其他棋子旁边,但是可以为两件之间的每个交叉点建立匹配分数,介于0和1之间。 在这里,让我们说最好的"解决方案"是最大化解决难题中所有交叉点平均得分的那个。 与大难题一样,测试所有解决方案变得不可能,我想要一种能够提供相对良好的解决方案的算法。

实际上,我并不是在处理拼图,而是使用平铺图像来处理拼贴。我们通过比较它们的边缘像素来获得瓦片连接的匹配分数。 带有舒适瓷砖的图像如下所示:

shuffeled tileset

在我的情况下,附加规则适用:
- 没有两件是相同的。但是两件可能具有相同的边缘。
- 当解决时,瓷砖不必具有特定的形状。我希望它大致呈方形/矩形。
- 可以留下没有碎片的空白瓷砖。

我想要的是一个算法的想法,可以提供一个体面的解决方案是合理的时间(几分钟是完全可以的)。 如果您认为良好解决方案的定义(目前:在最终图像中获得平均最高结点分数)是错误的,请随意更改它以匹配您的算法。 我对该解决方案的一个问题是,目前,您可以将两个图块放在一起以获得1分,并将每个其他图块与空格分开以防止它们获得较低分数。技术上给出了1的完美平均分,但最终的图像将包含多余的空白,这不是我想要的。

为了便于理解,这里有一个答案,我会发现上述问题非常好:

Very good solution

显然我会对输出效果感到惊讶,但我希望至少相似的瓷砖在最终图像中彼此接近。

感谢您的时间,并记住任何想法都是受欢迎的,即使是奇怪的想法。

0 个答案:

没有答案