OpenAI Gym 关于CartPole的模拟退火解法
Posted songrotek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenAI Gym 关于CartPole的模拟退火解法相关的知识,希望对你有一定的参考价值。
前言
今天测试OpenAI Gym,然后发现CartPole的最快实现快到离谱,使用Simulated Annealing,也就是SA模拟退火法。效果如下图:
代码地址:模拟退火解CartPole
于是好好研究了一下。
关于模拟退火法
一种最优控制算法,基本思想就是每次找一个邻近的点(解法),如果邻近的点比较优,就接受这个点,但是下一次使用随机有一定概率继续选择新的邻近的点,从而避免局部最优,从而通过多次测试达到全局最优。
比较清楚的介绍详见:大白话解析模拟退火算法
如何将模拟退火法SA应用到CartPole中?
对于CartPole倒立摆,其控制输出
A
很简单,就是向左或者向右。输入
为了应用SA,首先需要构造一个从输入到输出的映射:
A=f(O)
那么这里显然我们可以使用最简单的映射,就是线性映射:
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-CarRacing 的自动驾驶项目 | 路径训练功能的实现