AWS DeepRacer re:Invent 2018赛道reward function奖励函数

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

1.回顾

上一篇文章中我们对DeepRacer进行了一个简单的介绍,那么今天我们就用一个实际的例子来看看怎么写好一个reward function,即奖励函数。

我们知道,建模的关键就是怎么利用系统提供的各种函数进行编程。
系统提供了如下的函数,每个函数都有详细的说明:
在这里插入图片描述

2.re:Invent 2018赛道

那今天我们就挑选一个赛道进行比赛吧。
我们选择的是经典赛道re:Invent 2018:
在这里插入图片描述
网站上有赛道的基本介绍,比如长度,宽度,还有就是赛道的形状。

3.策略

上一篇文章创建模型的时候,系统给了我们一个奖励函数的样本。
如果我们直接用这个奖励函数是可以完成比赛的,但是时间会比较长,一般要在20s左右,如果跑3圈的话会要1分多钟。

为什么呢?因为这个奖励函数的策略是鼓励赛车一直围绕着中轴线行驶,离中轴线越近得到的奖励越多,那么这样有个问题就是要牺牲赛车的速度。我们看过赛车比赛知道,赛车不可能一直在中轴线附近行驶的,有的地方需要行驶在赛道边上,为了下一个弯道的时候能顺利切弯而过。而且速度方面,在直道的时候可以让速度最大化,到弯道的时候将速度降下来。

那么回到re:Invent 2018这条赛道,我们先看下这条赛道的图片:
在这里插入图片描述
我们可以看到赛道上有很多坐标点,我们叫做checkpoints,这条赛道一共有118个checkpoints。
那我们可以想象一下真实比赛中赛车手是怎么过弯道的,我们画了一个图,用红色的箭头表示在弯道处赛车行驶的路径。如果按照这样的路径那么赛车所走的路径是最短的。我们还需要注意的是在弯道处的速度要控制好,在直行路线的时候速度可以加大,在过弯的时候速度要降下来。
在这里插入图片描述

4.reward function:奖励函数

根据上面的分析,我们可以看到影响赛车的行驶的因素主要有两个:
1. 赛道的位置
2. 赛车的速度

那我们奖励函数也就围绕这两个因素来写。

我们将赛道分成左、中、右三个部分。以赛道中轴线为中心,超过中轴线一定比例就算做左赛道或右赛道。

我们将速度也分为两个部分,一个是快速,一个是慢速

前面说到了,赛道有118个坐标,那么我们可以细分一下,将哪些坐标归在左赛道,哪些在中赛道,哪些又是右赛道。同理,我们还需要将坐标分为哪些属于快速,哪些属于慢速。

讲一下代码:

  1. 根据distance_from_center和track_width的比例判断中心赛道区域;
  2. 根据is_left_of_center和not is_left_of_center判断左赛道区域和右赛道区域;
  3. 根据closest_waypoints的[1]的值判断下一个checkpoint的值;
  4. 建立数组:left[], center[], right[], fast[], slow[],将118个坐标点根据你设计的路线情况,填入数组内;
  5. 设置奖励值,比如赛车当前如果处理left[]数组内,并且is_left_of_center == true,那么就给予奖励。

另外创建model的时候还需要调整好最大和最小速度,速度太大容易跑出赛道,速度太小耗时又长。

训练时间可以控制在4小时左右。

我们看下跑出的结果:
在这里插入图片描述
相比原先20s的成绩还是有很大程度提升的。

欢迎关注我的技术公众号:国民程序员,我们的目标:输出干货

  1. 每天分享原创技术文章
  2. 海量免费技术资料和视频学习资源
  3. 分享赚钱门道,带领程序员走向财务自由
图片名称
  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值