- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
网上找到的一个实现:
地址:
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] 。
另一个实现:
https://ethanr2000.medium.com/using-pid-to-cheat-an-openai-challenge-f17745226449 。
代码实现:
import gym
from matplotlib import pyplot as plt
env = gym.make("CartPole-v1")
observation, _ = env.reset()
Kp = 135
Ki = 96.5
Kd = 47.5
force = 0
integral = 0
for step in range(10000000):
print("step: ", step)
env.render()
observation, reward, done, info, _ = env.step(force)
velocity = observation[1]
angle = observation[2]
angular_velocity = observation[3]
integral = integral + angle
F = Kp*(angle) + Kd*(angular_velocity) + Ki*(integral)
force = 1 if F > 0 else 0
if done:
observation, _ = env.reset()
integral = 0
env.close()
运行结果:
最后此篇关于强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)的文章就讲到这里了,如果你想了解更多关于强化学习:使用自动控制方法PID来解决强化学习问题中的cartpole问题(小车平衡杆问题)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我找不到 OpenAI Gym 环境“CartPole-v0”和“CartPole-v1”之间差异的准确描述。 这两种环境都有专门针对它们的单独的官方网站(请参阅 1 和 2 ),尽管我只能在gym
我试图实现最简单的深度 Q 学习算法。我认为,我已经正确地实现了它,并且知道深度 Q 学习在发散方面挣扎,但奖励下降得非常快,损失也在发散。如果有人能帮我指出正确的超参数,或者我是否错误地实现了算法,
我正在做策略梯度,我试图找出该任务的最佳目标函数是什么。该任务是开放的 ai CartPole-v0 环境,其中代理在其生存的每个时间步中收到 1 的奖励,并在终止时收到 0 的奖励。我试图找出对目标
最近,我比较了 CartPole-v0 环境中 DQN 的两个模型。其中一个是具有 3 层的多层感知器,另一个是由 LSTM 和 1 个全连接层构建的 RNN。我有一个大小为 200000 的经验回放
我正在经历this教程并看到以下代码: # Calculate score to determine when the environment has been solved
关闭。这个问题需要debugging details .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve this questio
我是强化学习的初学者,正在尝试实现策略梯度方法来使用 Tensorflow 解决 Open AI Gym CartPole 任务。然而,我的代码似乎运行得非常慢;第一集的运行速度还可以,但是从第二集开
我知道 env=gym.make('CartPole-v0') 的类型是 gym.wrappers.time_limit.TimeLimit 而且我还知道 env 是类 cartpole.py 的“实
您好,我正在尝试训练 DQN 来解决健身房的 Cartpole 问题。出于某种原因 Loss看起来像这样(橙色线)。你们能看看我的代码并帮助解决这个问题吗?我对超参数进行了一些尝试,所以我认为它们不是
我想在不打开渲染窗口的情况下访问 OpenAIgym CartPole-v0 环境中的原始像素。我该怎么做? 示例代码: import gym env = gym.make("CartPole-v0"
我试图实现一个 DQN 来解决 OpenAI Gym 中的 CartPole-v0 任务。不幸的是,我的实现的性能似乎没有提高。 目前,随着训练的进行,剧集奖励实际上会减少,而目标是找到更好的策略来增
所以我正在使用使用tensorflow的deepQ实现来解决CartPole-v0,但是输出有时(所有运行的40%)停留在9。我尝试使用tf.set_random_seed修复种子,但这仍然没有不保证
我正在使用示例代码学习 AzureML RL。 我可以运行用于训练的 cartpole 示例 (cartpole_ci.ipynb) 计算实例上的 PPO 模型。 我通过将 training_algo
我是一名优秀的程序员,十分优秀!