文章目录
- 环境介绍
- 一 box2d
- bipedal_walker
- car_dynamics
- car_racing
- lunar_lander
- 二、 classic_control
- acrobot
- CartPole
- continuous_mountain_car
- mountain_car
- pendulum
- 三、toy_text
- blackjack
- cliffwalking
- frozen
- taxi
- 四、mujoco
- Ant:
- HalfCheetah:
- Hopper:
- Humanoid:
- InvertedDoublePendulum:
- Reacher:
- Swimmer:
- Walker2D:
理解gym并测试gym小游戏CartPole (一)
环境介绍
环境中有4个子文件包
一 box2d
Box2D是一个强大的开源物理游戏引擎环境,用于模拟2D刚体物体的运动和碰撞。
bipedal_walker
-
目标通常是让双足助行器学会行走,即在不跌倒的情况下前进尽可能远的距离。
-
动作空间是连续的,通常包含四个维度的动作,分别对应助行器腿部的不同运动控制。
-
观察空间包含助行器的当前状态信息,如身体部位的位置、速度等,这些信息被用来作为输入给强化学习算法。
-
环境中有一个奖励机制,根据助行器的行走距离、是否跌倒等因素给予奖励或惩罚。
-
使用Box2D物理引擎进行模拟,包括重力、摩擦力等物理因素,使得助行器的运动更加真实和复杂。
car_dynamics
-
汽车的动力学模型:这涉及汽车的物理特性,如质量、惯性、轮胎摩擦力等,以及这些特性如何影响汽车的加速、减速、转向等动作。
-
控制函数:car_dynamics中可能定义了控制汽车行为的函数,如steer(转向)、gas(油门)、brake(刹车)等。这些函数根据输入的控制信号(如方向盘角度、油门踏板位置、刹车踏板压力等)来计算汽车的下一个状态。
-
与环境的交互:在gym的环境中,car_dynamics负责与Box2D物理引擎进行交互,以模拟汽车的物理行为。它可能接收来自环境的输入(如赛道布局、障碍物位置等),并根据这些输入以及汽车当前的状态和控制信号来计算汽车的下一个位置和速度等。
-
奖励函数:虽然奖励函数本身可能不直接包含在car_dynamics中,但car_dynamics提供的汽车状态和环境信息通常用于计算奖励。奖励是强化学习中非常重要的一个概念,它用于评估智能体(在这种情况下是汽车)的行为好坏。
car_racing
CarRacing是一种在OpenAI Gym平台上开发和比较强化学习算法的模拟环境。它是流行的Box2D物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过程。在这个环境中,智能体(agent)需要控制一辆汽车在赛道上行驶,并尽量快速地完成一圈或多圈赛道,同时避免碰撞和偏离赛道。
在CarRacing环境中,智能体通过观察当前的环境状态(如汽车的位置、速度、赛道形状等)来做出决策,并选择相应的动作(如加速、刹车、转向等)。环境会根据智能体的动作给予相应的奖励或惩罚,例如完成一圈赛道会获得奖励,而碰撞到赛道边缘或障碍物则会受到惩罚。
rl-video-episode-0
见资料:
- 《CarRacing 车辆模型 学习》
lunar_lander
Lunar_lander环境模拟了一个火箭着陆器的着陆过程。着陆器需要在固定点(0,0)的着陆垫上安全着陆。
环境版本
- 离散版本:环境具有离散的行动空间,即引擎只能全油门开启或关闭。
- 连续版本:环境具有连续的动作空间,通常表示为Box(-1, +1, (2,), dtype=np.float32)。状态是一个8维向量,包括着陆器的x和y坐标、x和y的线速度、角度、角速度,以及代表每条腿是否与地面接触的两个布尔运算符.
第一个动作决定了主发动机的油门,而第二个动作则指定了横向助推器的油门。
奖励:奖励机制设计用于鼓励着陆器安全、准确地着陆。
- 从屏幕的顶部移动到着陆点并停在那里的奖励约为100~140分。
- 如果着陆器离开了着陆台,它就会失去奖励。
- 如果着陆器坠毁,它将获得额外的-100分。
- 如果它稳定了(即没有移动或摇晃),它将得到额外的+100分。
- 每一个与地面接触的腿是+10分。
- 开启主引擎,每帧-0.3分;发射侧引擎,每帧-0.03分。
目标:着陆器的目标是尽可能准确地着陆在指定的着陆垫上,同时最小化燃料消耗(尽管在这个环境中燃料是无限的,但开启引擎会消耗分数)。
挑战:环境中的挑战包括着陆器的物理特性(如惯性、重力等)、着陆垫的大小和位置限制,以及奖励和惩罚机制的设计。
应用场景与算法
- Lunar_lander环境常被用于测试和训练强化学习算法,如深度Q学习(Deep Q-Learning)、深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)、软演员-评论家(Soft Actor-Critic, SAC)等。
- 通过在这个环境中训练代理,可以学习到如何根据当前状态做出最优的决策,从而实现着陆器的安全着陆。
学习资料:
- 基于LunarLander登陆器的DQN强化学习案例(含PYTHON工程)
- 08、基于LunarLander登陆器的DDQN强化学习(含PYTHON工程)
- 09、基于LunarLander登陆器的Dueling DQN强化学习(含PYTHON工程)
- 10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)
- 11、基于LunarLander登陆器的A2C强化学习(含PYTHON工程)
- 13、近端策略优化Proximal Policy Optimization (PPO) 算法:从原理到实践
- 14、强化学习Soft Actor-Critic算法:推导、理解与实战
二、 classic_control
acrobot
环境描述
Acrobot是一个由两个连杆和关节组成的机器人,这两个连杆通过转动关节相连,并且只能在一个平面内运动。初始状态下,Acrobot的连杆是下垂的,目标是通过在两个关节上施加力矩,使得Acrobot的末端(即第二个连杆的末端)能够摆动到预定的位置(通常是上方)。
状态
在Gym的Acrobot环境中,状态通常包括两个连杆的角度、角速度等物理信息,这些信息是算法进行决策的基础
动作
动作是算法在每个时间步对Acrobot施加的力矩,通常是一个连续的或离散的数值。在连续动作空间中,算法可以输出一个具体的力矩值;在离散动作空间中,算法可以选择一个预定义的力矩方向或大小。
奖励
奖励是算法在完成任务过程中获得的反馈。在Acrobot环境中,奖励通常与末端位置、速度、能耗等因素有关。例如,当末端摆动到预定位置时,算法会获得正奖励;当能耗过高或末端未能到达指定位置时,算法会获得负奖励。
目标
算法的目标是最大化总奖励。为了实现这一目标,算法需要学习如何根据当前状态选择最优的动作,使得Acrobot能够高效地摆动到预定位置。
CartPole
rl-video-episode-0
即推车-杆问题,是Barto、Sutton和Anderson在论文中提出的一个问题。它模拟了一根杆子通过一个非驱动关节连接到一辆推车上的情景。推车沿着一条无摩擦的轨道移动,而钟摆(杆子)直立在车上。目标是通过在推车上施加左右方向的力来平衡杆子,使其尽可能长时间地保持直立。
状态
在CartPole环境中,状态空间包含四个属性,分别是推车的位置(x)、速度(x_dot)、杆子的角度(theta)以及角速度(theta_dot)
每个属性都有其特定的值域范围。例如,推车的位置可以在-4.8到4.8之间,但如果推车的位置超出-2.4到2.4的范围,事件将会终止。同样,杆子的角度可以在-0.418 rad(约-24°)到0.418 rad(约24°)之间,但如果超出这个范围,事件也会终止。
动作
动作空间是离散的,只有向左和向右两个选择,通常用0和1表示
奖励-
- 在CartPole环境中,奖励机制是鼓励智能体(agent)尽可能长时间地保持杆子直立。
- 每一步操作(如果杆子仍然直立)都会给予智能体一个正的奖励(通常是1)。
- 如果杆子倒下或推车超出轨道范围,则回合结束,并可能给予智能体一个负的奖励(虽然在一些版本中,回合结束并不直接对应负的奖励,但智能体显然无法再获得正的奖励)。
终止条件
- 杆子倒下(即角度的绝对值大于某个阈值,如12°)。
- 推车超出轨道范围(即位置的绝对值大于某个阈值,如2.4)。
- 回合长度超过预设的最大步数(如500步,但在不同版本中可能有所不同)。
continuous_mountain_car
MountainCarContinuous环境,是一个连续动作空间的环境。在这个环境中,智能体(agent)需要控制一辆动力不足的汽车,通过左右移动和加速,将其推到山顶。与MountainCar-v0(离散动作空间)不同,MountainCarContinuous允许智能体对汽车施加连续值的力,以更精细地控制汽车的运动。
状态
在continuous_mountain_car环境中,状态(State)和观察(Observation)是相同的,都包含了汽车的位置(position)和速度(velocity)
位置通常被限制在一个一维的区间内,例如[-1.2, 0.6],而速度也被限制在一个较小的范围内,例如[-0.07, 0.07]。
动作
在连续动作空间中,智能体可以施加一个连续值的力来控制汽车。这个力可以是正数(表示向右推)或负数(表示向左推),并且有一个最大值和最小值限制。
智能体需要根据当前的状态(位置和速度)来选择最合适的力,以最大化长期的累积奖励。
奖励
在continuous_mountain_car环境中,如果汽车成功到达山顶(通常设定为一个特定的位置,如0.45或0.5),则智能体会获得一个较大的正奖励(如100)。
如果汽车未能到达山顶,则智能体会在每个时间步获得一个负的奖励,这个奖励通常与智能体施加的力的大小成反比,以鼓励智能体使用更小的力来完成任务。
学习资料:
- 强化学习之MountainCarContinuous(注册自己的gym环境) ⭐️
mountain_car
环境中包括一辆随机放置在正弦谷底部的汽车,动力不足的汽车必须爬上一维小山才能到达目标。目标是策略性地给汽车加速,使汽车到达山顶
lunar
状态
状态(或观察)通常包括汽车的位置和速度
动作
MountainCar中的动作是离散的。在离散动作版本中,可能的动作通常是向左或向右推动汽车(例如,+1或-1的力)。
奖励
- 奖励机制设计得鼓励智能体以较少的步数达到目标。
- 汽车到达山顶时获得正向奖励,而未能达到目标或采取过多步骤则可能获得负向奖励或没有奖励。
主要区别
Continuous_MountainCar与MountainCar类似,但主要区别在于动作是连续的。
学习资料
- 强化学习库gym之mountain-car源码解读
- 基于强化学习的gym Mountain Car稳定控制 ⭐️
pendulum
Pendulum环境模拟了一个摆动的杆子,目标是通过控制力矩来保持杆子的稳定,或者使其达到特定的状态(如竖直向上)。这个环境通常用于测试连续动作空间的强化学习算法,因为控制力矩是一个连续变化的量。
状态
包括摆杆的角度(theta)、角速度(theta_dot)等物理量。这些状态量可以通过传感器或物理模型获取,并作为强化学习算法的输入。
动作
动作空间是连续的,通常表示为对摆杆施加的力矩。这个力矩可以在一定的范围内变化,通过调整力矩的大小和方向,可以控制摆杆的运动。
奖励
Pendulum环境的奖励函数通常设计为与摆杆的状态相关。一种常见的奖励函数是:
r = − ( θ 2 + 0.1 × θ ˙ 2 + 0.001 × τ 2 ) r = − ( θ 2 + 0.1 × θ ˙ 2 + 0.001 × τ 2 ) r = − ( θ 2 + 0.1 × θ ˙ 2 + 0.001 × τ 2 ) r=−(θ2+0.1×θ˙2+0.001×τ2)r = -(\theta^2 + 0.1 \times \theta˙^2 + 0.001 \times \tau^2)r=−(θ2+0.1×θ˙2+0.001×τ2) r=−(θ2+0.1×θ˙2+0.001×τ2)r=−(θ2+0.1×θ˙2+0.001×τ2)r=−(θ2+0.1×θ˙2+0.001×τ2)
其中, θ θ θ表示摆杆的角度, θ ˙ θ˙ θ˙表示角速度, τ τ τ表示施加的力矩。这个奖励函数鼓励智能体将摆杆保持在竖直向上的位置 ( θ = 0 ) (θ=0) (θ=0),同时减小角速度和力矩的大小,以节省能量和避免不必要的动作。
无终止状态:Pendulum环境通常没有明确的终止状态,需要设置一定的时间步数或达到特定的性能标准来结束一个episode
学习资料
- 【强化学习】Pendulum-v0环境分析
- 强化学习gym的使用之Pendulum的训练
- gym 环境解析:Pendulum-v0
三、toy_text
blackjack
又称21点,是一种广受欢迎的纸牌游戏。在强化学习的Blackjack环境中,智能体(agent)需要学习如何根据当前的牌面情况(包括自己的牌和对手的牌)来做出最优的决策,即是否要牌(hit)或停牌(stick),以最大化自己的赢面。
状态
-
玩家当前手上的牌的总和(the players current sum)。
-
庄家(dealer)展示的牌(1-10,其中1代表A)。
-
玩家手上是否有可用的A(usable ace,0或1,因为A可以当作1或11来使用)
动作 -
要牌(hit=1):智能体选择继续从牌堆中抽牌。
-
停牌(stick=0):智能体选择不再抽牌,结束当前回合
奖励 -
获得胜利(玩家的牌面总和大于庄家的牌面总和且不超过21点):奖励为1。
-
平局(玩家的牌面总和与庄家的牌面总和相等或都超过21点):奖励为0。
-
输掉比赛(玩家的牌面总和小于庄家的牌面总和或超过21点):奖励为-1。
cliffwalking
CliffWalking(悬崖行走)环境通常被表示为一个网格世界,其中包含以下元素:
- 起点(S):智能体开始的位置。
- 目标(G):智能体想要到达的位置。
- 悬崖(C):智能体一旦掉入悬崖,会重置到起点的位置,并可能获得一个较大的负奖励。
- 普通格子:智能体在普通格子上移动时,通常会获得一个较小的负奖励(如-1),以鼓励智能体尽快到达终点。
动作
- 上(Up):向网格的上方移动一格(如果不在边界上)。
- 下(Down):向网格的下方移动一格(如果不在边界上)。
- 左(Left):向网格的左方移动一格(如果不在边界上)。
- 右(Right):向网格的右方移动一格(如果不在边界上)。
目标
智能体的目标是通过学习最优策略,以尽可能少的步数从起点到达终点。然而,由于悬崖的存在,智能体需要谨慎选择动作,以避免掉入悬崖并重置到起点。这增加了问题的复杂性,并使CliffWalking成为强化学习中一个具有挑战性的任务
奖励
- 到达终点:当智能体到达终点时,会获得一个较大的正奖励(如+100)。
- 掉入悬崖:当智能体掉入悬崖时,会重置到起点,并可能获得一个较大的负奖励(如-100)。
- 在普通格子上移动:智能体在普通格子上移动时,会获得一个较小的负奖励(如-1),以鼓励智能体尽快到达终点。
学习资料
- 强化学习系列案例 | 利用Q-learning求解悬崖寻路问题
- 强化学习开发环境搭建与入门实验——CliffWalking与CartPole ⭐️
frozen
指的是Frozen Lake或类似的冻结湖泊环境,是一个由方块(或称为格子)组成的简单游戏环境.在这个环境中,智能体(Agent)需要从起始方块移动到目标方块,同时避开危险的洞(Hole)。
状态
境的状态由智能体当前所在的方块位置决定。在Frozen Lake环境中,通常有一个4x4的方块网格,因此有16个可能的状态(每个方块代表一个状态)
动作
智能体可以执行的动作通常包括向左、向右、向上和向下移动。这些动作分别用数字(如0、1、2、3)或符号(如LEFT、RIGHT、UP、DOWN)表示。
奖励
智能体在移动到目标方块时获得奖励(通常为1),如果掉入洞中则获得惩罚(通常为0或负值,但在Frozen Lake中通常是结束当前回合并获得0奖励)。
taxi
Taxi环境通常包含四个地点(例如R、G、B、Y),每个地点用不同的字母标记,代表出租车可以到达的不同位置。状态空间是离散的,由出租车的位置、乘客的位置以及目的地共同决定。具体地,状态可以表示为一个元组(taxi_row, taxi_col, passenger_location, destination),分别代表出租车所在行、出租车所在列、乘客位置和目的地。
动作空间
Taxi环境的动作空间也是离散的,通常包含六个动作,分别是向南移动(south)、向北移动(north)、向东移动(east)、向西移动(west)、接乘客(pickup)和放乘客(drop-off)
奖励
- 成功接送乘客:如果出租车成功地将乘客送到目的地,将获得+20分的奖励。
- 时间步长惩罚:每经过一个时间步长,出租车将受到-1分的惩罚,以鼓励算法尽快完成任务。
- 错误接送乘客:如果出租车在没有到达目的地的情况下将乘客放下,将受到-10分的惩罚。
环境特点与难度
- 随机性:每次运行环境时,出租车、乘客和目的地的位置都是随机生成的,这增加了问题的复杂性和挑战性。
- 状态空间与动作空间的维度:Taxi问题的状态空间和动作空间维度适中,既不过于简单也不过于复杂,使得它成为测试强化学习算法性能的一个理想选择。
- 栅栏与路径限制:环境中可能存在可以穿越和不能穿越的栅栏,这进一步增加了问题的复杂性和算法需要探索的状态空间
解决方法
Taxi问题可以通过多种强化学习算法来解决,例如Q-learning、Sarsa等。这些算法通过不断尝试和学习,逐渐找到最优的接送乘客路径。在训练过程中,算法会根据奖励机制不断调整其策略,以最大化累计奖励。
四、mujoco
Ant:
这是一个模拟的多足机器人环境。
Ant环境要求代理(Agent)学习如何控制机器人的多个关节,以实现稳定的行走和移动。
HalfCheetah:
这是一个模拟的半猎豹机器人环境。
HalfCheetah环境挑战代理学习如何控制机器人的关节,以模拟猎豹般的奔跑动作。
Hopper:
这是一个模拟的单腿跳跃机器人环境。
Hopper环境要求代理学习如何控制机器人的跳跃动作,包括起跳、空中姿态调整和落地等。
Humanoid:
这是一个模拟的人类机器人环境。
Humanoid环境是最具挑战性的环境之一,要求代理学习如何控制机器人的多个关节,以实现复杂的动作,如行走、跑步和跳跃等。
InvertedDoublePendulum:
这是一个模拟的双摆倒立环境。
InvertedDoublePendulum环境要求代理学习如何控制两个相连的摆杆,使它们保持倒立状态。
Reacher:
这是一个模拟的机械臂环境。
Reacher环境要求代理学习如何控制机械臂的移动,以将末端执行器移动到目标位置。
Swimmer:
这是一个模拟的游泳机器人环境。
Swimmer环境要求代理学习如何控制机器人的多个关节,以模拟游泳动作。
Walker2D:
这是一个模拟的双足行走机器人环境。
Walker2D环境要求代理学习如何控制机器人的双足,以实现稳定的行走。