继续参加2019年俄罗斯AI杯(并取得胜利)

大家好,我叫安德烈·托卡列夫Andrey Tokarev)我想再次分享我参加俄罗斯AI杯和胜利的经历

如果没有人知道,俄罗斯AI杯(以下简称RAIK)是一个人工智能编程冠军,我们(或更确切地说,我们的程序)必须控制一个或多个彼此竞争的角色(单位)。今年的游戏是二维平台游戏,让人想起了90年代初的计算机游戏,而这些单位是武装人员,应该杀死敌人的同一个人。您可以在公告中阅读有关此内容的更多信息



这次没有召开会议来讨论RAIK的议程,所以让我们说清楚。


第一眼


因此,我碰到了规则,尝试了游戏。第一印象是-在这里做什么?由于单位没有惯性,并且初始关卡没有封闭的周期,因此敌人可以随时向我们坚持,并为此防御自己。在这种情况下,您知道,可能性非常有限。您不会躲避子弹。但是我的最初恐惧并没有实现,尽管机会的因素很高,但是这些规则还是可以玩的。

我没有立即开始发展,过了几天傻瓜决定反思。我没有想出什么特别的东西。显然,您需要躲避子弹,追赶急救箱,如果可能的话,不要让敌人携带急救箱及所有其他物品。仍然有一些模糊的计划来寻找具有战略优势的职位,并围绕它们展开工作,但是如何区分这些职位尚不完全清楚。

开始


所以我们开始。出于习惯,我将语言包中的数据对象转换为自己的数据结构。是的,这需要一些时间,但不是很多,但是我获得了更大的灵活性,可以在更熟悉的环境中工作,并且在我转换时,最好开始了解游戏世界的工作方式。当然,不是一次全部,而是根据需要。例如,直到锦标赛的政治局势迫使我诉诸极端手段之前,我才重新创建地雷。我大致照搬了Smartgayev的逻辑,只增加了我和敌人之间是否存在隔离墙的检查。我看了看,他们似乎运转良好,所以我们可以假设我们有游戏世界。

模拟


现在,我们进入所有RAIK参与者最喜欢的消遣:我们正在编写模拟!阅读冠军聊天后,很明显写出准确的模拟是不好的。因此,我立即得分了。事实证明,即使从天花板反弹了一点,柚木内部还是有差异。当然,可以将其修改几天并显着提高准确性,但是,首先,不知道从中获得什么收益。其次,我太不耐烦了,一如既往,我希望尽快看到结果。因此,我决定开始编写策略本身,并且我认为如果需要的话,我将校正我的仿真曲线。事后看来,我必须说我也许是错的。
立刻将模拟恢复到正常状态是值得的,因此有必要在那里进行校正直到锦标赛结束,但仍然保持弯曲。

战略依据


然后,根据标准场景进行操作:我们由单位机器人生成一系列动作,模拟游戏世界中的变化,并将其全部提交给评估函数(OF)的输入。如果在足球比赛(去年的锦标赛)中,在完全随机人数的情况下追球没有效果(击打球的机会很少,尤其是从正确的角度),那么就没有这种问题。基本上,我们需要对两件事进行模拟:躲避子弹和找到道路。一些完全随机的动作场景足以逃脱子弹。至少在不是那么困难的地图上,几十种方案也将或多或少地用于某种方式的搜索。

顺便说一下,寻找方法-很显然,计数到终点并不总是可能的,因此您需要能够确定距离。使用相同的模拟,可以或多或少地准确地计算出时间距离。但是在这里我也简化了它,只是计算了沿矩形网格的距离。当然,这种简化会对复杂的地图产生一些影响。有时,我的部队仍在寻找武器时感到困惑,而敌人已经开始射击。没错,这些事件很少见。

目标的选择非常简单:没有武器时,我们就去武器;如果有武器,我们就去敌人;如果没有“健康”,我们去药房。在使用急救包和武器的情况下,那些离目标较近的物体被排除在外。由于某种原因,对我来说,首先要考虑的是武器。

第一个评估函数由两个部分组成:系数大的健康(不是我的,而是单位),系数小的目标与目标的距离。
那些。选择的路线不落在子弹下,但同时尽可能快地接近目标。重要的是要记住为下一个刻度找到的最佳路线,否则,当我们找到一个不错的选择却没有在下一个刻度给出时,可能会出现这种情况。

