【深度强化学习】神经网络、爬山法优化控制倒立摆问题实战(附源码)

简介: 【深度强化学习】神经网络、爬山法优化控制倒立摆问题实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

直接优化策略

直接优化策略强化学习算法中,根据采用的是确定性策略还是随机性策略,又分为确定性策略搜索和随机性策略搜索两类。随机性策略搜索算法有策略梯度法和TRPO等,确定性策略搜索算法有DDPG等。

策略可以看作是从状态空间S到动作空间A的映射:S→A

直接优化策略的方法可采用与值函数逼近相似的思路,即先确定逼近策略的结构,再优化结构的参数。

下面分别用神经元和神经网络作为逼近策略的结构,来控制倒立摆实验中小车的运动,分别通过爬山法和梯度下降法来优化他们的系数

启发式算法直接优化策略控制倒立摆

用随机的连接系数和阈值的神经元来参数化策略

结果如下

爬山法优化神经元的连接系数和阈值

爬山法的思路是在当前位置试探周边,并一直向最好的方向前进,但是容易陷入局部最优点

用神经网络来参数化策略

该神经网络只有一个隐层,该隐层的神经元个数为10,采用ReLU激活函数,输出层采用Sigmoid激活函数

训练结果如下

虽然效果较好,实际上这种从大量尝试得到的轨迹中筛选出少量优质样本的做法,在现实应用中并不容易实现

部分代码如下

delta = 0.01 # 爬山法中试探的步长
top_rewards = 0
top_paras = None
for _ in range(100): # 多次爬山,选取最好的结果
    score = 0
    paras = np.random.rand(5)  # 随机产生神经元的连接系数和阈值
    most_rewards = rewards_by_paras(env, paras)
    for i in range(200):
        best_paras = paras
        cur_rewards = most_rewards
        rewards = rewards_by_paras(env, paras + [ delta, 0, 0, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ delta, 0, 0, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ -delta, 0, 0, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ -delta, 0, 0, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, delta, 0, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, delta, 0, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, -delta, 0, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, -delta, 0, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, delta, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, delta, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, -delta, 0, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, -delta, 0, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, 0, delta, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, 0, delta, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, 0, -delta, 0 ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, 0, -delta, 0 ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, 0, 0, delta ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, 0, 0, delta ]
        rewards = rewards_by_paras(env, paras + [ 0, 0, 0, 0, -delta ])
        if rewards > most_rewards:
            most_rewards = rewards
            best_paras = paras + [ 0, 0, 0, 0, -delta ]
        if (cur_rewards == most_rewards) or (most_rewards >= 200): # 到了山顶,或者已经达到要求
            break
        else:
            paras = best_paras
    #print(most_rewards, paras)
    if most_rewards > top_rewards:
        top_rewards = most_rewards
        top_paras = paras
print(top_rewards, top_paras)

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

相关文章
|
18天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
60 6
|
10天前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
28 1
|
19天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
44 4
|
19天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
39 1
|
20天前
|
网络协议 安全 NoSQL
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
|
20天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
18天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
29 0
|
20天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
6天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全成为了我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和方法来保护自己的信息安全。
19 2
|
7天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第38天】本文将探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术和安全意识等方面。我们将通过代码示例和实际操作来展示如何保护网络和信息安全。无论你是个人用户还是企业,都需要了解这些知识以保护自己的网络安全和信息安全。