AI和2048。第1部分:蒙特卡罗方法



数周之内的“ 2048”标志着5年,这意味着该是写一些专门给这款精彩游戏的东西的时候了。

拼图中的独立人工智能游戏的主题特别有用。 有多种实现方式,今天我们将分析一个相对简单的方式。 即,我们将教计算机思想使用蒙特卡洛方法来收集两个学位。

EDISON软件-网络开发
本文是在EDISON Software(一家开发移动应用程序并提供软件测试服务的公司)的支持下撰写的。

这项工作的灵感来自于关于stackoverflow的讨论,其中聪明人提出了有效的计算机游戏方法 。 显然,最好的方法是带有alpha-beta剪切的minimax方法,几天之内,下一个出版物将专门针对它。

stackoverflow用户建议的娱乐场方法 Ronenz作为上述讨论的一部分。 下一节的整个内容是其出版物的翻译。

蒙特卡罗方法


我开始对这款游戏的AI概念产生了兴趣,其中没有硬编码的情报 (也就是说,没有启发法,得分等)。 AI应该只“知道”游戏规则并“理解”游戏。 这使它与大多数AI(例如在此线程中)区分开来,因为游戏玩法实际上是由计分功能控制的蛮力,反映了人类对游戏的理解。

AI算法


我发现了一个简单但出奇的好游戏算法:为了确定给定状态下的下一个动作,AI在RAM中玩游戏, 随机移动直到游戏以失败告终。 这会进行多次,并跟踪最终分数。 然后,考虑最终课程,计算平均最终分数。 显示最高平均结果的初始移动被选择为已经实际选择的移动。

在每个初始回合中运行100次,AI在80%的情况下平铺2048,在50%的情况下平铺4096。 当使用10,000次运行时,在100%的情况下获得2048,对于4096为70%,对于8192为大约1%。

观看中

屏幕截图显示了获得的最佳结果:

该算法的一个有趣的事实是,尽管预计随机执行动作的游戏会很糟糕,但是,选择最佳(或者如果您愿意的话,则是最差)的动作会带来非常好的游戏玩法:典型的Monte Carlo AI游戏可以得分70,000 3000点的积分,但是在任意给定位置上具有任意游戏记忆的游戏,在输掉之前,平均可以再增加340点,增加40点。 (您可以通过启动AI并打开调试控制台来自己验证。)

该图说明了这一概念:蓝线表示每次移动后游戏的得分。 红线表示算法的最佳结果,可以从该位置任意移动到游戏结束。 实际上,红色值“拉”蓝色的值,因为它们是算法中最好的语句。 有趣的是,红线在每个点处都略高于蓝线,但是蓝线越来越减小了间隙。


我感到很惊讶的是,该算法不一定能预料到良好的游戏玩法,但仍会选择产生该算法的动作(一个好的过程)。

后来我发现这种方法可以归类为蒙特卡罗树搜索算法

实施和链接


首先,我创建了一个JavaScript版本,可以在此处查看实际操作 。 该版本可以在合理的时间内运行100次。 打开控制台以获取更多信息。 ( 来源

后来,为了玩转,我使用了高度优化的@nneonneo基础结构,并使用C ++实现了我的版本。 此版本允许每转最多运行100,000次,如果您准备等待,甚至可以进行1,000,000次。 包括组装说明。 一切都在控制台中运行,并且还具有用于在Web版本中播放的遥控器。 ( 来源

结果


令人惊讶的是,增加运行次数并不能从根本上改善游戏玩法。 似乎该策略的极限为80,000点,并且图块为4096,所有较小的结果都非常接近达到图块8192。运行次数从100增加到100,000会增加达到此极限的机会(从5%到40%),但没有克服了。

进行10,000次跑步时,在关键位置附近暂时增加多达1,000,000个,这使得在不到1%的情况下克服此障碍成为可能,最大得分为129892,图块为8192。

改进和优化


实施此算法后,我尝试了许多改进,包括使用最小或最大额定值或最小,最大和平均值的组合。 我还尝试使用深度:我没有尝试每回合完成K次奔跑,而是尝试了给定长度的每个动作列表(例如,“上,上,左”)中的K个动作,并从获胜最佳的动作列表中选择了第一个动作。

后来,我实现了一个计分树,该树考虑了在给定的举动列表之后他能够完成举动的条件概率。

但是,这些想法都没有一个比简单的第一个想法具有真正的优势。 我在C ++源代码中为这些想法留下了注释掉的代码。

我添加了深度搜索机制,当任何运行意外地达到下一个最高磁贴时,该运行会将运行次数暂时增加到1,000,000。 这导致时间性能的提高。

我想知道是否有人还有其他支持AI脱离主题领域的改进想法?

选项和克隆2048


为了娱乐,我还将AI设置为书签,将其连接到游戏的控件。 这使您既可以使用原始游戏,也可以使用其许多变体。

由于AI的域独立性质,因此这是可能的。 一些选项非常原始,例如六角形克隆。

翻译已经完成,但不仅是为了出版。 在绞痛之前,我想自己测试2048年关于AI的各种想法,为此,我通过编写带有宏的应用程序在Excel中实现了该游戏。 在VBA上实现本身并不是一项壮举-通过谷歌搜索,您可以快速找到十二种不同的excel工艺。 但是,不仅可以制作电子表格形式的2048,还可以实现独立于计算机的游戏-我还没有遇到过。

2048.xlsm


Excel应用程序本身可以从Google下载

该图像是可单击的-将打开一个完整尺寸的图像。



简要介绍应用程序的界面和功能。

要开始播放,您需要单击“ 用户:开始游戏 ”按钮。 再次按下此按钮时,题词将从“ 用户:开始游戏 ”更改为“ 用户:结束游戏 ”,反之亦然,也就是说,您可以随时停止游戏然后重新启动。 游戏停止后,您可以手动更改场地的对齐方式,以提高或降低位置,以测试或验证某些想法。

在游戏本身中,您可以通过两种方式进行移动:

  • 键盘:只需按下“上”,“下”,“左”,“右”键即可。
  • 用鼠标:单击带有大箭头的单元格,该箭头指示所需的方向。

New Field ”按钮清除比赛场地,并在其上随机放置“两个”和“四个”。

最有趣的是,蒙特卡洛方法的实现方式完全与花花公子使用stackoverflow提出的形式相同。 在每个位置,内存中的计算机都会为第一次移动(“上”,“下”,“左”,“右”)经过随机分支,直到导致丢失。 统计上,最有利的方向在下面的特殊表格中以红色突出显示。 如果您发现自己的游戏处于停滞状态并且需要以某种方式保存自己,则可以将其用作提示。 ;)

表格上方是带有分析选项的复选框。 目前,仅决定了蒙特卡洛,其余的将在未来几天内添加(因此,随着excel应用程序的更新和理论的解释,将会有更多的麻烦)。

还有一个AI:游戏按钮。 通过单击它,计算机助手将根据蒙特卡洛方法或在开关组中选择的其他方法进行一个动作(minimax和神经网络稍后将在此列表中工作)。

AI和2048系列的所有文章


Source: https://habr.com/ru/post/zh-CN437118/


All Articles