强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)
网上找到的一个实现:
地址:
https://gist.github.com/HenryJia/23db12d61546054aa43f8dc587d9dc2c
稍微修改后的代码:
import numpy as np
import gym
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
env = gym.make('CartPole-v1')
desired_state = np.array([0, 0, 0, 0])
desired_mask = np.array([0, 0, 1, 0])
P, I, D = 0.1, 0.01, 0.5 ###
N_episodes = 10
N_steps = 50000
for i_episode in range(N_episodes):
state, _ = env.reset()
integral = 0
derivative = 0
prev_error = 0
for t in range(N_steps):
# print(f"step: {t}")
env.render()
error = state - desired_state
integral += error
derivative = error - prev_error
prev_error = error
pid = np.dot(P * error + I * integral + D * derivative, desired_mask)
action = sigmoid(pid)
action = np.round(action).astype(np.int32)
# print(P * error + I * integral + D * derivative, pid, action)
# print(state, action, )
state, reward, done, info, _ = env.step(action)
if done or t==N_steps-1:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
运行效果:

这个表现是极为神奇的,如果不考虑泛化性的话,不考虑使用AI算法和机器学习算法的话,那么不使用强化学习和遗传算法以外的算法,那么使用自动化的算法或许也是不错的选择,并且从这个表现来看这个效果远比使用AI类的算法表现好。
上面的这个代码只考虑小车平衡杆的角度与0的偏差,就可以获得如此高的表现。
根据原地址的讨论:
https://gist.github.com/HenryJia/23db12d61546054aa43f8dc587d9dc2c

我们可以知道,如果通过调整PID算法的系数,那么可以获得更为优秀的性能表现,为此我们修改代码如下:
点击查看代码
import numpy as np
import gym
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
env = gym.make('CartPole-v1')
desired_state = np.array([0, 0, 0, 0])
# desired_mask = np.array([0, 0, 1, 0])
desired_mask = np.array([1, 1, 1, 1])
# P, I, D = 0.1, 0.01, 0.5 ###
P, I, D = [1/150, 1/950, 0.1, 0.01], [0.0005, 0.001, 0.01, 0.0001], [0.2, 0.0001, 0.5, 0.005]
N_episodes = 10
N_steps = 1000000
for i_episode in range(N_episodes):
state, _ = env.reset()
integral = 0
derivative = 0
prev_error = 0
for t in range(N_steps):
# print(f"step: {t}")
env.render()
error = state - desired_state
integral += error
derivative = error - prev_error
prev_error = error
pid = np.dot(P * error + I * integral + D * derivative, desired_mask)
action = sigmoid(pid)
action = np.round(action).astype(np.int32)
# print(P * error + I * integral + D * derivative, pid, action)
# print(state, action, )
state, reward, done, info, _ = env.step(action)
if done or t==N_steps-1:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
性能表现:

根据这个PID的系数来运行gym下的cartpole游戏,可以认为这个游泳永远不会终止,因为这里我们已经将运行长度设置为100万步。
PS:
需要注意的是PID算法的这个P,I,D系数才是影响算法的关键,而如何获得这个系数也是一个极为难的问题,很多时候是需要使用试错的方法来进行的,可以说有的P,I,D系数可以运行几十步,有的可以运行几百步或几千步,而下面的系数却可以运行上百万步,甚至是永远一直运行,可以说这种PID系数的求解才是真正的关键。
P, I, D = [1/150, 1/950, 0.1, 0.01], [0.0005, 0.001, 0.01, 0.0001], [0.2, 0.0001, 0.5, 0.005]
强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)的更多相关文章
- tp5依赖注入(自动实例化):解决了像类中的方法传对象的问题
app\index\Demo1.php namespace app\index\controller; /* 容器与依赖注入的原理 ----------------------------- 1.任何 ...
- swift 学习之自动引用计数
swift 学习之自动引用计数 学习和研究的主要是"实例对象和实例对象直接的相会强引用所产生的内从泄漏"和"使用闭包产生的强引用造成的内存泄漏" 注意:只有以引 ...
- 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践
https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...
- [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践
转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...
- 【RS】Automatic recommendation technology for learning resources with convolutional neural network - 基于卷积神经网络的学习资源自动推荐技术
[论文标题]Automatic recommendation technology for learning resources with convolutional neural network ( ...
- MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法 1 问题 [root@localhost m ...
- Eclipse没法自动补全代码解决
Eclipse没法自动补全代码解决 Eclipse无法自动补全代码解决 Window->Java->Editor->Content Assist->Advanced
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- powerdesigner 不能自动生成注释的解决方法
解决power designer 不能自动生成注释的解决办法只需要3步: 一.快捷键 Alt+Shift+X 打开脚本编辑器: 二.将下面天蓝色的字体脚本添加到脚本编辑器里面: Option Expl ...
- Win10电脑经常自动掉线、自动断网的解决方法
近期一客户称自己使用电脑上网的时候,过一段时间莫名其妙的出现自动掉线.自动断网的情况,那么遇到这个问题该怎么办?下面装机之家分享一下Win10电脑经常自动掉线.自动断网的解决方法,以Win7系统为例. ...
随机推荐
- 深入理解Linux进程调度(下)
一.SMP管理 在继续讲解之前,我们先来说一下多CPU管理(这里的CPU是指逻辑CPU,在很多语境中CPU都是默认指的逻辑CPU,物理CPU要特别强调是物理CPU).最开始的时候计算机都是单CPU的, ...
- Android Perfetto 系列 2:Perfetto Trace 抓取
使用 Perfetto 分析问题跟使用 Systrace 分析问题的步骤是一样的: 首先你需要抓取 Perfetto 文件 在ui.perfetto.dev 中打开 Trace 文件进行分析或者使用命 ...
- 墨天轮PostgreSQL精品学习资源合集(含基础手册、实操技巧&案例、书籍推荐)
近日,PostgreSQL 15 的第一个 beta 版本发布,这一最新版本在开发者体验.性能表现等方面都有提升.从最新的DB-Engines排名可以发现,PostgreSQL近十年来得分一路高涨,目 ...
- 嘟嘟牛在线登陆加密分析-RPC调用
加密参数 JADX反编译后搜索代码 user/login 基本可以确定就是从这里发起网络请求 跟进 addRequestMap 方法分析 这一看逻辑就清晰了 先添加一个时间戳,在对sign进行加密后在 ...
- Vnode 是什么 ,什么是虚拟DOM ?
Vnode 是 JavaScript 对象,就是把标签结构的信息描述成js对象 : Vnode 的作用:通过 render 函数 将 template 描述成 Vnode ,然后通过一系列操作转换真实 ...
- NJU ICS2024 PA 作业心得(一)
NJU ICS2024 PA 作业心得(一) 由于自己并不是NJU 2024的学生,因此"堂而皇之"的把这份心得发在了网上,并且只是仅供非以此课程作为自己当前学年保研课的同学参考. ...
- 云原生周刊:一条 Kubernetes 命令引发的悲剧
开源项目 KSail 用于在 Docker 中配置支持 GitOps 的 K8s 集群的 CLI 工具. nginx-gateway-fabric NGINX Gateway Fabric 是一个开源 ...
- 等保测评FAQ
之前写过一篇关于等保测评的相关介绍<一起聊聊等保测评>,发现大家对于等保测评这个还是很关注的,有些人问等保测评这份工工作的,也有些人问关于等保测评一些指导意见的,这篇文章我想把大家的问题来 ...
- 入门级别 Nginx 常用配置清单
本文为转发文章,转发来自"https://mp.weixin.qq.com/s/ipUHaFPcDfIM9MsyqDGSEg",觉得不错分享给大家 Nginx 是一个高性能的 HT ...
- GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
本文主要分享在不同环境,例如裸机.Docker 和 Kubernetes 等环境中如何使用 GPU. 跳转阅读原文:GPU 环境搭建指南:如何在裸机.Docker.K8s 等环境中使用 GPU 1. ...