我在国际象棋人工智能上做实验,目前正试图实现对可能要求平局的检测。
如果出现以下情况,玩家可以要求平局:
在过去的五十步中,每个玩家都没有被俘虏或典当。
同一个董事会职位发生过三次。
因此,程序必须存储以前位置的历史记录,才能验证这些条件。当人类玩家要求平局时,这是可以的。但人工智能正在评估数百万个职位因此,一方面,它应该能够自行或由对手x向前移动来检测这种索赔的可能性,以便能够阻止它处于获胜的位置,或试图在失败的位置强制执行它另一方面,由于在深度搜索期间创建的历史表的所有副本,这种验证可能会导致性能的巨大损失。
是否有此类功能的标准实现/优化?
注意:如果答案是特定于实现的,那么我的人工智能是基于带α-β剪枝的minimax的变体。
最佳答案
对于第1项,标准的解决方案是将计数器存储在当前状态;每次有典当移动或捕获时,计数器都重置为0,每次没有典当移动或捕获时,计数器都会增加1,如果大于50,则在每次移动时检查计数器。
对于第2项,有些程序会在每次移动时跟踪和检查,但如您所述,这需要时间和空间因此,许多程序只跟踪过去的动作,而忽略了在游戏树中向前看时通过三次重复绘制的可能性。另一种可能是跟踪已经发生的任何重复位置,并且只检查前瞻位置是否与其中一个位置相同。