GridRoyale - 一款探索社会动态的生命模拟器
项目描述
GridRoyale
在此查看实时版本!
GridRoyale 是一个生命模拟器。它是一个用于机器学习研究人员探索社会动态的工具。
它与生命游戏或GridWorld类似,除了我添加了游戏机制来鼓励玩家表现出社会行为。这些游戏机制类似于计算机游戏中的大逃杀类别,这就是为什么它被称为GridRoyale。
游戏机制、Python框架和可视化做得很好——核心算法很糟糕,我正在等待有人比我做得更好来写一个新的。
让我们稍微回顾一下
这个项目很难解释,也是我多年来一直梦想做的事情。请耐心等待,我将尽我所能在下文中解释。我也要指出,我是机器学习,尤其是强化学习的初学者,因此很可能有很多相关的我没有接触到的研究。
我的目标是探索社会动态。
像大多数人一样,我花了大量时间去思考人们为什么会做他们所做的事情。他们如何相互相处,如何沟通,以及他们如何决定自己是朋友、敌人还是介于两者之间的模糊关系。有时人们的做法可以通过逻辑轻易分析,有时则不然。即使他们的行为看似不合理,我也知道那主要是因为我的推理还不够先进。
显然,这是一个非常深的兔子洞。我的指导原则是:我们在世界上看到的社会行为经历了一个类似于进化的过程,即适者生存。世界上有很多人,他们活了很久,并且有机会尝试很多不同的行为。那些“说不通”的行为是无法存活的。如果你看到某人以某种方式行事,并且这个人安全地长大成人,没有在厨房的水槽下柜子里喝漂白剂,那么在某种程度上,这种行为就是“适者”或与之相近,无论“适者”是什么意思。
无论我们有什么关于人们为什么做他们所做的事情的理论,它都是从试图生存开始的,然后在此基础上建立抽象层次。
让我们回到项目的技术方面:强化学习、博弈论、神经网络和浏览器中的Canvas动画。
我的想法可能是,我可以创建一个模拟,其中生物在虚拟世界中四处移动。也许我可以设置这个世界的规则,使其尽可能有利于社交行为。然后我会看到这些生物以完全非脚本化的方式进行社交行为,仅出于他们生存的欲望。我可以分析他们所做的一切,为什么,什么有效,什么无效。对于任何看似不合理的行为,我可以进行无限多的实验,以找出它在何处有用,以及如果它被去除会发生什么。我可以回到过去,展望未来,创造平行现实,基本上可以自由地运行任何类型的场景。
我希望我能用它来模拟现实世界中的人类行为。
我可以使用神经网络根据生物获得的奖励来优化它们的行为,使用Python来管理世界的状态,并使人们能够为生物编写不同的策略,然后在浏览器中的Canvas动画中展示模拟。
我在2020年6月开始这个项目。这包括给自己进行神经网络的快速课程(炫耀)、强化学习和JavaScript动画。在我写这些的时候(2020年10月),我必须停止这项工作,因为我开始了一份新的全职工作。我会描述我所做的一切以及我想看到的一切,并且希望其他人会对继续这项研究感兴趣。
我所做的一切
生物能够四处走动,在网格中随机生成的单元格中吃食物,相互碰撞并射击对方。吃掉一块食物为生物加10分。碰撞另一个生物扣5分。被射击扣10分。
我使用Keras编写了一个带有神经网络的Q学习算法,使他们学会如何走向食物并避免相互碰撞。他们还不够聪明,无法避开子弹或制定策略。
有一个不错的浏览器界面,可以让你看到整个动画并跳转到任何你想的时间点。
我希望看到的行为
这里有一份由Facebook人工智能研究团队进行的研究报告。如果你懒得看全文,他们训练了机器人来互相协商交易物品,机器人逐渐学会了如何变得狡猾并获得更好的交易条件。它们使用一种语言进行交流,并学会了赋予这些词汇它们自己的意义。
这项研究为我想要看到的事物提供了很好的例子,同时也为我希望避免看到的事物提供了很好的例子。
是的,我希望看到生物之间互相交流,并努力变得富有。但我不希望这些互动被过度编排。我不想生物有预定义的任务和预定义的会话,它们在这些会话中使用预定义的词汇进行交流。我希望它们所有的社交行为都是自发的,并建立在它们基本的生存习惯之上。我希望它们生活在一个开放的世界里,可以自主决定是否想要进行交流。我不想看到有明确开始和结束的交流阶段,我希望交流成为生物运动的一部分。
这已经很抽象了,让我举一个例子。
我已经有一些生物知道如何寻找食物并避免与其他生物碰撞。这是起点。现在,想象一下,生物X变得足够聪明,能够意识到如果它们靠近其他生物,这些生物会走开,因为它们想要避免冲突。因此,生物X可以建立一块领地,即一个其他生物不会进入的空间块。这意味着生物X可以吃掉其领地内随机产生的所有食物。它还需要定期巡视其领地的边缘,以驱逐任何入侵者。如果同时有几个入侵者,这可能会变得困难。
领地是一个有趣的概念。它更像是一个博弈论概念,而不是一个物理概念。领地存在于物理空间之外,比如在知识产权或互联网域名中。使领地成为可能的基本条件是,玩家有足够的动机固执己见,不管发生什么情况都不放弃财产,并能够说服其他玩家其固执程度。这是合作与冲突的结合,因为双方都在争夺领地,但他们也有尽快结束战争的兴趣。这就是为什么它如此有趣的研究。
假设其他生物也学会了这种领地行为。现在每个生物都有自己的领地,领地被其邻居的领地所包围。一些边界将更加和平,而其他边界则可能因领土纠纷而发生冲突,导致一方获得另一方的一小部分领土。
如果你是生物X,并且有几个邻居,你可以认识到其中一些生物倾向于与你发生更多的冲突。那些不倾向于在边界挑起争端的邻居现在是你宝贵的资产。你可以在不需要巡逻你领地的这部分上节省很多时间。这意味着,如果这些好邻居受到攻击,你将希望帮助他们获胜。如果它们被更具有侵略性的生物推到一边,那个生物可能会后来入侵你的领地。
现在我们有了涌现的交流和合作现象。我们可以有生物之间复杂的关系,并希望最终形成一个类似社会的结构。
对我来说,另一件重要的事情是,我希望事物是可视化的。我不想让人们必须阅读研究论文来理解生物是如何合作的,我想让他们看到生物在这样做。这就是为什么我选择在浏览器中使用Canvas动画,让人们可以在不安装任何东西的情况下玩这些结果。
如何运行此代码
安装
$ pip install grid_royale
运行服务器
$ grid_royale play
这将自动打开一个浏览器窗口,并显示您的模拟。
如何扩展此代码
生物的策略由 Policy
类 定义。其大部分逻辑由更通用的 ModelFreeLearningPolicy
类 定义,该类定义了一个神经网络并使用它来决定行动。您可以在这些类中的任何类中更改逻辑,并查看模拟中的变化。外部代码调用的主要两个方法是 decide_action_for_observation
和 train
。
我将代码编写得既友好又模块化,因此当您在 Policy
类中编写逻辑时,您根本不需要考虑维护游戏规则或显示动画。decide_action_for_observation
方法获取世界的观察结果并需要返回一个动作,其余的都是自动处理的。
您可以克隆存储库或运行 pip install -e grid_royale
,然后更改代码。使用 grid_royale play
运行它,看看您的生物表现如何。
如果您想讨论您的方案或需要帮助,请打开一个问题或通过 ram@rachum.com 邮件给我
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。