您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做-FPGA代做-强化学习matlab源代码

时间:2019-8-1 1:16:56 点击:

  核心提示:MATLAB代做-FPGA代做-强化学习matlab源代码...


现在,我们再增加一个相似的矩阵Q,代表智能体从经验中所学到的知识。矩阵Q的行代表智能体当前的状态,列代表到达下一个状态的可能的动作。


因为智能体在最初对环境一无所知,因此矩阵Q被初始化为0。在这个例子中,为了阐述方便,我们假设状态的数量是已知的(设为6)。如果我们不知道有多少状态时,矩阵Q在最初被设为只有一个元素。如果新的状态一旦被发现,对矩阵Q增加新的行和新的列非常简单。

Q-学习的转换规则非常简单,为下面的式子:
Q(state, action)=R(state, action) + Gamma * Max(Q[next state, all actions])

依据这个公式,矩阵Q中的一个元素值就等于矩阵R中相应元素的值与学习变量Gamma乘以到达下一个状态的所有可能动作的最大奖励值的总和。

我们虚拟的智能体将从经验中学习,不需要教师指导信号(这被称为非监督学习)。智能体将从一个状态到另一个状态进行探索,直到它到达目标状态。我们将每一次探索作为一次经历,每一次经历包括智能体从初始状态到达目标状态的过程。每次智能体到达了目标状态,程序将会转向下一次探索。

Q-学习算法的计算过程如下:
1、设置参数Gamma,以及矩阵R中的环境奖励值;
2、初始化Q矩阵为0;
3、对每一次经历:
         随机选择一个状态;
        Do while 目标状态未到达
             对当前状态的所有可能的动作中,选择一个可能的动作;
             使用这个可能的动作,到达下一个状态;
             对下一个状态,基于其所有可能的动作,获得最大的Q值;
             计算:Q(state, action)=R(state, action) + Gamma * Max(Q[next state, all actions])
             设置下一个状态作为当前状态;
  End For

智能体利用上述的算法从经验中学习,每一次经历等价于一次训练。在每一次训练中,智能体对环境进行探索(用矩阵R表示),并且其一旦到达目标状态,就得到奖励值。训练的目的是增强智能体的大脑,用矩阵Q表示。越多的训练结果将导致更优的矩阵Q。在这种情况下,如果矩阵Q已经被增强,那么智能体就不会四处盲目的探索,而是会找到最快的路线到达目标状态。

参数Gamma的取值在0到1之间(0<=Gamma<=1),如果Gamma越接近于0,智能体更趋向于仅仅考虑即时奖励;如果Gamma更接近于1,智能体将以更大的权重考虑未来的奖励,更愿意将奖励延迟。

为了使用矩阵Q,智能体仅仅简单地跟踪从起始状态到目标状态的状态序列,这个算法在矩阵Q中,为当前状态寻找到具有最高奖励值的动作。

利用矩阵Q的算法如下:
1、设置当前状态=初始状态;
2、从当前状态开始,寻找具有最高Q值的动作;
3、设置当前状态=下一个状态;
4、重复步骤2和3,直到当前状态=目标状态。

上述的算法将返回从初始状态到目标状态的状态序列。


联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:




clc;

clear all;

% define state

R=ones(60,60)*-inf;  

for i=1:30

   if i-10>0

       R(i,i-10)=0;

   end 

   if i+10<31

       R(i,i+10)=0;

   end

   if mod(i,10)~=1

       R(i,i-1)=0;

   end

   if mod(i,10)~=0;

       R(i,i+1)=0;

   end

end

R(24,34)=0;R(25,35)=0;R(26,36)=0;

R(34,24)=0;R(35,25)=0;R(36,26)=0;

R(34,35)=0;R(35,36)=0;R(35,34)=0;R(36,35)=0;

R(35,45)=0;R(45,35)=0;

R(45,55)=100;R(55,45)=0;

 

% reinforcement learning parameters

gamma=0.9;

q=zeros(size(R));     % q matrix

q1=ones(size(R))*inf; % previous q matrix

count=0;

 

% visualize obstacle 

axis([0,10,0,6]);

hold on;

plot([0,3],[3,3],'g','linewidth',2);

plot([6,10],[3,3],'g','linewidth',2);

plot([3,3],[2,3],'g','linewidth',2);

plot([6,6],[2,3],'g','linewidth',2);

plot([4,4],[0,2],'g','linewidth',2);

plot([5,5],[0,2],'g','linewidth',2);

plot([3,4],[2,2],'g','linewidth',2);

plot([5,6],[2,2],'g','linewidth',2);

 

% intial state

y=randperm(30);

state=y(1);

 

% q learning

tic

for episode=0:50000

 

    qma=max(q(state,:));

    if qma~=0

       x=find(q(state,:)==qma);

    else

       x=find(R(state,:)>=0);

    end

    % choose action

    if size(x,1)>0

        x1=RandomPermutation(x);

        x1=x1(1);

    end

    % update q matrix

    qMax=max(q,[],2);

    q(state,x1)=R(state,x1)+gamma*qMax(x1);

    

    Y(i)=5.5-floor((x1-1)/10);

    X(i)=0.5+rem(x1-1,10);

    % visualization

    A=plot([X(i)-0.5,X(i)+0.5],[Y(i)-0.5,Y(i)-0.5],'r-','linewidth',2);

    B=plot([X(i)-0.5,X(i)+0.5],[Y(i)+0.5,Y(i)+0.5],'r-','linewidth',2);

    C=plot([X(i)-0.5,X(i)-0.5],[Y(i)-0.5,Y(i)+0.5],'r-','linewidth',2);

    D=plot([X(i)+0.5,X(i)+0.5],[Y(i)-0.5,Y(i)+0.5],'r-','linewidth',2);

    pause(0.05);

    

     % break if converged: small deviation on q for 1000 consecutive

     if sum(sum(abs(q1-q)))<0.0001 && sum(sum(q))>190

         if count>500,

             episode        % report last episode

             break          % for

         else

             count=count+1; % set counter if deviation of q is small

         end

     else

          q1=q;

          count=0;

     end

     

     if(R(state,x1)==100)

         y=randperm(30);

         state=y(1);

         pause(0.4);

     else

         state=x1;

     end

        delete(A);

        delete(B);

        delete(C);

        delete(D);

 

end

toc

%normalization

g=max(max(q));

if g>0, 

    q=100*q/g;

end


作者:强化学习 来源:强化学习
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment