10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

LunarLander复现:
07、基于LunarLander登陆器的DQN强化学习案例(含PYTHON工程)

08、基于LunarLander登陆器的DDQN强化学习(含PYTHON工程)

09、基于LunarLander登陆器的Dueling DQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

基于TENSORFLOW2.10

0、实践背景

gym的LunarLander是一个用于强化学习的经典环境。在这个环境中,智能体(agent)需要控制一个航天器在月球表面上着陆。航天器的动作包括向上推进、不进行任何操作、向左推进或向右推进。环境的状态包括航天器的位置、速度、方向、是否接触到地面或月球上空等。

智能体的任务是在一定的时间内通过选择正确的动作使航天器安全着陆,并且尽可能地消耗较少的燃料。如果航天器着陆时速度过快或者与地面碰撞,任务就会失败。智能体需要通过不断地尝试和学习来选择最优的动作序列,以完成这个任务。

下面是训练的结果:
在这里插入图片描述

1、Dueling DDQN的实现原理

Dueling DDQN实际上就是Dueling DQN和DDQN结合,其对应的具体理论参考:

08、基于LunarLander登陆器的DDQN强化学习(含PYTHON工程)

09、基于LunarLander登陆器的Dueling DQN强化学习(含PYTHON工程)

上面文章里面提及,Dueling DQN是在网络结构上进行改进,将原来的动作价值函数Q网络拆为状态函数动作优势函数的和。

而DDQN实在迭代方式上进行改进,在进行贝尔曼方程的迭代求解时,将鸡蛋放在两个篮子里,同时使用Q网络target Q网络对max(Q(s’,a’))进行计算,由此解决了Q函数的高估问题。

因此,两种结合,即可得到Dueling DDQN。

2、Dueling DDQN的实现关键代码

详细的代码各位可以下载后查看,在此只展示最为关键的改动部分,首先是网络的差异:

        if self.model == 'DQN' or self.model == 'Double_DQN':self.q_network = DeepQNetwork(num_actions, input_dims, 256, 256)self.target_q_network = DeepQNetwork(num_actions, input_dims, 256, 256)self.optimizer = Adam(learning_rate=lr)if self.model == 'Dueling_DQN' or self.model == 'Dueling_DDQN':# self.q_network, self.target_q_network = Dueling_DQN(num_actions, input_dims, 256, 256, 256)self.q_network = GenModelDuelingDQN(num_actions, input_dims, 128, 128, 128)self.target_q_network = GenModelDuelingDQN(num_actions, input_dims, 128, 128, 128)self.optimizer = Adam(learning_rate=lr)