我们走在前面,第一个改进


从战斗中看,很明显,如果敌人有正常的躲闪,那么几乎不可能远距离进入。这是在浪费子弹。因此,我添加了一个简单的射击条件:仅在敌人距离7米以下时射击。另外,如果距离很大,即使剪辑中仅丢失一颗子弹,也值得充电。这两个简单的条件增加了很多。

这是我发送的第一个版本。在同一天,我意识到枪支比机关枪更有利可图。另外,如果射门不是很快,他会向OB增加与敌人的另一距离。因此,在重装时,他试图保持距离。

起步非常成功。我不记得在重设之前(大约在前三到五处),该策略在排名中成功提升了多少,而在重设之后自信地上升了。

下一个版本的主要改进是由于试图控制急救箱。再说一遍,一切都很简单:计算出了急救箱到我和敌人的距离,如果它们近似相等,则认为急救箱已经抽出了,因此,离它更近的人也是如此。评估功能已考虑到这一点。那些。从理论上讲,该部队试图摆放自己的位置,以使尽可能多的急救箱模糊不清。从理论上讲,当然可以,但实际上却不行。

之后,我很久没有发送更新了。令我惊讶的是,该策略首先达到了第一名,然后仍然下降了100多分。大概每个人都以为我在削减一些很酷的东西,这个令人震惊的策略飞速增长令我感到震惊。惨不忍睹,因为对急救箱的控制很笨拙,有两种射击方法,但基本上这是基于模拟曲线的简单躲避和移动。

测试中


我想单独谈一谈,因为适当的测试是开发中非常重要的部分,许多参与者似乎忽略了这一方面。人们直觉上误解了事故。

假设我们进行了一次测试,经过40场比赛,我们看到27:13的得分赞成新的得分。就是这样,我们找到了Grail,停止测试并接受更改。实际上,即使使用相等的力,这种情况的可能性也大约为2%。

再举一个例子,如果得分为55:45或更高,我们将启动100场比赛并接受更改。一个版本可以以这种方式播放的概率为2.8%,实际上应该以相同的分数输掉。百分之几的错误看起来可能不是很大,但是如果90%的更改未成功,则意味着接受的第4个更改都将失败。因此,即使100场比赛仍然是一个一般的测试,但更少-根本没有。

当然,启动几百款游戏可能会花费很长的时间。有多种选择,您可以在夜间运行测试,在后台运行,租用服务器时间或快速制定策略:)我的第一个版本平均在某处工作5秒钟。玩游戏,真是太幸运了。

如果策略很慢,那么您可以本地驱动截断的版本-例如,更少的搜索,更少的微滴答声。我在足球(以前的RAIK)中使用了此功能,没有发现任何问题。也许质量会在某处丢失,但是,无论如何,它比检查20场比赛的变化更有利可图。

增强功能


这次,我将不评估数量上的改进。首先,它们都很小(小于20%),因此不准确。其次,模棱两可,即 新版本可以自信地击败上一个版本,并且在与其他版本的竞争中表现更差。第三,我只是不记得他们。

  • , . , . , , .
  • . .. , , . , , -. , . , , . .
  • , , . , , , , , . , . , .
  • , ? , , . . , . .

-


客观上,您需要朝垫子的方向射击。伤害预期最高。显然,从理论上讲这是无法计算的,而且在我们所不知道的数学无济于事的情况下,仿真可以解决。我们朝所有可能的方向射击,并尝试从每颗子弹中躲避敌人。我们为每个池分配将要造成的最小损害值。在常规子弹的情况下,它等于0或对其造成的伤害;对于火箭,则有3种选择。

现在我们知道了垫子。分别预计每个方向的损坏,由此我们可以轻松地计算出垫子。等待镜头的每个方向并选择最佳方向。最好在枚举中使用此函数,以便正确定位该单元,但是在每种情况下调用它的速度都太慢。每个单位每跳一次被称为一次,现在射击不是按距离进行,而是如果预期的伤害超过一定的极限。这种增加是巨大的,在火箭筒的情况下看起来很清楚-现在我什至可以瞄准墙壁上的某处,以便用爆炸波击中敌人。



但是由于无法将此功能插入搜索中,因此存在一个问题,即搜索中的镜头条件与实际情况不同。我不知道如何解决这个问题,我不得不忍受它。

