强化深度学习中利用时序差分法确定扫地机器人问题的最优解(附源码 超详细必看)

简介: 强化深度学习中利用时序差分法确定扫地机器人问题的最优解(附源码 超详细必看)

运行有问题或需要源码请点赞关注收藏后评论区留下QQ~~~

一、时序差分预测

时序差分法(TD)TD方法将DP的自举性和MC的采样性相结合,学习时间间隔产生的差分数据,并通过迭代更新来求解未知环境模型的MDP问题

在时序差分预测中,每前进一步或N步,就可以直接计算状态值函数,接下来我们讨论单步情况TD(0)下的时序差分算法

TD(0)算法适用于小批量状态的更新方法,其中0表示向前行动一步,它的核心思想是向前行动一步后,使用得到的立即奖赏和下一状态的状态值函数的估计值来进行更新,这也是TD0被称为单步TD算法的原因

表格型TD(0)算法如下

二、时序差分控制

TD控制算法和MC控制算法一样,都遵循GPI,且评估的目标都是状态-动作对的最优动作值函数,为了平衡探索与利用,TD控制算法分为基于策略迭代的同策略Sarsa算法和基于值迭代的异策略Q-Learning算法,它们两个算法都属于TD(0)算法 它们的收敛性同样遵循MC增量式中的随机近似条件

三、扫地机器人实战

使用Sarsa算法解决确定环境扫地机器人的问题,将动作值函数设置为24×4的二维数组,这样当Sarsa算法使用具有贪心性质的策略时也会逐渐变得贪心。

运行结果可以看到,当迭代到20000个情节时,迭代已经收敛。

扫地机器人环境的搭建以及背景条件可参考如下链接

扫地机器人简介

开始迭代时

迭代完成后输出如下

代码如下

from 扫地机器人gym环境 import GridWorldEnv
import numpy as np
np.random.seed(1)
env = GridWorldEnv()
#有效动作空间
def vilid_action_space(s):
    action_sacpe = []
    if s % 5 != 0:#左
        action_sacpe.append(0)
    if s % 5 != 4:#右
        action_sacpe.append(1)
    if s <= 19:#上
        action_sacpe.append(2)
    if s >= 5:#下
        action_sacpe.append(3)
    return action_sacpe
def policy_epsilon_greedy(s, Q, epsilon):#ε贪心策略
    Q_s = Q[s]
    action = vilid_action_space(s)
    if np.random.rand() < epsilon:
        a = np.random.choice(action)
    else:
        index_a = np.argmax([Q_s[i] for i in action])
        a = action[index_a]
    return a
def print_dd(s, a, next_s, next_a, print_len, episode_i, Q,e_k,a_k):
    for i in range(1):  
        if episode_i == int(print_len * (0.1 * i + 1)):
            if s == 21 and a == 1 and next_s == 22 and next_a == 1:
                print("*********************************单步的计算过程**************************************")
                print("alpha:"+str(a_k))
                print("epsilon:"+str(e_k))
                print("state:" + str(int(print_len * (0.1 * i + 1))))
                print(Q[s][a])
                print(Q[next_s][a])
                print("update:"+str(Q[s, a] + a_k * (0.8 * Q[next_s, next_a] - Q[s, a])))
                print("************************************************************************************")
def trans(Q_S):#因为环境中动作顺序是左右上下,文章建模的动作顺序是上下左右,所以转换为文章中的顺序(上下左右)进行输出,并保存3位小数
    new_Q = []
    new_Q.append(round(Q_S[2],3))
    new_Q.append(round(Q_S[3],3))
    new_Q.append(round(Q_S[0],3))
    new_Q.append(round(Q_S[1],3))
    return new_Q
def print_ff(list_q, Q, episode_i,epsilon_k,alpha_k):
    list_s = range(0,25)  
    for em in list_q:
        if em == episode_i:
            print("*******************************情节数:%s*******************************"%(str(em)))
            for state in list_s:
                print("Q(%d,*) "%(state) + str(trans(Q[state])))
                action = vilid_action_space(state)
                len_a = len(action)
                e_p = epsilon_k / float(len_a)
                prob = []
                index_a = np.argmax([Q[state][i] for i in action])
                for i in range(4):#计算epsilon
                    if i not in action:
                        prob.append(0.0)
                    else:
                        if i == action[index_a]:
                            prob.append(1 - epsilon_k + e_p)
                        else:
                            prob.append(e_p)
                print('概率值:' + str(trans(prob)))
                print("epsilon_k: {}".format(epsilon_k))
                print("alpha_k:{}".format(alpha_k))
def Attenuation(epsilon,alpha,episode_sum,episode):#epsilon和alpha衰减函数
    epsilon = (float(episode_sum) - float(episode)) / float(episode_sum) * epsilon
    alpha = (float(episode_sum) - float(episode)) / float(episode_sum) * alpha
    return epsilon, alpha
