Python 石头剪刀机器人算法

Python 石头剪刀机器人算法,python,algorithm,theory,Python,Algorithm,Theory,在我的学校,我们的老师正在举办一场石头、布、剪刀机器人比赛。我知道如何用Python编程,但我不知道如何编程一个比随机选择武器的机器人成功几率更大的机器人。我认为有可能存储所有以前的移动,然后寻找模式,以抵御攻击。我走的方向对吗?有什么想法吗?如果你在和人类比赛,你就走对了。存储以前的移动是关键。这里有两篇文章对你很有帮助。和维基百科上的条目。用剪刀石头布证明,随机机器人将位于每个等级的中位数。 因此,我将创建一组机器人,每个机器人计算一个启发式,并在后台并行运行。对于每一个回合,每个机器人都会

在我的学校,我们的老师正在举办一场石头、布、剪刀机器人比赛。我知道如何用Python编程,但我不知道如何编程一个比随机选择武器的机器人成功几率更大的机器人。我认为有可能存储所有以前的移动,然后寻找模式,以抵御攻击。我走的方向对吗?有什么想法吗?

如果你在和人类比赛,你就走对了。存储以前的移动是关键。这里有两篇文章对你很有帮助。和维基百科上的条目。

用剪刀石头布证明,随机机器人将位于每个等级的中位数。
因此,我将创建一组机器人,每个机器人计算一个启发式,并在后台并行运行。对于每一个回合,每个机器人都会虚拟地“平局”,并检查他是否赢了或输了——如果它会玩这个回合。每个机器人都会记录如果它玩了会赢多少场比赛,以及会输多少场比赛。
其中一个机器人将是随机攻击者

每次轮到你时:选择迄今为止赢得最多的机器人[贪婪]-并使用它


使用这种方法,你可以保证在班上名列前茅![当然有足够多的游戏]

在尝试找出其他机器人的策略时可能会有一些潜在的利润,例如,如果是强制参与,那么会有一些懒惰的学生组成一个机器人,这个机器人总是扔剪刀

我提出了另一个策略(我在一些类似的比赛中听说过,但无法再追踪来源),假设您可以让几个机器人运行(如果没有,请与您的一些同学合作运行此策略)

假设你有4个机器人A,B,C,D

想象每个机器人与其他机器人玩100次。让你的B、C、D机器人第一次玩10次,玩一个可以让你的团队将其识别为机器人的策略,比如说“RPPSSRS”,让你的a机器人玩一些其他的策略,让它被机器人B、C、D识别

然后,在接下来的90回合中,让机器人B、C、D输给A,然后随机与其他机器人比赛。让机器人A从B、C、D中获胜(“剪刀”),并随机与其他机器人比赛

因此,bot A获得了巨大的优势。

包含大量相互竞争的程序(它们甚至是用python编写的)


如果这是你的学校作业,可能会被认为是作弊,因为所有提交的资料都是公开的。但是,再说一遍,其他学生也可以使用它们。

机器人会玩其他机器人吗?人类游戏中存在的任何模式都是心理模式;我认为电脑只是随机播放。在“相关”侧栏中有几个相关链接,在CodeGolf.SE上我们没有Rho Sham Bo(虽然这是个好主意),但确实有一些方法可以让你看到一些简单的人工智能编码方法,用于竞争性游戏。如果你的对手是(真的)随机选择动作那么没有比随机选择更能获胜的策略了。@MikeChristensen:我认为这取决于它们是如何被编程的,你不知道priori@JanL-这似乎值得一读:你能提供任何链接或来源吗?@RikP.:你能更具体一点,来源是什么?这个算法?一个随机机器人将处于中间值的事实?[我不记得我在哪里读到的-但很容易证明]。对不起,我对统计报表有异议。你愿意解释一下(显然是简短的)你将如何证明这一点吗?@RikP.:假设每场比赛都有一个回合。一个随机的机器人显然是赢家,输家,并在eah游戏的1/3回合中抽签[1/3]。因此,它将赢得它参加的一半比赛。因为这是一个零和游戏[一个赢家,一个输家]:在无穷远处,随机机器人的总分将加为0,这是分数的中位数[再次,因为这是零和游戏]。还有更多的数学细节要做,但这是证明背后的主要思想。这不一定行得通,因为你的对手可能是根据你玩机器人的历史来选择动作的。因此,你的机器人根据对手的历史进行移动,而你的对手根据你自己的历史进行移动。双方都可能试图猜测对手的下一步行动。所以你不一定能用另一个在后台“赢”的机器人来代替,并且保证成功。@JanL:到底什么是不可能的选择?JanL,我想你误解了。Max建议你有一个机器人,有四个“子机器人”。在“子机器人”之间的切换将被编程到你的机器人的代码中。我相信我的解释是正确的。如果我错了,请explain@JanL:你能解释一下为什么你认为这个策略不是一个选择吗?出于什么原因?我不能有更多的机器人,我的同学也不允许以任何方式提供帮助。+1表示良好的链接。wiki链接甚至有一些具体的算法建议。