扫地机器人.zip

  • Liu_Billy
    了解作者
  • matlab
    开发工具
  • 1.4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2022-01-07 14:14
    上传日期
内含扫地机器人matlab代码,注释很多,解释清楚。
扫地机器人.zip
  • 扫地机器人
  • Q_Learning.m
    2.3KB
内容介绍
clear; clc; close all; %学习网址:https://blog.csdn.net/qq_35694280/article/details/106446214 % RL implementation on a finite-state clean robot % 设置参数:状态量个数,动作的个数,最大循环数 global state_num state_num = 6; action_num = 2; episode_max = 50; Gama = 0.9; % discout factor Alpha = 0.1; % 学习速率 % 初始化Q值表 Q_table = zeros(state_num, action_num) for i=1:episode_max % 每次训练的初始化 step_counter = 0; S = 0; is_terminal = false; while ~is_terminal % 选择动作,更新状态,更新Q表 A = choose_action(S, Q_table); [S_, R, flag] = get_env_feedback(S, A); % flag 为 撞墙标志位 Q_predict = Q_table(S+1, A); % 根据下一步是否是终点来更新flag参数以及Q值 if S_ ~= state_num - 1 && flag == 0 % 当下的reward加上下一步的discounted Q-value Q_target = R + Gama * max(Q_table(S_+1, :)); %Gama为折扣因子 elseif flag == 1 % 撞墙了,直接终止 break; else % 如果是终点就没有下一步,直接赋值 Q_target = R; is_terminal = true; end Q_table(S+1, A) = Q_table(S+1, A) + Alpha * (Q_target - Q_predict); S = S_; % 更新状态量 step_counter = step_counter + 1; end if S==state_num - 1 % fprintf('%d: Succeed! total step: %d\n', i, step_counter); elseif flag == 1 fprintf('%d: Danger, failed! total step: %d\n', i, step_counter); else fprintf('nothing happened\n'); end end %% Q_table % 选择动作函数 function A = choose_action( S, Q_table ) %CHOOSE_ACTION 此处显示有关此函数的摘要 % greedy policy epsilon = 0.9; a = rand; choices = Q_table(S+1, :); if a>epsilon || ~any(choices) A = floor(2*rand) + 1; else [maximum ,A] = max(choices); end end %% 环境交互反馈函数 function [S_, R, flag] = get_env_feedback(S, A) %GET_ENV_FEEDBACK 此处显示有关此函数的摘要 % 此处显示详细说明 global state_num flag = 0; if A == 2 % 向右移动 if S == state_num - 2 % 下一步即将到达终点 R = 1; S_ = S+1; else R = 0; S_ = S+1; end end if A == 1 % 向左移动 R = 0; if S == 0 % 撞墙了 S_ = S; flag = 1; else S_ = S-1; end end end
评论
    相关推荐