强化学习记录——PolicyGradient跑CartPole-v0

代码cr:MorvanZhou (Morvan) · GitHub

一、CartPole-v0环境介绍:

一根杆子由一个非驱动的关节连接到小车上,小车沿着无摩擦的轨道移动。这个系统是通过对小车施加+1或-1的力来控制的。钟摆开始直立,目的是防止它倒下。柱子保持直立的每一步将获得+1奖励。当电线杆与垂直的距离超过15度,或者车与中心的距离超过2.4个单位时,就结束了。

环境脚本:gym/gym/envs/classic_control at master · openai/gym · GitHub

二、RL_brain.py

class PolicyGradient:

#初始化
def _init_(self,n_actions,
           n_features,
           learning_rate=0.01,
           reward_decay=0.95,
           output_graph=False,):

#建立policy gradient神经网络
def _bulid_net(self):

#选行为
def choose_action(self,observation):

#存储回合transition
def store_transition(self,s,a,r):

#学习更新参数
def learn(self,s,a,r,s_):

#衰减回合的reward
def _discount_and_norm_rewards(self):

三、run_CartPole.py

import gym
from RL_brain import PolicyGradient
import matplotlib.pyplot as plt

DISPLAY_REWARD_THRESHOLD = 400  #当回合总reward大于400时显示模拟窗口
RENDER = False  #在屏幕上显示模拟窗口会拖慢运行速度,我们等计算机学的差不多了再显示模拟

env = gym.make('CartPole-v0')
env.seed(1)  # reproducible, general Policy gradient has high variance
env = env.unwrapped #取消限制

print(env.action_space) #显示可用action
print(env.observation_space) #显示可用state的observation
print(env.observation_space.high) #显示observation最高值
print(env.observation_space.low) #显示observation最低值

RL = PolicyGradient( #定义RL部分的policygradient以及相关参数
    n_actions=env.action_space.n,
    n_features=env.observation_space.shape[0],
    learning_rate=0.02,
    reward_decay=0.99,
    # output_graph=True,
)

for i_episode in range(3000):#基础版的policy gradient是回合更新

    observation = env.reset() #获得初始环境observation

    while True:
        if RENDER: env.render() #重绘环境的一幅图像

        action = RL.choose_action(observation) #选取动作

        observation_, reward, done, info = env.step(action) #将这一状态的动作传入、获取下一状态的观测值、奖励以及是否已经终结
 

        RL.store_transition(observation, action, reward) #存储这一回合的transition

        if done: #回合结束
            ep_rs_sum = sum(RL.ep_rs) #对reward进行处理,使其更有导向性的引导policygradient的gradient方向

            if 'running_reward' not in globals():
                running_reward = ep_rs_sum
            else:
                running_reward = running_reward * 0.99 + ep_rs_sum * 0.01
            if running_reward > DISPLAY_REWARD_THRESHOLD: RENDER = True     # rendering
            print("episode:", i_episode, "  reward:", int(running_reward))

            vt = RL.learn()

            if i_episode == 0:
                plt.plot(vt)    # plot the episode vt
                plt.xlabel('episode steps')
                plt.ylabel('normalized state-action value')
                plt.show()
            break

        observation = observation_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cartpole-v0是OpenAI Gym的一款游戏环境,是一个简单的控制问题。这个环境中有一根竖直的杆子,一辆在水平轨道上移动的小车,目标是通过控制小车的左右移动,使得杆子保持竖直不倒。 在cartpole-v0环境中,游戏状态由四个变量组成:小车的位置、小车的速度、杆子的倾斜角度和杆子的角速度。每一时刻都会有一个动作发生,可以向左移动、向右移动或保持不动。 游戏的规则是,如果杆子的倾斜角度大于某个阈值或小车移出轨道范围,则游戏结束。游戏的目标是在尽可能长的时间内使得杆子保持竖直。 在解决cartpole-v0问题时,可以使用强化学习算法,通过与环境的交互来学习最优的控制策略。常见的强化学习算法有Q-learning、Deep Q Network(DQN)等。 对于cartpole-v0问题,一个简单的解决方法是使用DQN算法。DQN使用一个神经网络来近似Q值函数,根据当前状态选择最优的动作。通过反向传播算法来更新神经网络的参数,使得Q值函数逼近最优值。在训练过程中,可以采用经验回放的方法,从经验池中随机采样样本进行训练,以提高样本的有效利用率。 在训练过程中,可以将游戏进行多轮迭代,每轮迭代包含多个episode。每个episode中,从初始状态开始,根据当前策略选择动作,与环境交互得到奖励和下一个状态,更新Q值函数的参数。通过多轮迭代,可以逐渐学习到最优的控制策略,使得杆子保持竖直的时间越来越长。 总结来说,cartpole-v0是一个简单的控制问题,可以使用强化学习算法来解决。通过与环境交互,学习到最优的控制策略,使杆子保持竖直的时间最长。 ### 回答2: cartpole-v0 是一个开放式强化学习环境,目标是在杆的一个端点上平衡一个杆子。该环境中包含了一个小车和垂直立在其上的杆子。小车可以沿着水平轨道左右移动,通过智能控制来使杆子保持平衡。 在 cartpole-v0 中,智能体可以执行两个动作:向左移动小车或向右移动小车。智能体的目标是在最大时间步内保持杆子平衡,同时移动小车以防止杆子倾倒。当杆子与水平线的夹角超过某个限制,或者小车的位置超过一定范围,环境将判定为游戏失败。 通过观察环境的状态,智能体可以根据某种策略决定执行哪个动作。环境的状态包括小车的位置、速度,杆子的夹角,以及杆子的角速度。智能体可以根据这些信息利用强化学习算法进行学习,不断优化其策略,以便在最大化时间步内保持杆子平衡。 对于cartpole-v0环境,非常有挑战性的任务是让杆子保持平衡的时间最长。通过合理设计智能体的策略和优化算法,可以逐渐提高智能体在该环境中的表现。这个环境对于深入理解强化学习算法的原理和应用是非常有价值的,同时也可以用于测试和比较不同算法的性能。 ### 回答3: CartPole-v0是OpenAI Gym中的一个经典强化学习环境。游戏的目标是通过施加力来保持一个可以平衡的竖杆。环境中有一个移动的小车,可以向左或向右施加力并控制竖杆平衡。游戏由一个连续的状态空间和一个离散的动作空间组成。 状态包括小车的位置,速度,竖杆的角度和角速度。小车的位置和速度可以是负无穷到正无穷的任意实数值,竖杆的角度和角速度则限定在-π到π之间的实数值。目标是使竖杆保持竖直,而不是倾倒或跌落。 动作空间是离散的,有两个可能的动作:向左和向右施加力。过程中的奖励是每个时间步的奖励累积和,在每个时间步中,保持竖杆和小车在故障范围内会获得+1的奖励,而离开故障范围则会获得-1的奖励。 CartPole-v0是一个简单且直观的强化学习环境,旨在测试智能体在这种简单控制任务上的学习能力。同时,CartPole-v0也是一个良好的起点,用于学习和实践强化学习算法。 使用强化学习算法解决CartPole-v0游戏时,我们可以采用各种方法,如Q-learning,DQN,PPO等。这些算法可以通过与环境的交互来学习最佳策略,使得竖杆保持平衡的时间尽可能长。在训练过程中,我们可以观察到智能体的学习过程,包括奖励的变化和策略的改进。通过反复训练和优化,智能体可以逐渐学会有效地控制小车并保持竖杆的平衡。 通过解决CartPole-v0问题,我们可以更深入地理解强化学习算法的原理和应用,以及探索如何将其应用到更复杂的环境和任务中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值