text.html 2.9 KB
Newer Older
ToTensor's avatar
ToTensor 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
 
<p class="content">用SARSA算法实现冰湖挑战的代码如下:</p> 
<div class="content_106"> 
 <p class="content_105"># 初始化参数</p> 
 <p class="content_105">alpha = 0.6 # 学习速率</p> 
 <p class="content_105">gamma = 0.75 # 奖励折扣</p> 
 <p class="content_105">episodes = 500 # 游戏盘数</p> 
 <p class="content_105">r_history = [] # 奖励值的历史信息</p> 
 <p class="content_105">j_history = [] # 步数的历史信息</p> 
 <p class="content_105">for i in range(episodes):</p> 
 <p class="content_121">s = env.reset() # 重置环境</p> 
 <p class="content_121">r All = 0</p> 
 <p class="content_121">d = False</p> 
 <p class="content_121">j = 0</p> 
 <p class="content_121">a = 0</p> 
</div> 
<p class="content_145">#SARSA算法的实现</p> 
<div class="content_106"> 
 <p class="content_121">while j < 99:</p> 
 <p class="content_111">j+=1</p> 
 <p class="content_111"># 通过Q-Table选择下一个动作, 但是增加随机噪声, 该噪声随着盘数的增加而减小</p> 
 <p class="content_111">a1 = np.argmax(Q[s, :] +</p> 
 <p class="content_119">np.random.randn(1, env.action_space.n)*(1./(i+1)))</p> 
 <p class="content_111"># 智能体执行动作, 并从环境中得到新的状态和奖励</p> 
 <p class="content_111">s1, r, d, _ = env.step(a)</p> 
 <p class="content_111"># 通过与策略相同的算法更新Q-Table, 选择新状态中的最大Q值</p> 
 <p class="content_111">Q[s, a] = Q[s, a] + alpha*(r + gamma*Q[s1, a1] - Q[s, a])</p> 
 <p class="content_111">r All += r</p> 
 <p class="content_111">s = s1</p> 
 <p class="content_111">a = a1</p> 
 <p class="content_111">if d == True:</p> 
 <p class="content_139">break</p> 
 <p class="content_121">j_history.append(j)</p> 
 <p class="content_121">r_history.append(r All)</p> 
 <p class="content_105">print(Q)</p> 
</div> 
<p class="content">和Q-learning算法相比,同策略的SARSA算法如果选择<span class="italic">ε</span>-Greedy策略,则Q-Table的收敛将会更为缓慢,随机性更强,如本例所示。而如果选择贪心策略,则会更加稳定、安全(但是缺乏冒险精神)。</p> 
<p class="content">通过绘制出游戏的奖惩曲线,以及每盘的步数曲线(如下图所示),大家可以比较SARSA算法与Q-Learning算法效果上的区别:使用<span class="italic">ε</span>-Greedy策略的SARSA算法,随着Q-Table中知识的积累,智能体找到飞盘的概率会增加,因为200盘以后得到1分的情况显著增加,但是并不像Q-Learning算法那样确保每次都遵循一样的成功路线。因而这种情况下的智能体总是保持了一定程度上对环境的探索。就强化学习的目标而言,这其实是我们所希望看到的现象。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0341-0441.jpg"> 
 <p class="imgtitle">采用ε-Greedy策略的SARSA算法总保持对环境的探索</p> 
</div>