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.hqwc.cn/news/293785.html

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

相关文章

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起,越来越多的人开始关注鸿蒙开发,并希望成为鸿蒙开发者。然而,鸿蒙开发并不适合所有人,那么哪些人最适合学习鸿蒙开发呢?本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…

SAP系统标准表之间的关联关系对应

SAP系统标准表之间的关联关系对应

互联网账户一证通查询名下账号

核验身份后一键在线查询名下所有关联号码以及注册。 名下电话卡查询:全国移动电话卡“一证通查” 手机号绑定查询:https://tb3.cn/A3lhMk

明道云引领企业变革与创新

内容来自演讲:周万均 | 成都护园科技有限公司 | 总经理 摘要 本文主要讲述了作者从甲方转变为乙方的角色转变过程中,对明道云的应用和探索。在选择系统时,企业会考虑的一些因素,并强调了团队、时间、成本和沟通等因素在企业数字化…

spring-validation实现分组校验

文章目录 前言实际开发可能会使用到分组校验maven添加依赖简单使用高级应用分组自定义分组组合分组 源码地址 前言 JSR 303中提出了Bean Validation,表示JavaBean的校验,Hibernate Validation是其具体实现,并对其进行了一些扩展,…

SaaS智慧校园云平台源码,智慧班牌系统,家校互联小程序源码

SaaS智慧校园云平台源码,智慧班牌系统,原生小程序 集智慧教学、智慧教务、智慧校务、智慧办公于一体的校园管理平台源码。集成智能硬件及第三方服务,面向学校、教师、家长、学生,将校内外管理、教学等信息资源进行整合&#xff0c…

基于ip地址通过openssl生成自签名证书

最近在配置geo的时候,客户说自己使用的是自签证书,然后是通过ip地址和端口的方式访问gitlab,比较好奇这块,因此对证书的生成和使用做了一些整理,对此网上关于这部分资料也很多,不过作为记录,也算…

【扩散模型】6、Classifier-Free Diffusion Guidance | 无需显示分类器指导也能获得很好的生成效果

论文:Classifier-Free Diffusion Guidance 代码:暂无 出处:NIPS 2021 workshop(短版本论文) 一、背景 在此之前,classifier guidance (diffusion model beats GAN)模型使用类别引…

3A服务器 (hcia)

原理 认证:验证用户是否可以获得网络访问权。 授权:授权用户可以使用哪些服务。 计费:记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom(认证服务器名字&#xf…

【ICCV2023】MMVP:基于运动矩阵的视频预测

目录 导读 本文方法 步骤1:空间特征提取 步骤2:运动矩阵的构造和预测 步骤3:未来帧的合成和解码 实验 实验结果 消融实验 结论 论文链接:https://openaccess.thecvf.com/content/ICCV2023/html/Zhong_MMVP_Motion-Matrix…

音箱芯片系统案例分析

近年来,音箱市场需求日益增长,其轻便、时尚的外观和无线连接的便捷性深受消费者喜爱。音箱的电路图主要由以下几个部分组成:音频功放芯片 前置信号处理 运算放大器 稳压电源芯片 电平指示 音频功放芯片:D2668,D2025,D8227,D4520…

手机怎么下载python并安装,如何在手机上下载python

大家好,小编来为大家解答以下问题,如何在手机上下载python 3.7版本,手机怎么下载python并安装,现在让我们一起来看看吧! 如何在手机上下载python 应用市场内搜索下载下载Python在您开始之前,在你的计算机将…