基于循环神经网络创建一个机器人参加AI mini Cup 2018(第3部分)


最后一部分。


在前面的章节( 第1部分第2 部分,关于GPU的部分 )中,我们谈到了比赛,神经网络,遗传算法的条件,因此让我们继续。


但是在继续之前,有一个到GitHub链接,其中包含c ++程序的源代码,并支持本文的标题-bin文件夹中Windows下的可执行文件,与screeen保护程序非常相似。 在文章的地下室,他组织了过去锦标赛的“名人堂”。


因此,我们确定了该程序的体系结构,该体系结构由两个独立的部分(程序)组成,该部分仅包含神经网络和与比赛组织者的游戏服务器的通信协议(游戏机器人本身),而主要部分则由以下模块组成:



简要介绍每个部分。


物理引擎。 基于官方来源的物理计算模块,重做了GPU,并添加了机器人感应器计算,适应度函数和机器人碰撞。 源代码删除了病毒,并且bot尝试共享,从而分割了程序的不稳定部分。 因此,我没有分享自己的错误。


神经网络。 上次我们充分详细地讨论了它,包括代码中的实现,因此我认为这里也很清楚,尤其是因为读者没有特别的疑问。


遗传算法。 其实施范围存在差距。 现在,我最有可能重复一遍,但再次重复一遍会更容易。



演讲幻灯片让我印象深刻。 因此,主要问题仍然存在:如何推动进化? 为此,发明了健身功能。 适应度函数的主要目标是选择基因型,以便从当前的机器人种群传播到下一个机器人。




健身功能的选择方式最有可能变得清晰。 过境问题仍然存在。
有几种基本的杂交方法, 更多的链接 。 但是基本原理是父母基因型之间基因的随机交换。 通常选择两个父母,从人口中选择父母的方法也有几种,可以更详细地阅读链接 。 尽管父母的选择是随机选择的,但是选择特定父母的可能性与适合度成正比。


接下来, 将突变函数应用于完成的基因型。
在我们的情况下,该算法会不时地将任意选择的基因更改为随机基因,换句话说,神经网络的权重之一会更改为随机基因。



我们有了新的人口,进一步的发展继续达到预期的结果。 有几点,第一:机器人中的机器人越多,遗传算法找到最优解或收敛到该解(神经网络中权重的最佳比率)的速度就越快。 例如,如果一个机器人具有1000个基因,则搜索空间将由3000个机器人组成,而不是300个机器人。 但是,另一个问题是,如果将所有3000个机器人放到为4-8个机器人设计的竞技场中,那么很可能其中的机器人会变得身体很拥挤,如果他们学到了什么,那么在Agario中绝对不是游戏。 因此,有两种主要方法可以避免竞技场人数过多:第一种方法是从总体中选择多个机器人并在竞技场中竞争,以及如此多次,直到我们为每个机器人积累游戏统计数据为止。 作者进入的第二个步骤是并行启动多个竞技场,例如50-300,这完全取决于一台特定计算机的功能,与此同时,整个机器人群体也参加了比赛。 可以将种群分为具有适应性功能和标识符(对应于竞技场的数量)的亚种群,然后在亚种群之间交换基因型。 或者将一切想象成一群在不同领域中玩耍的机器人。 作者尝试了两种选择,但在源代码版本中只有一堆机器人。 Depth程序中的参数是竞技场编号。


因此,他讲了构建程序的基本原理。 谁想看直播,欢迎访问github的链接。



如果您无法启动,那么这段短片会变亮:



公告: 8月,mail.ru将组织另一场AI mini杯赛,官方公告尚未成真。 但是,根据该小组电报提供的信息,竞争的基础还是物理引擎,与汽车有关。 因此,简要介绍一下创建机器人的原理,当然那些人也会感兴趣:



在这里,像我们的足球队一样,建议离开小组,结局是另外一首歌。 让决赛选手写出胜利的故事,但是我们的主要参与。
最简单明了:



在bot代码的主体中编写更多不同的条件,例如if(hole)-> jump等。 简单的条件在锦标赛开始之初就有效,然后机器人的复杂性将增加,而条件解决方案的优势将消失。


因此,许多战略游戏中最有前途的方法是:



PP方法( 或势场 )。 这个想法很漂亮,在动态环境中寻求最大或最小。 选定尺寸的网格将建立在整个游戏环境上,或者仅建立在机器人周围的区域上,而这一切都取决于机器人的范围。 此外,在此网格的每个节点上,我们都会考虑到我们感兴趣的对象的距离,或者可以选择立即选择电位,它们可以是正的(吸引力,这对于机器人来说是有趣的)和负的(对机器人来说是危险的)。 因此,将点处的电位相加,就可以得出网格每个点的总电位。 潜力领域。 机器人只能根据当前的任务选择最小或最大的潜力。 基本上,潜在的领域是2D实现,尽管3D看起来很酷,但是将有大量的计算资源。




最难的是:



两种主要的实现是蛮力 蒙特卡洛法 。 它们每个都是单独文章的主题,但是根据感觉,正是这些方法将您带入了决赛。 如果是论文,那么机器人不仅可以查看当前时间或过去,而且可以根据需要查看未来,这里出现了可能结果的漏斗(圆锥),并且机器人想要看的越远,就会出现更多的选择。 例如,在时间点Tick零,机器人决定沿八个方向之一前进,在步骤Tick +1中,在八个新坐标的每个坐标中,它都有机会沿八个方向再次前进,依此类推。 有必要在此期间考虑敌人的可能移动。 计算的每个可能结果都会带来可能的收益或损害。 机器人根据该方向朝着其中一个方向移动。 而且,对将来时态的深度进行这样的计算十分重要。 移动视图的深度取决于计算机的可能资源。 因此,对于小型计算机资源,出现了优化这些计算的问题。


关于源代码,如果有兴趣,我将对代码进行注释,同时按原样进行布局。
在源代码中,当前Tick和前一个Tick的信号被发送到神经元的输入,这变得更加有趣了,这要感谢读者:tongohiti的想法。


对于那些记得有关神经网络中权重初始分布的论文的人来说,一个有趣的话题是Xavire初始化。


谢谢您的关注。 在AI竞赛中与我见面。


参与者的相关文章,但首先是题外话


她坐在地板上
并整理了一堆字母
像冷却的灰
我将它们握在手中并扔了出去。


熟悉的床单
她看着他们真是太好了,
灵魂如何从上方看
在他们身上遗弃的尸体...


哦,这里有多少生命
不可逆转的经验!
哦,有多少分钟
爱与欢乐被杀死!


我在2017年俄罗斯人工智能杯上的策略
参加2016年俄罗斯AI杯年度竞赛的历史(几乎是胜利)
2015年度俄罗斯AI杯的胜利历史
2014年俄罗斯AI杯:获胜者策略
2013年俄罗斯AI杯金牌-一切如何
2012年俄罗斯AI杯银牌之路

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


All Articles