温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

matlab中小球不落地的示例分析

发布时间:2021-12-30 11:19:18 来源:亿速云 阅读:174 作者:小新 栏目:大数据

小编给大家分享一下matlab中小球不落地的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

matlab中小球不落地的示例分析      

训练1000次之后的agent效果

在利用之前FrozenLake环境训练当中那种面向对象方式管理程序时发现训练后期运行速度变慢、而且是肉眼可观察到的变慢,所以采用了matlab另一种程序文件管理方式packages

matlab中小球不落地的示例分析      

以+和名称命名文件夹形成一个包、在包内可以新建函数或者前面用到的class

这里就直接使用函数文件、调用函数时需要写明包的名字、比如env.step()

可以观察到在训练1000后运行速度也不会出现肉眼可见的变化

这种方式比起面向对象模式简单游戏环境搭建要更容易上手


在传参和调用的时候采取结构体变量存储原先的对象参数、也就是原先那种一个文件夹下十几个函数文件一个main文件模式下的全局变量、比如

function self = step(self,action)

% 一步动作

self.done = 0;

self.reward=0;

temp_w=self.agent(5)+5*(2-action);

if temp_w<5

    temp_w=5;

end

if temp_w>25

    temp_w=25;

end

self.reward=0;

ballPos  = self.observation(1:2);

ballVel  = self.observation(3:4);

if ballPos(1) > self.weight

    ballPos(1) = self.weight;

    ballVel(1) = -ballVel(1);                         % 边界

elseif ballPos(1) < 0.1

    ballPos(1) = 0.1;

    ballVel(1) = -ballVel(1);

elseif ballPos(2) >= self.height

    ballPos(2) = self.height;

    ballVel(2) = -ballVel(2);                         % 顶部墙

    self.score=self.score+1;

elseif ballPos(2) < 1

    if abs(self.agent(5) - ballPos(1)) <= 5                 % 底部方块

        ballVel(2) = -ballVel(2);

        self.reward=10;

    else                                              % 方块没接住球

        self.reward=-1;

        self.done=1;

    end

end

ballPos = ballPos + ballVel;

self.observation=[ballPos;ballVel;temp_w];

end

这是agent执行一个动作的函数、把这个环境中所以变量存储在self参数中、在env.step(env,A)中传递进来、最后再返回出去

对比原先的oop模式、可以看出就是再传参的时候显式的传入整个环境

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

matlab强化学习Sarsa与Sarsa(lambda)对比


最后就是这个训练程序了、依然采用q-table、所以没有太多变化、将之前提出的几个优化想法都加进来

% 强化学习

ccc

% rng('default');

env0=env.single_pong(30,30,0.001);

single_pong_rl=rl.rl_q_table(env0.actions,0.9,0.2,0.9);

fig.fig=figure(1);

fig.base=0;

%%

for episode =1:env0.max_episodes*1

    fig.show = ~mod(episode,1);

    env0=env.reset(env0);

    fig=env.render(env0,fig);

    while 1

        A = rl.choose_action(single_pong_rl,env0.agent);

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

        single_pong_rl=rl.learn(single_pong_rl,env0, A);  % 更新

        rl.dump(single_pong_rl,fig.show);

        env0.agent=env0.observation;

        fig=env.render(env0,fig);

        if env0.done

            break

        end

    end

end

%%

clear fig A episode

close all

save(filename);


以上是“matlab中小球不落地的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI