RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)

RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)_第1张图片

        记录第一次RL比赛,正赛第二及第 Jidi

环境介绍

RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)_第2张图片

        在本次RLChina 智能体挑战赛 - 壬寅年冬赛季中,采用的比赛环境是奥林匹克桌面曲棍球。简而言之双方球员从自己球门出生点出发,将出生在中轴线的曲棍球击入对方球门即可得分。下面具体介绍坏境的细节。


map

  • 本游戏共有两方,对战双方各控制一个有相同质量为1和半径为20的弹性小球智能体。智能体可以互相碰撞,也可以碰撞墙壁,但根据墙面摩擦系数会损失一定的速度;
  • 比赛场地为一个400*480长方形桌面,在桌面的左右两端设置有感应球门线;比赛开始时,在场地中心线随机位置生成一个小球,当该小球触及到任意一方的的球门线时视为进球,进球的一方获胜;
  • 对战双方在该项目中仅能在己方区域内活动,以场地中线为界;
  • 智能体自身有能量,每步消耗的能量与施加的驱动力和位移成正比:\text { energy }_{t}=\min \left(\text { energy }_{t-1}+20-\text { force }_{t} *\left|v_{t}\right| / 50,1000\right)
  • 智能体能量同时以固定速率恢复,如果能量衰减到零,智能体出现疲劳,导致不能加力,注意: energy 不会在正式比赛的observation中提供;
  • 当有一方进球或环境达到最大步数500步时环境结束,先进球的一方获得胜利;
  • 奖励:先进球的一方得100分,另一方得0分。

observation

        每一个step,环境会提供一个40*40的像素图作为observation。这个observation是环境根据当前我方agent的位置和旋转角度在游戏环境中等比例缩放5倍采样得到的。该observation只能显示我方agent周围的视角,agent的中心大概位于observation的(31.5,19.5)处,每一个像素对应环境中的距离为5。observation中地图的边界6、中轴圆环4、球2、球门7、我方8和敌方10分别用六种非零正整数表示,其余位置均为0。中轴圆环这样无法产生物理碰撞的线条会被智能体遮挡。只有球和边界会与智能体产生物理碰撞。

action

        每一个step均采用 [force,degree] 的形式作为当前step的action,\text { force } \in[-100,200],为正则向前输出力,为负则向后输出力。力的输出在旋转之后执行。100的 force 会给agent带来1的加速度。agent的速度上限为10,当速度超过10时,会等比例放缩速度的x,y分量,使之合速度为10。\text { degree } \in[-30,30],为正则顺时针旋转,为负则逆时针旋转。旋转只影响该个step力输出的方向,以及之后环境返回observation的角度,不会影响agent的速度。

规则实现

        对于这种只包含局部视野信息的智能体博弈环境并不适宜使用强化学习来进行训练。综合考虑,本次我们采用规则的方法进行比赛,具体如下。

(1)第一脚

        道德谴责:对于这样的开放智能体环境,总会有一些不道德分子通过环境代码来记录全局视野信息进行比赛。在这里唾弃(因为我之前也是这样)。对于这样不道德的行为加以摒弃。所以本次比赛我们采用局部视野进行决策。通过浏览大量实验发现,大多数提交者并没有很好地实现第一脚的想法,但往往前几名都是很好地实现了第一脚一招致胜的想法,但根据视频回放只有一种可能,他们用了全局视野进行计算。唾弃、唾弃、唾弃。

        正文:通过实验发现,整个环境唯一出生点变的是球的位置,通过打表的形式遍历完所有整数点的最佳射球力度以及方向,即可实现根据局部视野通过查表的形式进行第一脚的策略。简而言之,第一,为了简化打表的难度,我们以固定角度进行击球,首先产生向前的速度,然后向球方向旋转90度,在通过打表算出来连续5帧需要多少力施加在垂直方向,进而产生了击打球的合成速度方向。第二,球的出生点范围为[300,500],共201个点,其中上下对称,所以真正需要打表的点是101个点,并且每个点从[0,200]的力中遍历找到能踢进球的力记录下来作为打表的备选方案,所以总共需要实验201*101次,利用多进程可以加快打表的速度(速度提升10-20倍)。至此完成第一脚打表操作。第三,为了防止有对手在球门面前阻挡,我们将所有的入射力进行人工筛选,只击打最刁钻的位置来提高第一球的命中率。最后,由于球的产生位置是浮点数范围均匀采用而来,后期仍需要人工进行部分微调。

RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)_第3张图片

RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)_第4张图片

 (2)防御

        踢完第一脚之后,开始记录自身的全局旋转角度,局部视野信息一共分为四种情况:

  • 没球没球门:回防策略为固定360°转圈;
  • 有球没球门:通过全局旋转角度得到球在我与球门之间的位置分为前、后关系,该情况主要通过计算偏向入射角将球往智能体的正方向的内侧踢,阻止球进入自家球门。思想示意图以及代码实现如下所示。

RLChina 智能体挑战赛 - 壬寅年冬赛季(桌面曲棍球)_第5张图片

if tmp_x>30:
   tmp_y = 8
else:
    tmp_y = 6
theta_run = math.degrees(math.atan2(tmp_y,tmp_x))
if ball_degree0<60:
    ball_degree0 += theta_run
else:
    ball_degree0 -= theta_run
my_degree = ball_degree0 - degree
  • 没球有球门:努力往球门附件靠近。
  • 有球有球门:取球和球门与智能体的角度合成作为自己下一个step的旋转degree:my_{degree} = 0.8*ball_{degree}+0.2*door_{degree},具体比例系数视情况而定。

 总结

        第一:虽然在白盒环境比赛中使用环境信息在RL领域是不道德行为,但在此并不做出过多评价,本人仍坚持只通过局部视野+特征工程+常用算法思想进行比赛,唾弃加入环境代码。

        第二:RLChina比赛奖金还可以,一年4次比赛,在此鼓励更多对RL感兴趣的参与比赛,也希望有更多的大佬加入,别老是那几个人在拿官方当提款机使用。(是的,我嫉妒了,张榜结果第四,就差一点拿到奖金,但我不气馁,更希望公开自己的想法以及代码让RLChina实现更多的可能性,给RL领域带来更多的创新点)。

        第三:感谢赵鉴大佬团队提供的环境介绍。本次本人比赛代码在github开源,并在csdn提供付费下载版本,可付费模式,有能力的支持一下原创,白嫖的点个赞。

你可能感兴趣的:(比赛,人工智能,强化学习,RLChina,python)