前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Wolfram语言与Scratch | 如何在石头剪刀布上获胜

Wolfram语言与Scratch | 如何在石头剪刀布上获胜

作者头像
WolframChina
发布2021-11-15 10:40:03
7310
发布2021-11-15 10:40:03
举报
文章被收录于专栏:WOLFRAM

石头-剪子-布*从数学角度来看显然不是很有趣。纳什均衡策略非常简单:从这三个选择中随机选择,(从长远来看)你的对手不会打败你(你也不会打败你的对手)。尽管如此,计算机策略仍然有可能在长时间的游戏中击败人类玩家。

我 9 岁的女儿向我展示了一个使用 Scratch 程序的解决方案,她编写的这个程序每次都通过在做出决定之前查看您的选择而获胜!但我将引导您完成一个简单的解决方案,该解决方案不会作弊。

虽然平等随机选择是无与伦比的,但我们可以依赖这样一个事实,即人类并不擅长随机。如果计算机可以在你随机尝试的过程中发现模式,那么它在预测你接下来会做什么方面具有优势。

我曾考虑将算法编写为我们的基于计算机的数学™(https://computerbasedmath.org/) 统计课程中的一个主题。但是我查阅的第一篇关于预测石头剪刀布算法的论文通过一些复杂的 copula 分布解决了这个问题。向学校的孩子解释(可能对我来说)太复杂了,所以我决定创建一个我可以解释的更简单的解决方案。而且,即使之前几乎可以肯定已经完成了,重新发明事物比查找它们更有趣!

首先,我们需要能够玩游戏。已经有一个范例(https://demonstrations.wolfram.com/RockScissorsPaper/)可用,但它不是我所需要的,所以我自己写了一个。不需要太多解释:

随机播放器

代码主要是用户界面、显示和游戏规则。整个计算机策略都保存在函数中

其中 1 代表石头(rock)、2 代表布(paper)、 3 代表剪刀(scissors)。这是最优解;无论您玩什么游戏,您都应该赢得与计算机相似的游戏数量,并且您的获胜率将在零附近抖动。

因此,现在有趣的任务是重写该chooseGo函数,以便通过使用历史变量中保存的有关过去游戏的数据做出更好的预测。我们的第一步是查看过去几场比赛中做出的选择,并找出我们历史上出现该序列的所有时间。通过查看人类在每场比赛后接下来做了什么,我们可能会发现一个模式。

该函数的第一个参数提供了过去的戏剧历史。例如,在下面的数据集中,计算机(第二列)刚刚向人类的石头(1)出了 布(2)。最后一个元素代表了这一点。我们可以看到,这种情况之前已经发生过两次,每次人类的下一步行动都是再次出石头。

第二个参数是要回溯的历史长度。在这种情况下,1 只查找数据中{1, 2} 的情况;如果我们选择 2,它将在数据中寻找 {3, 2} 后跟 {1, 2} 的情况,但没有找到匹配项,因为这个序列以前没有发生过。

第三个参数All指出计算机和人类的移动历史必须匹配。可以将参数更改为 1 仅查看人类的历史(即,假设人类仅受他们之前所做的事情的影响),或 2,仅查看第 2 列,即计算机的历史(即,假设人类主要对计算机之前所做的事情做出反应,而不管他们做了什么,也不管他们赢了还是输了)。

例如,在这种情况下,我们会发现人类在之前选择石头之后通常会再次出石头,而不管计算机每次出了什么。

有了足够的数据,“全部”选项就是我们所需要的,它将自行决定是人类历史还是计算机历史更重要。例如,如果计算机历史被人类忽略,那么任何计算机历史选择的数据集将与任何其他计算机选择历史具有相同的分布(给定足够的数据)。通过查看所有比赛对的历史,这与首先选择(不相关的)计算机历史上的数据,然后将此数据子集用于上述功能相同。同样,如果只有计算机历史重要。但是,通过分别查看这两个特殊假设,我们可以获得更多有效的历史匹配,这在数据集最初很小时很重要。

所以从这两个测试中,我们可以看到第一个给出了最好的估计,人类玩家接下来选择石头的可能性是 100%。而第二个测试使这一可能性变成 75%,选择剪刀的概率是25%。

这就是我卡住的地方!

在这种情况下,两种预测在结果上是一致的,即使在概率上不一致。但是,当您可以搜索具有一系列不同历史长度的数据的三个切片,并且他们不一致时,您如何组合这些预测?

我把它放在我的“要写的博客项目”文件夹中,直到几周后,当我们讨论如何涵盖基于计算机的数学™ 课程的“重要性”概念时才想起。

我意识到问题不一定是“我如何结合预测?” 可以将其视为“哪个预测最重要?” 一个预测可能比另一个更重要,因为它在数据中显示出更大的偏差,或者因为它得到了更大的数据集的支持。我不在乎,我只是使用了显著性检验的p值(假设玩家是随机玩的)来对我的预测进行排序。

我想我应该听听我们自己的论点,即数学的第一步是“提出正确的问题!”

现在以我的最后一个结果为例,我发现最好的预测是 1 (石头),p值为 0.17。也就是说,用于此预测的数据偏离DiscreteUniformDistribution[{1,3}] 的概率仅为 17%纯粹是偶然的(而不是因为人为偏见或其他一些改变了分布的解释)。

这个p值越小,我们就越有信心找到一个真实的模式。因此,我们只对历史长度和数据切片的每个排列执行此操作,并选择具有最小p值的预测:

并选择击败这个预测的下一步行动:

在这里,一切都放在一起。您可以从Wolfram演示网站

demonstrations.wolfram.com/RockPaperScissorsWithAIPlayer 获取。

智能播放器

当它的数据太少时,它会随机选择,所以开始时应该是相等的。最初,当它开始学习时,它会做出一些愚蠢的选择,而您可能领先。但是当玩了 30-40 场比赛时,它就会开始做出有用的预测,您应该会看到你的赢率下降到负值区域并保持在那里。

当然,此解决方案仅适用于有缺陷的随机尝试。它的可预测性使其致命地暴露于有针对性的策略,尝试通过直觉来做到这一点很有趣。这是可以做到的,但如果您停止思考或过度思考,您很快就会失去优势。当然,程序可以通过应用相同的算法轻松地做到这一点,以便确定地预测我的程序的移动。

这种方法导致了编写算法的军备竞赛,以击败对手的当前算法,唯一的出路是回到RandomInteger[{1,3}] 的纳什均衡策略。

* 如果您不了解游戏,规则如下:您与对手同时使用上面显示的手势选择石头、布或剪刀。石头打败剪刀(石头让剪刀变钝),剪刀打败布(剪刀剪掉布),布打败石头(布包裹石头——是的,我从来不觉得这个解释令人满意!)。赢一分,平局一分,然后重复直到您觉得无聊。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档