首页 > 其他分享 >强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)

强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)

时间:2024-12-22 21:43:43浏览次数:3  
标签:cartpole desired 平衡杆 action state env error np 强化

网上找到的一个实现:


地址:

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()

运行效果:

image

这个表现是极为神奇的,如果不考虑泛化性的话,不考虑使用AI算法和机器学习算法的话,那么不使用强化学习和遗传算法以外的算法,那么使用自动化的算法或许也是不错的选择,并且从这个表现来看这个效果远比使用AI类的算法表现好。

上面的这个代码只考虑小车平衡杆的角度与0的偏差,就可以获得如此高的表现。



根据原地址的讨论:

https://gist.github.com/HenryJia/23db12d61546054aa43f8dc587d9dc2c

image

我们可以知道,如果通过调整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()

性能表现:

image


根据这个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]



标签:cartpole,desired,平衡杆,action,state,env,error,np,强化
From: https://www.cnblogs.com/xyz/p/18622600

相关文章

  • 很全面的国内外著名强化学习研究小组总结
    原文地址:http://deeprl.neurondance.com/d/154美国Stanford:BenjaminVanRoy(摘自http://deeprl.neurondance.com/d/154)伯克利:SergeyLevine(论文高产作者)、PieterAbbel(和Levine并列)(摘自http://deeprl.neurondance.com/d/154)非美国外UCL:DavidSliver(目前好像不指......
  • 强化学习SQL算法(soft q leanring)中的squash_correction是否存疑?
    SQL算法的官方实现地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning提两个问题:SQL算法的原始论文中在计算Qlossfunction的时候建议使用重要性采样,而实际代码中却使用的是均匀采样,同时也没有采样重要性采样的方法进行修正,而原始论文中在这一步的推导公式......
  • 强化学习SQL算法(soft q learning)—— SVGD的实现(Stein Variational Gradient Descent:
    代码实现地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning/src/branch/master/softlearning/misc/kernel.pyfromdistutils.versionimportLooseVersionimportnumpyasnpimporttensorflowastfdefadaptive_isotropic_gaussian_kernel(xs,ys,h_min......
  • 强化学习算法中的log_det_jacobian —— 概率分布的仿射变换(Bijector)(续)
    前文:强化学习算法中的log_det_jacobian——概率分布的仿射变换(Bijector)前文说到概率分布的仿射变换(Bijector)在贝叶斯、变分推断等领域有很重要的作用,但是在强化学习中呢,其实在强化学习中也会用到,但是最为普遍的应用场景其实只是做简单的tanh变换。在强化学习中一般用高斯分......
  • 强化学习算法中的log_det_jacobian
    相关:https://colab.research.google.com/github/google/brax/blob/main/notebooks/training_torch.ipynb之前写过一篇同主题的文章,后来发现这个文章中有一些问题,不过也有些不好改动,于是就新开一篇来进行更正和补充!!!之前版本:https://www.cnblogs.com/xyz/p/18564777之所以之......
  • Go实战全家桶之二十六:指标计算再次强化面向对象(ES模型)
    ES模型typeSumAmountstruct{AvabCountint64`json:"avab_count"`//供盘数AvabQtyint64`json:"avab_qty"`//供货数RfqCountint64`json:"rfq_count&qu......
  • 强化学习理解
    在深度Q网络(DQN)中,Q值并不能直接被理解为策略(policy),而是行动价值函数(action-valuefunction)的一种估计。以下是一些关键点帮助你理解:什么是Q值?Q(s,a)表示在状态$s$采取动作$a$后,基于当前策略获得的累计奖励的期望值。在DQN中,Q值是通过一个深度神经网络(Q网络)进行近......
  • 强化学习:softlearning 算法的官方实现 —— 源码阅读list(完成)
    softlearning原始项目:https://github.com/rail-berkeley/softlearning国内地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning相关:强化学习:人形机器人——soft-q-leanring的官方实现的配置环境原始项目的运行环境已经打包成docker镜像,分布地址:https://g......
  • 揭秘语言模型后训练:指令微调、偏好调优与强化学习的深度解析
    揭秘语言模型后训练:指令微调、偏好调优与强化学习的深度解析前言1.什么是后训练?2.指令微调(InstructionFine-Tuning,SFT)概念训练流程实践示例:TÜLU33.偏好调优(PreferenceTuning,DPO)概念关键步骤DPO的优势实践示例:TÜLU34.强化学习与可验证奖励(RLVR)概念RLVR流......
  • 强化学习:人形机器人 —— soft-q-leanring的官方实现的配置环境
    项目源码地址:https://github.com/rail-berkeley/softlearningmujoco版本为200,地址:https://www.roboti.us/download.htmlpython版本3.8具体配置环境如下:(softlearning)root@I1e4c53bdf900b01340:~/softlearning#piplistPackageVersionLo......