在那之后,直到我引入自爆功能的最后一天为止,并没有太大的变化。如果敌人开火时没有跳跃,他会加重罚款,因为跌倒会使躲闪变得更加困难。如果他的生命很少,我会尝试预测敌人前往急救箱的道路,从而略微改善了对他们的控制。他本人从60%的健康状况开始急救急救包,而不是50%的状况。他增加了自己在PF中的距离,以使它们不会互相干扰,而火箭筒也不会立即淘汰两个。最后,他添加了一个激进的mod,以防情况在很长一段时间内都没有改变并且我失去了分数,否则我的有时会卡住。

结果


正如我所说,很快就排名第一。除了短暂的时间,我一直呆在那里直到最后。在各回合中,情况稍差一些:第一名第四,第二名第三。这表明我在对抗强者时表现不错,但对弱者却不够稳定。第二轮比赛之一清楚地证明了这一点,当时处于最后位置的kostya200300在0击败我!


自爆


像大多数参与者一样,我对自我爆炸的可能性并不热心。这大大增加了已经相当大的随机因素。但是很明显,没有它就无法做到。没错,我并不是真的想要这样做,我将其推迟到最后一天。这种技术非常简单,如果我们站在地面上,敌人在爆炸半径之内,并且有足够(最多两个)地雷,那么我们将地雷放到底部。我提出了一个附加条件,即爆炸后我获得了明显的优势,即 要么立即获胜,要么杀死比自己更多的对手。我以为,既然我渴望志向高远,那么一对一地改变是无利可图的。好吧,就像在国际象棋中一样,如果您为了赢得胜利而玩,那么连续交换所有东西都是无利可图的。这就是我如何将拥有神风敢死队技能的战士送往最终战斗的方式。

决赛


正如我已经写过的,该评级仅表示与最接近的竞争对手之间的力量平衡,而我对较弱的竞争对手没有稳定性。在这方面,淘汰决赛选手对我来说是一团糟。另一方面,恐怖主义意识形态在最后一天的广泛传播导致部队分布进一步扩大。简而言之,尽管在排名中有自信的领导,但对决赛没有任何信心,只有希望。在决赛的前半段之后,很明显,主要的斗争将发生在我和伊凡·泰亚金(Ivan Tyamgin)之间。我提出的分数很少,而其他分数则远远落后。

休息期间,我涉足捡起自爆-固定了一些东西(事实证明,地雷不应该放在楼梯的顶部),他补充了一些防止爆炸的对策。并修复了模拟,因为到目前为止,我一直紧贴角落。

最后一轮第二部分的开始对我来说是成功的,差距开始逐渐扩大,最高达到约20分。我什至放松了一点,而不是每3分钟刷新一次结果页面,而是开始在电话上下棋。当我再次看时,差距已经达到了7点,然后迅速升至第一。我想知道他们为第二名付出了什么?到最后1个小时,又出现了间隔。30分钟后,差距急剧缩小。10分钟-仅3分!一分钟……胜利似乎!瓦尼亚只输给我3分。这是随机散布的。其余的落后50分或更多。

关于有趣的错误


在决赛之后,我注意到在某些游戏中,我的单位表现得很奇怪-他们似乎似乎可以并且甚至特别地抓住它们时,也不会回避子弹。事实证明,在决赛中,我犯了一个错误-当确定敌人是否可以炸毁我时,有必要计算爆炸范围内的哪个地雷。在这里,我混合了自己和另一个单位的坐标,并错误地认为爆炸将发生在我所在的位置,因此可以保证落入爆炸半径内。已经从正确的角度考虑了真正的爆炸,因此在模拟中,敌人本身可能会向我爆炸。通常,它只是给估计增加了一个大常数,但并没有真正影响任何东西。但是,如果敌人没有足够的地雷炸毁我,事实证明我抓到子弹有利可图的这样敌人就已经有足够的地雷了,我得到了评估的补充。也许是由于睡眠不足或啤酒罐喝醉了,但实际上,总是会发生错误。

结论


这场比赛虽然不如足球那么壮观,但从战略角度来看同样有趣。入门门槛相对较低,这对参与者的数量产生了有利的影响。在锦标赛的当月,我收到了很多激动和激动的情绪,为此,我感谢组织者。我还要感谢所有参与者,尤其是Vanya Tyamgina,他们没有让我在决赛中感到无聊。

All Articles