[强化学习实战]DQN算法实战-小车上山(MountainCar-v0)

本文通过小车上山案例分析了DQN算法和线性近似策略在解决连续状态空间问题上的应用。首先介绍了环境和问题背景,然后提出使用线性近似(如独热编码和砖瓦编码)来近似动作价值函数,实现SARSA算法。接着,利用深度Q学习(DQN)和双重DQN算法,通过全连接神经网络进行函数近似,以求解最优策略。实验结果显示,深度Q学习在解决此类问题上表现出更高的效率。最后,提供了DQN算法和双重DQN算法的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码链接

案例分析

如图1所示,一个小车在一段范围内行驶。在任一时刻,在水平方向看,小车位置的范围是[-1.2,0.6],速度的范围是[-0.07,0.07]。在每个时刻,智能体可以对小车施加3种动作中的一种:向左施力、不施力、向右施力。智能体施力和小车的水平位置会共同决定小车下一时刻的速度。当某时刻小车的水平位置大于0.5时,控制目标成功达成,回合结束。控制的目标是让小车以尽可能少的步骤达到目标。一般认为,如果智能体在连续100个回合中的平均步数≤110,就认为问题解决了。
小车上山
在绝大多数情况下,智能体简单向右施力并不足以让小车成功越过目标。假设智能体并不知道环境确定小车位置和速度的数学表达式。事实上,小车的位置和速度是有数学表达式的。记第t时刻(t=0,1,2,…)小车的位置为 X t ( X t ∈ [ − 1.2 , 0.6 ] ) X_t(X_t∈[-1.2,0.6]) XtXt[1.2,0.6],速度为 V t ( V t ∈ [ − 0.07 , 0.07 ] ) V_t(V_t∈[-0.07,0.07]) VtVt[0.07,0.07],智能体施力为 A t ∈ 0 , 1 , 2 A_t∈{0,1,2} At0,1,2,初始状态 X 0 ∈ [ − 0.6 , − 0.4 ) , V 0 = 0 X_0∈[-0.6,-0.4),V_0=0 X0[0.6,0.4)V0=0。从t时刻到 t + 1 t+1 t+1时刻的更新式为
在这里插入图片描述
其中限制函数clip()限制了位置和速度的范围:
在这里插入图片描述

实验环境

Gym库内置的环境’MountainCar-v0’已经实现了小车上山环境。在这个环境中,每一步的奖励都是-1,回合的回报的值就是总步数的负数。导入这个环境,并查看其状态空间和动作空间,以及位置和速度的参数。

import numpy as np
np.random.seed(0)
import pandas as pd
import matplotlib.pyplot as plt
import gym
import tensorflow.compat.v2 as tf
tf.random.set_seed(0)
from tensorflow import keras

env = gym.make('MountainCar-v0')
env.seed(0)
print('观测空间 = {}'.format(env.observation_space))
print('动作空间 = {}'.format(env.action_space))
print('位置范围 = {}'.format((env.unwrapped.min_position,
        env.unwrapped.max_position)))
print('速度范围 = {}'.format((-env.unwrapped.max_speed,
        env.unwrapped.max_speed)))
print('目标位置 = {}'.format(env.unwrapped.goal_position))

使用这个环境。在代码清单2中的策略总是试图向右对小车施力。程序运行结果表明,仅仅简单地向右施力,是不可能让小车达到目标的。为了避免程序无穷尽地运行下去,这里限制了回合最大的步数为200。

positions, velocities = [], []
observation = env.reset()
while True:
    positions.append(observation[0])
    velocities.append(observation[1])
    next_observation, reward, done, _ = env.step(2)
    if done:
        break
    observation = next_observation

if next_observation[0] > 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值