前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab强化学习Q-Learning与Sarsa对比

matlab强化学习Q-Learning与Sarsa对比

作者头像
万木逢春
发布2019-09-05 16:35:36
1.4K0
发布2019-09-05 16:35:36
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

Q-Learning强化学习FrozenLake求解

观察下一步选取哪一个动作会带来最大的奖励, 但是在真正要做决定时, 却不一定会选取到那个带来最大奖励的动作, Q-learning 只是估计了一下接下来的动作值

Sarsa

实践派, 说到做到, 在这一步估算的动作也是接下来要做的动作, 在环境中每走一步, 更新一次自己的行为准则

% 强化学习Sarsa

ccc

rng('default');

env=two_dimensional_env(4,4,0.01);

two_dimensional_rl=rl_q_table(env.actions,0.9,0.1,0.9);

% pause(2)

for episode =1:env.max_episodes

env = env.reset();

env.render();

A = two_dimensional_rl.choose_action(env.agent);

while 1

env = env.step(A); % 采取动作获得状态和奖励

A_ = two_dimensional_rl.choose_action(env.observation);

two_dimensional_rl=two_dimensional_rl.learn(env, A, A_); % 更新

two_dimensional_rl.dump();

env.agent=env.observation;

A=A_;

env.render();

if env.done

break

end

end

end

探索环境没有变化,只是在绘图时用

set(0,'CurrentFigure',self.fig)

ax = axes('Parent',self.fig);

代替原先夺取焦点的语句

强化学习方法对象需要改动的是

function obj=learn(obj,env, A, A_)

q_predict_arr = obj.find_line(env.agent);

q_predict = q_predict_arr(A);

if env.done ~= 1

line = obj.find_line(env.observation);

q_target = env.reward + obj.gamma * line(A_); % 没有结束

else

q_target = env.reward; % 一局结束了

end

% 更新QLearning table

table_line = obj.find_line(env.agent);

table_line(A) = table_line(A) + obj.alpha * (q_target - q_predict);

obj.q_table(StrHelper.arr2str(env.agent)) = table_line;

end

相关工具方法在

https://github.com/sickle12138/MatGamer

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档