上篇文章讲述了环境的搭建,我相信很多同学迫不及待想控制一下这个倒立摆了,我知道你很急,但你先别急,这不就来了~~~
首先说明本人是一个刚刚接触RL的科研小白,单单一个例程就成功耗费我一个下午,“gym你是有两下的”,网上关于如何实现这个例程也有很多文章,但大多只是分析好一点的给出了控制代码,对于实现过程的分析比较少见,所以今天我就总结一下我的实现过程,可供大家学习参考。后续我还会用其他方法研究怎样控制这个倒立摆,特别是会用到神经网络,小小期待一下吧!
另外再推荐一个本人的小经验,当我们苦苦追求一个事情的结果,但是还没想出解决办法的时候,不妨先做点别的事情,换换脑子,比如去健身去跑步,相信半个小时的有氧运动会帮助你更好的完成任务,亲身经历,确实有效。当然这有个前提,你知道当前这个任务你有很强烈的意愿完成它,这个方法才奏效,不然就成了拖延的理由。。。ok言归正传吧~
承接上一篇文章,这里我们需要再向我们的环境中添加一个包,如果不会添加可以看上一篇文章,这里同样直接复制下方代码即可:
安装box2d包
conda install -c conda-forge box2d-py
等待安装即可。。。
接下来重头戏:
实现代码分析
别担心,虽然分析代码很重要,但是如果一看代码就头疼那还不如先放一放,先来听一下这个游戏怎么玩。言归正传,我们正式来分析一下这个例程中的游戏让我们做什么?
我们看到画面中有一辆小车和一个倒立摆,倒立摆与小车只有一个连接点位于车顶,由基本的物理定律可知,如果此时保持小车不动,那么这根倒立摆势必会随着时间的推移向左或向右倾倒。那么答案显而易见,我们就是要控制这辆小车左右移动,来保持这跟倒立摆直立。绝对的直立是不可能的,所以这个游戏设定了
倾倒角度 不能超过±15°
小车可移动范围 x :中间到两边各2.4个单位长度