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

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

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

直接优化策略

直接优化策略强化学习算法中,根据采用的是确定性策略还是随机性策略,又分为确定性策略搜索和随机性策略搜索两类。随机性策略搜索算法有策略梯度法和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)

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

相关文章
|
8天前
|
监控 安全 物联网
网络安全与信息安全:防护之道与实战策略
【4月更文挑战第23天】在数字化时代,数据成为了新的货币,而网络安全则是保护这些“货币”的金库。本文将深入探讨网络安全漏洞的概念、加密技术的进展以及提升个人和企业的安全意识的重要性。通过分析当前的威胁景观,我们分享了一系列的防御措施和最佳实践,目的是为读者提供一套全面的信息安全防护框架。
|
4天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
1天前
|
存储 SQL 安全
网络安全与信息安全:防护之道与实战策略
【4月更文挑战第29天】 在数字化时代,数据成为了新的货币,而网络安全则是保护这些宝贵资产的保险箱。面对日益猖獗的网络攻击和安全威胁,仅有基础防御已远远不够。本文将深入探讨网络安全漏洞的形成机制与检测方法,加密技术的进展与应用,以及提升个人与企业的安全意识的有效途径。通过对当前网络环境的分析及最新技术的介绍,旨在为读者提供一系列切实可行的安全策略,以增强信息资产的防护力。
|
2天前
|
SQL 安全 物联网
网络安全与信息安全:防护之道与实战策略
【4月更文挑战第29天】在数字化时代,网络安全与信息安全已成为维护个人隐私、企业数据和国家安全的关键。本文深入探讨了网络安全漏洞的成因、加密技术的最新发展以及提升安全意识的重要性,旨在为读者提供一个全面的安全防护知识框架。通过对常见网络攻击手段的分析,我们展示了如何运用现代加密技术和多层防御策略来防范潜在威胁。同时,文章还强调了培养良好的安全习惯和持续教育的必要性,以构建更为坚固的网络安全防线。
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:防护之道与实战策略
【4月更文挑战第29天】 在数字化时代,数据成为了新的货币,而网络空间则转变为了战场。本文章深入剖析了网络安全的核心问题——漏洞挖掘、防御机制以及加密技术,并结合当前的安全态势提出了一系列提升个人和企业安全意识的策略。通过分析最新的攻防案例,本文旨在为读者提供一个关于如何有效识别、防御和应对网络威胁的全景式指南。
|
2天前
|
安全 算法 网络安全
网络安全与信息安全:防护之道与实战策略
【4月更文挑战第28天】在数字化时代,网络安全与信息安全已成为维护社会稳定、保护个人隐私和企业资产的关键。本文深入探讨了网络安全漏洞的成因与危害,加密技术的最新进展,以及提升安全意识的有效方法。通过分析当前网络威胁的多样性和复杂性,文章提出了一系列切实可行的防御措施,并强调了持续教育和技术创新在构建坚固防线中的重要性。
|
3天前
|
网络协议 安全 网络安全
|
5天前
|
机器学习/深度学习 测试技术 TensorFlow
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
10 1
|
7天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
10天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。

热门文章

最新文章