我相信我们可以将包含的最大流形问题简化为布尔可满足性,并通过对这个子问题的任何依赖来显示 NP 完全性。正因为如此,提供的算法 spin_plate是合理的,因为启发式、预计算和机器学习是合理的,如果我们想在这里犯错,诀窍就变成了找到最佳的启发式解决方案。
考虑如下所示的电路板:
..S........
#.#..#..###
...........
...........
..........F
这有许多导致贪婪和门限解决方案失败的问题。如果我们看第二行:
#.#..#..###
我们的逻辑门在基于 0 的二维数组中排序为[row][column]
:
[1][4], [1][5], [1][6], [1][7], [1][8]
我们可以将其重新渲染为一个方程以满足该块:
if ([1][9] AND ([1][10] AND [1][11]) AND ([1][12] AND [1][13]):
traversal_cost = INFINITY; longest = False # Infinity does not qualify
除了无穷大作为不可满足的情况外,我们回溯并将其重新呈现为:
if ([1][14] AND ([1][15] AND [1][16]) AND [1][17]:
traversal_cost = 6; longest = True
我们隐藏的布尔关系属于所有这些门。您还可以证明几何证明不能递归分形,因为我们总是可以创建一个N-1
宽度或高度正好长的墙,这在所有情况下都代表解决方案的关键部分(因此,分而治之不会帮助你)。
此外,由于不同行之间的扰动很重要:
..S........
#.#........
...#..#....
.......#..#
..........F
我们可以证明,如果没有一套完整的可计算几何恒等式,完整的搜索空间会减少到 N-SAT。
通过扩展,我们还可以证明,当门的数量接近无穷大时,验证和非多项式求解是微不足道的。不出所料,这就是为什么塔防游戏对人类来说仍然如此有趣的原因。显然,更严格的证明是可取的,但这只是一个初步的开始。
请注意,您可以显着减少 n-choose-k 关系中的 n 项。因为我们可以递归地证明每个扰动都必须位于关键路径上,并且因为关键路径总是可以在 O(V+E) 时间内计算(通过一些优化来加快每个扰动的速度),所以您可以显着减少您的以广度优先搜索添加到板上的每个附加塔为代价来搜索空间。
因为我们可以容忍地假设 O(n^k) 作为确定性解决方案,所以启发式方法是合理的。因此,我的建议介于spin_plate的答案和Soravux的答案之间,着眼于适用于该问题的机器学习技术。
第 0 种解决方案:使用可容忍但次优的 AI,其中 spin_plate 提供了两种可用的算法。事实上,这些近似于有多少天真的玩家接近游戏,这对于简单的游戏来说应该足够了,尽管具有高度的可利用性。
一阶解决方案:使用数据库。鉴于问题的表述,您还没有完全证明需要即时计算最佳解决方案。因此,如果我们放宽在没有信息的情况下接近随机棋盘的约束,我们可以简单地预先计算K
每个棋盘的所有可容忍的最优值。显然,这只适用于少数板:V!
对于每种配置的潜在板状态,我们不能容忍地预先计算所有最优值,因为它V
变得非常大。
二阶解决方案:使用机器学习步骤。当你缩小导致非常高的遍历成本的差距时,推动每一步,一直运行直到你的算法收敛或找不到比贪心算法更好的解决方案。此处适用的算法过多,因此我建议您参考经典和文献,以选择在您的程序约束范围内有效的正确算法。
最好的启发式方法可能是由局部状态感知、递归深度优先遍历生成的简单热图,在 O(V^2) 遍历之后按最常见到最不常见的遍历对结果进行排序。通过这个输出贪婪地识别所有瓶颈,并且这样做而不会使路径变得不可能是完全可能的(检查这是 O(V+E))。
把它们放在一起,我会尝试这些方法的交集,结合热图和关键路径标识。我假设这里有足够的东西来提出一个好的、功能性的几何证明来满足问题的所有约束。