新baseline来了!"AI球球大作战: Go-Bigger多智能体挑战赛" 等你来战!

共 3656字,需浏览 8分钟

 ·

2022-01-01 16:04


2021年11月,全球首届“ AI 球球大作战:Go-Bigger多智能体决策智能挑战赛”已正式开赛。作为面向全球技术开发者和在校学生的科技类竞赛活动,本次比赛旨在推动决策智能相关领域的技术人才培养,打造全球领先、原创、开放的决策AI开源技术生态。


本次比赛由OpenDILab(开源决策智能平台)主办,上海人工智能实验室作为学术指导,商汤科技、巨人网络、上汽集团人工智能实验室联合主办,全球高校人工智能学术联盟、浙江大学上海高等研究院、上海交通大学清源研究院联合协办,OSCHINA、深度强化学习实验室作为支持,PaperWeekly、机器学习算法与自然语言处理作为合作媒体。


比赛共设冠军、亚军各1名,优胜奖4名,共同瓜分15万赛事奖金。预计明年3月封闭天梯测试, 并在4月发布及公示获胜结果。



⭐️ Go-Bigger比赛主页链接:

https://www.datafountain.cn/competitions/549


⭐️ Challenge Repo Github 链接:

https://github.com/opendilab/GoBigger-Challenge-2021


⭐️ DI-engine Repo Github 链接:

https://github.com/opendilab/DI-engine


⭐️ GoBigger Repo Github 链接:

https://github.com/opendilab/GoBigger


本篇文章主要介绍Go-Bigger多智能体挑战赛的新版baseline特性,以及全新的特征工程抽象过程。

Gobigger-Explore是2021年GoBigger Multi-Agent Decision Intelligence Challenge的基线0.2.0版本。此版本基于DI-engine进行设计,旨在提供一种简单的入门级方法。

参赛选手可以通过扩展基线方法来构建智能体,如采用更有效的强化学习算法设计更丰富的特征抽象方法,以及更高效的网络模型等等。

此外,DI-engine的模块化结构有利于参赛选手轻松读懂代码,并且DI-engine提供了丰富的强化学习算法供参赛者使用。对于熟悉多智能体决策AI问题的研究人员来说,这个基线算法可以带来较大的帮助。

⭐️ Gobigger-Explore Repo Github链接:
https://github.com/opendilab/Gobigger-Explore

相比于上一个版本,在V0.2.0版本中,我们在完善了训练pipeline基础上,设计了全新的特征工程以及网络结构来提升训练以及收敛速度,利用不定长的特征来提升数据利用率。

我们在8核处理器、GPU V100上训练1-2天,与基于规则的Bot进行了100场PK较量,我们取得了75%的胜率。参赛者可根据自己的配置适当调节batchsize以及ReplayBuffer大小,即可完成复现。


对于Gobigger环境的介绍,可以查看我们的前面的推送,链接如下:

五分钟教你在Go-Bigger中设计自己的游戏AI智能体

下面将为大家介绍全新的特征抽象过程,在Gobigger环境中,球体的种类分为食物球(food ball), 孢子球(spore ball), 玩家球(clone ball)以及荆棘球(thorn ball)。


1.对全局信息进行编码


  • 在Pygame中,默认坐标原点为左上角。如下图所示,图中红色矩形为全局视野,绿色矩形为局部视野


  • 全局信息由两部分组成,一部分是时间信息,另一部分是边缘信息

  • 时间信息是对距离比赛结束的剩余时间进行特征抽象

  • 边缘信息是对局部视野与整个地图边缘之间距离的特征抽象



代码实现如下:



2.对clone球ID信息预处理


  • 对每个clone球team ID进行预处理,clone球所属team的ID始终为0,其他队伍的 id依次为1、2、··· team_num-1

  • 对每个clone球Player ID进行预处理,clone球所属Player的ID始终为0,同一个队伍其他玩家的Player ID依次为1、2 ··· player_num_per_team - 1


代码实现如下:



3.对food信息进行编码


  • 为方便计算,面积计算采用半径的平方,省去常数项。同时,我们将food和spore都看作为食物球

  • food map将局部视野进行切分为h*w个小格子,每个小格子的大小为16*16

  • food map[0,:,:]表示落在每个小格子中food的累积面积

  • food map[1,:,:]表示落在每个小格子中当前id的clone ball的累积面积

  • food grid将局部视野进行切分为h*w个小格子,每个小格子的大小为8*8

  • food grid表示每个小格子中food相对于所属格子的左上角的偏移量以及food的半径

  • food relation 的维度是[len(clone),7*7+1,3]。其中[:,7*7,3]表示每个clone ball的7*7网格邻域中food的信息,包括偏移量以及网格中food面积平方和。

    因为覆盖率很低,在这里做了一个近似,food的位置信息以最后一个为准。[len(clone):,1,3]表示每个clone ball自身的偏移量以及面积。


代码实现如下:


对clone进行编码

  • 对clone ball进行编码,包括位置、半径、玩家名称的one-hot编码以及clone ball的速度编码


代码实现如下:



4.对关系进行编码


  • ball_1 与ball_2 的相对位置大小关系,(x1-x2,y1-y2)

  • ball_1 与ball_2 的距离,即o1与o2之间的距离dis

  • ball_1 与ball_2 的吞并是一个球的圆心出现在另一个球中,即发生吞并

  • ball_1 与ball_2 是否相互吞并,即一个球的圆形边缘与另一个球圆心之间的距离

  • ball_1 与ball_2 分裂后相互吞并,即分裂后最远的分裂球的圆形边缘与另一个球圆心之间的距离

  • ball_1 与ball_2 吃与被吃关系,即两球之间的半径大小关系

  • ball_1 与ball_2 分裂后吃与被吃关系,即分裂后两球之间的半径大小关系

  • ball_1 与ball_2 各自的半径做映射, 分别为m*n个r1 和m*n个r2, m表示ball_1的数量,n表示ball_2的数量



代码实现如下:



5.模型设计


  • 网络结构主要采用MLP以及Pooling层

  • mask的作用,记录padding后的有效信息。需结合代码理解更佳

  • Baseline中的model设计并不是最好的,选手可以尽情脑洞




6.RL策略


  • 采用最经典的DQN算法+离散动作空间(4*4笛卡尔积)

  • 在OpenDILab中,已经实现了一些必备的DQN组件,比如,经验回放队列(replay buffer),为了平衡探索和利用所用的eps-greedy等等



7.标准对局怎么打


我们开源了训练的log信息,检查点文件以及评估的视频。

⭐️ 百度云链接:(提取码:u4i6)
https://pan.baidu.com/share/init?surl=1sBoLWBEN33iNycs8y7fsw

  • 安装必要的依赖库

# Install DI-engine    git clone https://github.com/opendilab/DI-engine.git    cd YOUR_PATH/DI-engine/    pip install -e . --user
   # Install Env Gobigger    git clone https://github.com/opendilab/GoBigger.git    cd YOUR_PATH/GoBigger/    pip install -e . --user

  • 开始训练

# Download baseline    git clone https://github.com/opendilab/Gobigger-Explore.git    cd my_submission/entry/    python gobigger_vsbot_baseline_main.py

  • 评估并保存视频

cd my_submission/entry/python gobigger_vsbot_baseline_eval.py --ckpt YOUR_CKPT_PATH


8.Tips


  • 采用连续动作空间或者混合动作空间使得智能体操作更加丝滑

  • 设计新的Reward奖励使得智能体变得攻守兼备

  • 采用合适的策略使得智能体学会相互配合以及更高级的动作


扫码即可了解更多开源信息~
浏览 64
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报