栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

强化学习记录——DQN跑Pendulum-v0

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

强化学习记录——DQN跑Pendulum-v0

代码cr:MorvanZhou (Morvan) · GitHub

一、Pendulum-v0环境介绍:

钟摆以随机位置开始,目标是将其向上摆动,使其保持直立。

gym/gym/envs/classic_control at master · openai/gym · GitHub

 二、Pendulum-v0.py代码

import gym#导入gym库
import numpy as np#导入numpy模块
from RL_brain import DeepQNetwork#从RL_brain导入DeepQNetwork
ACTION_SPACE = 11#可以选取的动作有11个
env = gym.make('Pendulum-v0')#导入环境
env = env.unwrapped#env.unwrapped可以得到原始的类,原始类想step多久就多久,不会200步后失败

print(env.action_space)#输出动作信息
print(env.observation_space)#查看状态空间
print(env.observation_space.high)#查看状态的最高值
print(env.observation_space.low)#查看状态的最低值

RL = DeepQNetwork(n_actions=ACTION_SPACE, #调用DeepQNetwork:输出多少个action的Q值、
                  n_features=3,#接收多少个observation的值(用observation来预测action的值)、
                  learning_rate=0.01,#学习率
                  e_greedy=0.9,#e_greedy的值
                  replace_target_iter=100, #进行了多少步之后将targetnet的值换为最新的参数、
                  memory_size=2000,#记忆库的容量
                  e_greedy_increment=0.001,)

                  

total_steps = 0#学习步数


for i_episode in range(100):#episode循环

    observation = env.reset()#获得环境初始observation
    ep_r = 0
    while True:
        env.render()#重绘环境的一幅图像

        action = RL.choose_action(observation)#选取动作
        
        #Pendulum-v0是连续性动作。而DQN处理的是离散的,我们需要将Pendulum-v0动作离散化

        f_action = (action-(ACTION_SPACE-1)/2)/((ACTION_SPACE-1)/4)   # convert to [-2 ~ 2] float actions
        observation_, reward, done, info = env.step(np.array([f_action]))#将这一状态的动作入、获取下一状态的观测值、奖励以及是否已经终结

        reward /= 10   # normalize to a range of (-1, 0). r = 0 when get upright
        # the Q target at 竖直向上 state will be 0, because Q_target = r + gamma * Qmax(s', a') = 0 + gamma * 0



        RL.store_transition(observation, action, reward, observation_)#存储记忆:当前的observation、采取的行动、奖励、下一步的observation

        ep_r += reward
        if total_steps > 1000:#大于1000步的时候再开始学习
            RL.learn()

        if done:#完成此次episode
            print('episode: ', i_episode,#输出此时的episode
                  'ep_r: ', round(ep_r, 2),#round(number[, ndigits])number是你的数、是舍入到小数点后的位数
                  ' epsilon: ', round(RL.epsilon, 2))
            break

        observation = observation_#更迭
        total_steps += 1#步数加一

RL.plot_cost()#绘制cost


三、Double DQN——解决DQN中的过估计问题

DQN基于Q-Learning,Q-Learning中有Qmax,Qmax会导致Q现实当中的过估计(overestimate)。而Double DQN就是用来解决出现的过估计问题的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号