def DeepQNetwork(num_actions, input_dims, fc1, fc2):q_net = Sequential([Input(shape=input_dims),  # 输入层,形状由state_size定义Dense(units=fc1, activation='relu'),  # 全连接层,128个单元,使用ReLU激活函数Dense(units=fc2, activation='relu'),  # 全连接层,128个单元,使用ReLU激活函数Dense(units=num_actions, activation='linear'),  # 输出层,单元数由num_actions定义,使用线性激活函数])return q_netdef GenModelDuelingDQN(num_actions, input_dims, fc1, fc2, fc3):# define inputinput_node = tf.keras.Input(shape=input_dims)input_layer = input_node# define state value function(计算状态价值函数)state_value = tf.keras.layers.Dense(fc1, activation='relu')(input_layer)state_value = tf.keras.layers.Dense(1, activation='linear')(state_value)# state value and action value need to have the same shape for adding# 这里是进行统一维度的state_value = tf.keras.layers.Lambda(lambda s: tf.keras.backend.expand_dims(s[:, 0], axis=-1),output_shape=(input_dims,))(state_value)# define acion advantage (行为优势)action_advantage = tf.keras.layers.Dense(fc1, activation='relu')(input_layer)action_advantage = tf.keras.layers.Dense(fc2, activation='relu')(action_advantage)action_advantage = tf.keras.layers.Dense(fc3, activation='relu')(action_advantage)action_advantage = tf.keras.layers.Dense(num_actions, activation='linear')(action_advantage)# See Dueling_DQN Paperaction_advantage = tf.keras.layers.Lambda(lambda a: a[:, :] - tf.keras.backend.mean(a[:, :], keepdims=True),output_shape=(num_actions,))(action_advantage)# 相加Q = tf.keras.layers.add([state_value, action_advantage])# define modelmodel = tf.keras.Model(inputs=input_node, outputs=Q)return model

其次是训练过程迭代的差异:

        if self.model == 'DQN' or self.model == 'Dueling_DQN':# 计算最大的Q^(s,a),reduce_max用于求最大值max_qsa = tf.reduce_max(target_q_network(next_states), axis=-1)# 如果登录完成,设置y = R,否则设置y = R + γ max Q^(s,a)。y_targets = rewards + (gamma * max_qsa * (1 - done_vals))elif self.model == 'Double_DQN' or self.model == 'Dueling_DDQN':next_action = np.argmax(q_values, axis=1)# tf.range(q_values.shape[0]构建0-batch_size的数组,next_action是q_network得出的动作,两者组合成二维数组# 从target_q_network(next_states)输出的batch_size*action dim个数组中取数Q2 = tf.gather_nd(target_q_network(next_states),tf.stack([tf.range(q_values.shape[0]), tf.cast(next_action, tf.int32)], axis=1))y_targets = rewards + (gamma * Q2 * (1 - done_vals))

3、Dueling DDQN的实现效果

LunarLander环境下,使用Dueling DDQN并没有带来特别大的性能改善:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划算法(dp算法)】之背包问题

文章目录 背包问题动规五部曲一、0-1背包问题 :限制物品不可重复 (要么不选 要么选一个)二、完全背包问题:不限制重复(要么不选 要么可以多选)(完全背包可以转化为0-1背包问题) 动态规划:01背包…

使用OpenCV4实现工业缺陷检测的六种方法

目录 1 机器视觉2 缺陷检测3 工业上常见缺陷检测方法 1 机器视觉 机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,…

企业数据治理:(1)概述

目录 确定数据治理的规范与标准 设立与数据治理规范和标准相匹配的组织架构 明确数据治理的范围 制定切实可行的治理目标与实施计划 数据治理是企业IT系统建设当中的重要组成部分,是一种综合性的方法和实践,目的在确保数据的完整性、准确性和一致性。…

部署tomcat单机多实例,keepalived+mysql的互为主从高可用,mysql+keepalived高可用

部署tomcat单机多实例 在Tomcat中部署单机多实例是一种常见的做法,它允许您在同一台服务器上运行多个独立的Tomcat实例,每个实例都有自己的配置、日志和应用程序。 安装jdk环境 首先配置java环境 [roottomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz…

nodejs+vue+ElementUi会员制停车场车位系统

总之,智能停车系统使停车场管理工作规范化,系统化,程序化,避免停车场管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改停车场情况。 三、任务:小组任务和个人任务 智…

旅游海报图怎么做二维码展示?扫码即可查看图片

现在旅游攻略的海报可以做成二维码印刷在宣传单单页或者分享给用户来了解目的地的实际情况,出行路线、宣传海报等。用户只需要扫描二维码就可以查看内容,更加的方便省劲,那么旅游海报的图片二维码制作的技巧有哪些呢?使用图片二维…

2015年第四届数学建模国际赛小美赛A题飞机上的细长座椅解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 A题 飞机上的细长座椅 原题再现: 航空公司座位是指在旅途中乘客可以乘坐的座位。一些航空公司现在推出了新的经济舱“超薄”座位。这些座椅除了重量较轻外,理论上还允许航空公司在不显著影响乘客舒适度的情况下增加运…

STL中优先队列的模拟实现与仿函数的介绍

文章目录 仿函数优先队列的模拟实现 仿函数 上回我们说到,优先队列的实现需要用到仿函数的特性 让我们再回到这里 这里我们发现他传入的用于比较的东西竟然是一个类模板,而不是我们所见到的函数 我们可以先创建一个类,用于比较大小 struc…

陶建辉在 CIAS 2023 谈“新能源汽车的数字化”

近年,中国的新能源汽车发展迅猛,在全球竞争中表现出色,已经连续 8 年保持全球销量第一。在新兴技术的推动下,新能源汽车的数字化转型也正在加速进行,从汽车制造到能源利用、人机交互,各个环节都在进行数字化…

RobotMaster学习——工序导入,参数设置,轨迹生成

目录 引出1.导入工序2.修改刀具其他刀具参数 3.进行工序分配4.设置TCP5.设置工作站6.工序整体导入配置7.进行计算 总结 引出 RobotMaster的操作流程,从导入工序到生产轨迹。 1.导入工序 2.修改刀具 要选择第七把刀具 其他刀具参数 第一把刀具 第二把刀具 第三把刀…

C语言的分支和循环语句

各位少年,今天和大家分享的是分支语句循环体语句,C语言是结构体的程序设计语言,这里的结构指的是(顺序结构)(选择结构)(循环结构)C语言是能够实现这三种结构的&#xff0…

作为程序员,你知道 Notion 吗?

Notion 是一款极其出色的个人笔记软件,它将“万物皆对象”的思维运用到笔记中,让使用者可以天马行空地去创造、拖拽、链接。也适用于康奈尔笔记法哦。 不知大家会不会有如下烦恼: 1.当你下载了许多 APP,也注册了许多账号&#x…

Prometheus-JVM

一. JVM监控 通过 jmx_exporter 启动端口来实现JVM的监控 Github Kubernetes Deployment Java 服务,修改 wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar# 编写配置文件&#xff0…

Nacos单机安装

采用的版本是Nacos Release 2.3.0 (Nov 30, 2023) alibaba/nacos GitHub 依赖于jdk,要先安装好jdk1.8。 修改配置 下载解压后,修改配置文件:conf/application.properties。 nacos.core.auth.plugin.nacos.token.secret.key 官方文档Na…

【SVN】centos7搭建svn--亲测能通

centos7.6搭建svn 1 知识小课堂1.1 CentOS1.2 SVN 2 搭建过程2.1 前期准备2.2 通过yum命令安装svnserve2.3 创建版本库目录2.4 创建svn版本库2.5 配置修改2.5 防火墙配置2.6 启动或关闭svn服务器2.6.1 进程守护2.6.2 检测svn端口3690是否已经监听:2.6.3 关闭SVN 2.7…

随机森林 2(决策树)

通过 随机森林 1 的介绍,相信大家对随机森林都有了一个初步的认知,知道了随机和森林分别指的是什么,以及决策树根据什么选择内部节点。本文将会从森林深入到树,去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

Linux常用基本命令(三)

一、显示命令 1. cat 通式:cat 选项 文件名 只能看普通的文本文件 缺点:如果内容过多会显示不全 选项效果-n显示行号包括空行-b跳过空白行编号-s讲所有的连续的多个空行替换为一个空行(压缩成一个空行)-A显示隐藏字符 三个标准文件…

【XR806开发板试用】通过http请求从心知天气网获取天气预报信息

1. 开发环境搭建 本次评测开发环境搭建在windows11的WSL2的Ubuntu20.04中,关于windows安装WSL2可以参考文章: Windows下安装Linux(Ubuntu20.04)子系统(WSL) (1) 在WSL的Ubuntu20.04下安装必要的工具的. 安装git: sudo apt-get install git …

【UML】第9篇 类图(概念、作用和抽象类)(1/3)

目录 一、类图的概念 二、类图的主要作用 三、类图的构成 3.1 类的名称 3.2 抽象类(Abstract Class) 一、类图的概念 类图是UML模型中静态视图。它用来描述系统中的有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等。静态视…

服务器数据恢复-误操作导致xfs分区数据丢失的数据恢复案例

服务器数据恢复环境: 某品牌OceanStorT系列某型号存储MD1200磁盘柜,组建的raid5磁盘阵列。上层分配了1个lun,安装的linux操作系统,划分两个分区,分区一通过lvm进行扩容,分区二格式化为xfs文件系统。 服务器…