您好,登錄后才能下訂單哦!
小編給大家分享一下matlab中小球不落地的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
訓(xùn)練1000次之后的agent效果
在利用之前FrozenLake環(huán)境訓(xùn)練當(dāng)中那種面向?qū)ο蠓绞焦芾沓绦驎r(shí)發(fā)現(xiàn)訓(xùn)練后期運(yùn)行速度變慢、而且是肉眼可觀察到的變慢,所以采用了matlab另一種程序文件管理方式packages
以+和名稱命名文件夾形成一個(gè)包、在包內(nèi)可以新建函數(shù)或者前面用到的class
這里就直接使用函數(shù)文件、調(diào)用函數(shù)時(shí)需要寫明包的名字、比如env.step()
可以觀察到在訓(xùn)練1000后運(yùn)行速度也不會(huì)出現(xiàn)肉眼可見的變化
這種方式比起面向?qū)ο竽J胶唵斡螒颦h(huán)境搭建要更容易上手
在傳參和調(diào)用的時(shí)候采取結(jié)構(gòu)體變量存儲(chǔ)原先的對(duì)象參數(shù)、也就是原先那種一個(gè)文件夾下十幾個(gè)函數(shù)文件一個(gè)main文件模式下的全局變量、比如
function self = step(self,action)
% 一步動(dòng)作
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執(zhí)行一個(gè)動(dòng)作的函數(shù)、把這個(gè)環(huán)境中所以變量存儲(chǔ)在self參數(shù)中、在env.step(env,A)中傳遞進(jìn)來、最后再返回出去
對(duì)比原先的oop模式、可以看出就是再傳參的時(shí)候顯式的傳入整個(gè)環(huán)境
matlab強(qiáng)化學(xué)習(xí)Q-Learning與Sarsa對(duì)比
matlab強(qiáng)化學(xué)習(xí)Sarsa與Sarsa(lambda)對(duì)比
最后就是這個(gè)訓(xùn)練程序了、依然采用q-table、所以沒有太多變化、將之前提出的幾個(gè)優(yōu)化想法都加進(jìn)來
% 強(qiáng)化學(xué)習(xí)
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); % 采取動(dòng)作獲得狀態(tài)和獎(jiǎng)勵(lì)
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中小球不落地的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。