• 基于matlab的强化学习QLearning路径规划性能仿真


    目录

    1.算法概述

    2.仿真效果预览

    3.核心MATLAB代码预览

    4.完整MATLAB程序


    1.算法概述

           假设我们的行为准则已经学习好了, 现在我们处于状态s1, 我在写作业, 我有两个行为 a1, a2, 分别是看电视和写作业, 根据我的经验, 在这种 s1 状态下, a2 写作业 带来的潜在奖励要比 a1 看电视高, 这里的潜在奖励我们可以用一个有关于 s 和 a 的 Q 表格代替, 在我的记忆Q表格中, Q(s1, a1)=-2 要小于 Q(s1, a2)=1, 所以我们判断要选择 a2 作为下一个行为. 现在我们的状态更新成 s2 , 我们还是有两个同样的选择, 重复上面的过程, 在行为准则Q 表中寻找 Q(s2, a1) Q(s2, a2) 的值, 并比较他们的大小, 选取较大的一个. 接着根据 a2 我们到达 s3 并在此重复上面的决策过程. Q learning 的方法也就是这样决策的. 看完决策, 我看在来研究一下这张行为准则 Q 表是通过什么样的方式更改, 提升的.

           Q-Learning​它是强化学习中的一种 values-based 算法,​是以QTable表格形式体现​,在学习中遇到的任何操作存入QTable中,根据之前的学习选择当前最优操作,也可以根据设置的e_greedy机率随机选择。​

           ​Q-Learning的QTable标签更新公式:
      

    Q-Learning的计算步骤:​

    ​1.判断在当前位置可以有几种操作;​

    ​2.根据当前位置允许的操作选择一个操作;​

    ​3.根据选择的操作进行奖赏;​

    ​4.修改当前行为的本次操作权重;

    2.仿真效果预览

    matlab2022a仿真测试如下:

     

    3.核心MATLAB代码预览

    1. NNPolicy=zeros(prod([driver_actions Xscale Yscale]),1);
    2. for i=1:pathtimes
    3. i
    4. Positions = stpt;
    5. drivers = 0; %开车
    6. E = zeros(prod([driver_actions Xscale Yscale]),1);
    7. for j=1:maxiter
    8. %计算训练驾驶策略
    9. if j>=2
    10. Choice = ndi2lin([1 Positions(1) Positions(2)],[driver_actions Xscale Yscale]);
    11. Choice2 = ndi2lin([drivers Prestate(1) Prestate(2)],[driver_actions Xscale Yscale]);
    12. delta = feedback + cb*max(NNPolicy(Choice:Choice+driver_actions-1))-NNPolicy(Choice2);
    13. E(Choice2) = 1;
    14. NNPolicy = NNPolicy + ca*delta*E;
    15. E = cb*lambda*E*~exploring;
    16. end
    17. %选择动作
    18. Choice = ndi2lin([1 Positions(1) Positions(2)],[driver_actions Xscale Yscale]);
    19. Choice = [Choice:Choice+driver_actions-1];
    20. tmps = find(NNPolicy(Choice) == max(NNPolicy(Choice)));
    21. %是否转向
    22. drivers = tmps(ceil(rand * length(tmps)));
    23. %探索策略
    24. if rand<LR
    25. drivers=floor(rand*driver_actions)+1;
    26. exploring = 1;
    27. else
    28. exploring = 0;
    29. end
    30. LR=LR/pathtimes;
    31. Prestate=Positions;
    32. [Positions,feedback] = nomancar(Positions,drivers,driver_direction,map_route,Xscale,Yscale);
    33. if edpt(1)==Positions(1) & edpt(2)==Positions(2)
    34. break
    35. end
    36. end
    37. Itertion_times(k)=j;
    38. if k>32
    39. Error(k)=mean(Itertion_times(length(Itertion_times)-32+1:length(Itertion_times)));
    40. else
    41. Error(k)=mean(Itertion_times(1:length(Itertion_times)));
    42. end
    43. k=k+1;
    44. end
    45. A_005

    4.完整MATLAB程序

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    day41 jdk8新特性Stream流 数据库安装
    leetcode每日刷题
    maven 添加 checkstyle 插件约束代码规范
    【Java第29期】:Tomcat的安装和使用
    Linux学习-数组-一维数组
    【PDN仿真笔记4-电容布局仿真及结果分析】
    Spring(bean的生命周期)
    MATLAB - 用命令行设计 MPC 控制器
    mongodb——原理简介,docker单机部署
    Linux系统编程_进程:C程序空间分配、fork、wait、exec、system、popen
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/127892657