tate
        epsilon_k, alpha_k = Attenuation(epsilon,alpha,episode_num,episode_i)
        A = policy_epsilon_greedy(S, Q, epsilon_k)
        done = False
        print_ff(list_q,Q,episode_i,epsilon_k,alpha_k)
        while not done:
            next_S, R, done, _ = env.step(A)
            next_A = policy_epsilon_greedy(next_S, Q, epsilon_k)
            print_dd(S,A,next_S,next_A,3000,episode_i,Q,epsilon_k,alpha_k)
            Q[S, A] = Q[S,

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
4月前
|
机器人 API
KumiaoQQ机器人框架源码
酷喵机器人框架基于PC协议与MGCH的结合,MGCH即 MiraiGO-CQhttp(代码类型:易语言)基本的API功能已经实现,具体可自测(教程/日志/说明文本已附带)开放源码仅供参考学习交流,切勿非法使用,后果自负!(搞灰黑产的请绕道)本QQrobot框架不签订AGPL协议但遵守Mirai/MiraiGO-CQhttp的AGPL协议。
48 5
KumiaoQQ机器人框架源码
|
9天前
|
机器学习/深度学习 监控 机器人
量化交易机器人系统开发逻辑策略及源码示例
量化交易机器人是一种通过编程实现自动化交易决策的金融工具。其开发流程包括需求分析、系统设计、开发实现、测试优化、部署上线、风险管理及数据分析。示例中展示了使用Python实现的简单双均线策略,计算交易信号并输出累计收益率。
|
8天前
|
机器学习/深度学习 监控 算法
现货量化交易机器人系统开发策略逻辑及源码示例
现货量化交易机器人系统是一种基于计算机算法和数据分析的自动化交易工具。该系统通过制定交易策略、获取和处理数据、生成交易信号、执行交易操作和控制风险等环节,实现高效、精准的交易决策。系统架构可采用分布式或集中式,以满足不同需求。文中还提供了一个简单的双均线策略Python代码示例。
|
3天前
|
机器人 人机交互 语音技术
智能电销机器人源码部署安装好后怎么运行
销售打电销,其中90%电销都是无效的,都是不接,不要等被浪费了这些的精力,都属于忙于筛选意向客户,大量的人工时间都耗费在此了。那么,有这种新型的科技产品,能为你替代这些基本的工作,能为你提升10倍的电销效果。人们都在关心智能语音客服机器人如何高效率工作的问题,今天就为大家简单的介绍下:1、智能筛选系统:电销机器人目前已经达到一个真人式的专家级的销售沟通水平,可以跟客户沟通,筛选意向,记录语音和文字通话记录,快速帮助电销企业筛选意向客户,大大的节约了筛选时间成本和人工成本。2、高速运转:在工作效率上,人工电销员,肯定跟不上智能语音机器人,机器人自动拨出电话,跟客户交谈。电话机
65 0
|
1月前
|
传感器 IDE 机器人
基于Arduino的扫地机器人
基于Arduino的扫地机器人
43 1
|
1月前
|
机器学习/深度学习 传感器 算法
深度学习之基于视觉的机器人导航
基于深度学习的视觉机器人导航是一种通过深度学习算法结合视觉感知系统(如摄像头、LiDAR等)实现机器人在复杂环境中的自主导航的技术。
46 5
|
1月前
|
机器人
lanqiao OJ 199 扫地机器人
lanqiao OJ 199 扫地机器人
14 0
|
3月前
|
机器学习/深度学习 算法 机器人
使用Python实现深度学习模型:智能灾害响应与救援机器人
使用Python实现深度学习模型:智能灾害响应与救援机器人
77 16
|
4月前
|
机器学习/深度学习 自然语言处理 机器人
基于深度学习的智能语音机器人交互系统设计方案
**摘要** 本项目旨在设计和实现一套基于深度学习的智能语音机器人交互系统,该系统能够准确识别和理解用户的语音指令,提供快速响应,并注重安全性和用户友好性。系统采用分层架构,包括用户层、应用层、服务层和数据层,涉及语音识别、自然语言处理和语音合成等关键技术。深度学习模型,如RNN和LSTM,用于提升识别准确率,微服务架构和云计算技术确保系统的高效性和可扩展性。系统流程涵盖用户注册、语音数据采集、识别、处理和反馈。预期效果是高识别准确率、高效处理和良好的用户体验。未来计划包括系统性能优化和更多应用场景的探索,目标是打造一个适用于智能家居、医疗健康、教育培训等多个领域的智能语音交互解决方案。
|
5月前
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测

热门文章

最新文章