我是靠谱客的博主 精明西装,最近开发中收集的这篇文章主要介绍Qlearning matlab实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

地图为下表所示,其中s1为起始地址,s7为终止地址。S8和S9认为是陷阱所在地,进去算输。

action说明1、2、3分别代表左、下、右。

地图
S1S2S9
S8S3S6
S4S5S7

首先附一张其伪代码(复制于知乎),以及个人理解的翻译。如有错误还请指正。

 

 

%R表 表示在某一个状态下采取不同动作获得的奖励,如R[1 ][1 ]为在s1采取往左的奖励
% R=[-1000 -100 0;-5 0 -100;-100 0 0;-1000 -1000 0;-5 -1000 100;-5 100 -1000;0 -1000 -1000;-1000 0 0 ;0 0 -1000];
%状态切换表,从一个状态执行action,切换到另外一个状态映射表,行是state,列是action
%S[1][1]表示在1状态执行1(向左)以后到达状态1(因为左边是墙,左边走不通)
S = [1 8 2;1 3 9;8 5 6;4 4 5;4 5 7;3 7 6;5 7 7 ;8 4 3;2 6 9];
%Q表
Q = zeros(9,3);
gamma = 0.9;
alpha = 0.9;
 
cnt = 0;
epoch = 10000;
done = false;
action = 0;
state = 1;
reward = 0;
rt = 0;
road = [1];%构建一个数组存放路径,1表示默认位置,s1
as = 0;
while cnt<epoch
    state = 1;
    done = false;
    while ~done
        %贪心算法,确保不会一直按照已知的路走,有10%概率探索未知的方法
        if rand()<0.9
            [rt,action] = max(Q(state,:));
            %当已知的路径有多条时随机选择一条
            verify = find(Q(state,:) == rt);
            if length(verify) >1
                action = verify(randi([1,length(verify)]));
            end
            as = 1;
        else
            %随机去探索
            action = randi([1,3]);
            as = 2;
        end
        %fprintf("state = %d,actoin = %d,as = %dn",state,action,as);
        reward = reward + Q(state,action);
        %执行action切换到新的state
        state_new = S(state,action);
        %更新Q表
        Q(state,action) = Q(state,action) + alpha*(R(state,action)+gamma*max(Q(state_new,:))-Q(state,action));
%         将迭代state切换到新的状态
        state = state_new;
        %记录走过的路径
        road(end+1) = state;
        %7是成功,8,9是失败,均结束
        if state == 7 || state ==8 ||state == 9
            done = true;
        end
    end
    cnt = cnt + 1;
    %fprintf("cnt = %d nreward = %dn Q = n",cnt,reward);
    %fprintf("road = n"); 
    disp(road);
    road = [1];%清空当前路径,开始下一次迭代
    reward = 0;
    %disp(Q)
   
end
 

最后输出: 

路径基本是12357和12367,因为有一定概率随机探索,所以会有掉进陷阱的。训练完毕就可以拿着Q去走了,不用其他的操作了。

最后

以上就是精明西装为你收集整理的Qlearning matlab实现的全部内容,希望文章能够帮你解决Qlearning matlab实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部