Algorithm 确定奥赛罗中的稳定圆盘

Algorithm 确定奥赛罗中的稳定圆盘,algorithm,stability,Algorithm,Stability,我试图确定奥赛罗棋盘上的哪些碟片是马厩盘(在游戏剩下的时间里不能翻转) 我已经读到光盘需要在所有四个方向(水平、垂直和两个对角线)保持稳定。为了使其在任何方向上都保持稳定,该方向可以充满光盘,这样就不能再放置更多的光盘,它可以靠近电路板边缘,或者它与相同颜色的稳定光盘相邻 我了解前两个部分,但我需要评估椎间盘稳定性的具体顺序,因为可能存在导致稳定性的连锁反应。我真的很难弄清楚如何确定所有稳定的光盘 非常感谢任何见解 我认为没有明确的算法(捷径)来解决这个问题 如果您不介意缓存,暴力可以轻松解决您

我试图确定奥赛罗棋盘上的哪些碟片是马厩盘(在游戏剩下的时间里不能翻转)

我已经读到光盘需要在所有四个方向(水平、垂直和两个对角线)保持稳定。为了使其在任何方向上都保持稳定,该方向可以充满光盘,这样就不能再放置更多的光盘,它可以靠近电路板边缘,或者它与相同颜色的稳定光盘相邻

我了解前两个部分,但我需要评估椎间盘稳定性的具体顺序,因为可能存在导致稳定性的连锁反应。我真的很难弄清楚如何确定所有稳定的光盘


非常感谢任何见解

我认为没有明确的算法(捷径)来解决这个问题

如果您不介意缓存,暴力可以轻松解决您的问题

暴力=逐案解决

首先,我有一个放置了一些光盘的板(2+2光盘),第一个播放器可以在
{i1,i2,i3,…}
处放置黑色光盘

如果第一个播放机选择
i1
,第二个播放机可以选择位置
{i11、i12、i13、…}
中的一个来放置白色光盘

如果第二个播放机选择
i11
,则第一个播放机可以选择位置
{i111、i112、i113、…}
中的一个来放置黑色光盘

。。。等等

这并不多(最多64-4步)

批量生产。。。。让您的计算机单独使用(可能需要几个小时)。
最后,您将获得一个完整的数据库

编写代码似乎是一项有趣的任务。

在您看到报告后,您可能会注意到一种更好的算法的可能性。

简单的方法是迭代,直到没有任何变化。从所有标记为不稳定的光盘开始。然后通过制动盘,查看是否有任何制动盘符合稳定性标准。对于符合条件的每个光盘,将光盘状态从不稳定更改为稳定

如果在传递过程中没有任何光盘改变状态,则完成操作。如果在传递结束时所有的光盘都标记为稳定,那么您就完成了。最坏的情况是64次通过,因为每次通过时至少有一张光盘必须改变状态。

在Vaishnavi Sannidhanam和Muthukaruppan Annamalai的“奥赛罗启发式分析”中,这些人建议将光盘分为三类:

  • 稳定-不能翻转(分配+1分)
  • 不稳定-下一步可以被对手翻转(分配-1分)
  • 半稳定-可以翻转,但不能在下一步(分配0分)

就像你说的,稳定的光盘很容易找到。然后你得到所有合法的对手动作,应用它们并在新的配置中测试翻转的碟片-那些翻转的碟片将是不稳定的。一旦有了稳定集和不稳定集,半稳定集将非常容易计算:)

但这里的问题是,我将它作为Minimax算法的一部分使用,因此要计算大量的叶节点,循环64次可能会非常昂贵。也许有某些方向需要评估,以尽量减少所需数量passes@MatthewFennell循环64次是理论上最坏的情况。这永远不会发生,因为这意味着所有64张光盘都是相同的颜色,并且每次只有一张光盘改变状态。显然,这永远不会发生。为了获得更好的顺序,可以先计算角点,然后沿边搜索。然后你只有中间的36块瓷砖要担心。是的,我现在从4个角开始,然后从左到右,从右到左同时在顶部和底部行,然后从顶部到底部,从底部到顶部,然后用中间部分结束。它识别了大部分,但不是全部,但它只是一个求值函数,所以我想我不介意它是否完美。但感谢您的投入,它激发了一些想法:)