OpenAI Gym 关于CartPole的模拟退火解法

Posted songrotek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenAI Gym 关于CartPole的模拟退火解法相关的知识,希望对你有一定的参考价值。

前言

今天测试OpenAI Gym,然后发现CartPole的最快实现快到离谱,使用Simulated Annealing,也就是SA模拟退火法。效果如下图:

代码地址:模拟退火解CartPole

于是好好研究了一下。

关于模拟退火法

一种最优控制算法,基本思想就是每次找一个邻近的点(解法),如果邻近的点比较优,就接受这个点,但是下一次使用随机有一定概率继续选择新的邻近的点,从而避免局部最优,从而通过多次测试达到全局最优。

比较清楚的介绍详见:大白话解析模拟退火算法

如何将模拟退火法SA应用到CartPole中?

对于CartPole倒立摆,其控制输出 A 很简单,就是向左或者向右。输入O就是车的位置,速度,杆的角度,角速度。

为了应用SA,首先需要构造一个从输入到输出的映射:

A=f(O)

那么这里显然我们可以使用最简单的映射,就是线性映射:

A=wO

w <script type="math/tex" id="MathJax-Element-276">w</script> 即为参数向量。模拟退火就来改这些参数,从而得到一个新的“点”。

再下来的问题就是如何判断w好坏了,想法也很简单,每次运行一次episode即一次实验,累加计算得到的reward值,用Score得分表示,代表这个参数效果更好。

所以接下来是思路就简单了:

初始化w
初始化最优w
初始化动作选择w

每次给动作选择w增加一点随机性,(随机性不断减少),计算得到的回报Score
如果Score 最大,就将当前的w赋给最优w,并将最优w赋给动作选择w
如果Score 小,那么可以增大随机性。

反复运算,值得一定时间w不再波动(即不再退火)

更具体的大家可以参考代码。这里只分析一下思路。

思考

模拟退火法是一种类贪婪算法,通过纯随机的方式来寻找更优的结果。对于低维空间可以,但对于高维控制,这种方向性不强的做法(比起随机梯度下降恐怕就不好了)

以上是关于OpenAI Gym 关于CartPole的模拟退火解法的主要内容,如果未能解决你的问题,请参考以下文章

OpenAI 健身房:如何在 CartPole-v0 中获取像素

openAi-gym 名称错误

观察的意义 - OpenAI Gym

OpenAI基于 Gym-CarRacing 的自动驾驶项目 | 路径训练功能的实现

OpenAI基于 Gym-CarRacing 的自动驾驶项目 | 车道检测功能的实现 | 边缘检测与分配 | 样条拟合

Gym