本文主要是介绍拣豆子AI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
18颗拣豆子规则分别为3,4,5,6颗的四摊豆子,两个玩家定下先后手,轮流拣,一次可拿任意一摊里的至少一颗,拣掉最后一粒豆子的玩家判负。
随机颗拣豆子规则
n 摊知道数目的豆子,两个玩家定下先后手,轮流拣,每次限拣一摊里的1..n 颗,拣掉最后一颗豆子的一方判负。
按照ICG规则,也可以定成没豆子可拿的玩家判负。
来聊聊比较经典的18颗拣豆子~
根据规则,把1颗豆子留给对手,我方就赢了。假设现在轮到玩家行动,场面上剩下一摊3颗的豆子,根据规则,行动后就能构成1颗豆子并留给对手,我们把这种局面记作safe-position(当前回合有必胜策略);下一回合,对方面对1颗豆子,所处的局面记作unsafe-position(己方处于被动局面,必胜策略握在对方手中)。
只要保证自己一直身处safe-position中,换句话只要保证每次都把unsafe-position留给对手,我方就能必胜。在最优逻辑下,胜负在选择好先后手时就确定下来了。
我们从1颗豆子的情形倒推,找出所有的unsafe-position。可以发现:先手拥有必胜策略。
AI回合
身处unsafe-position场合,将合法的拿法记入执行候选,身处safe-position场合,将构成unsafe-position的拿法记入执行候选,在候选集中随机选择一个拿法,执行。
我把拣豆子做成了rubygem:
gem install nim
这篇关于拣豆子AI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!