安卓网站开发平台,谷歌浏览器怎么下载,外贸网站运营推广,ida设计公司上海在强化学习中#xff0c;环境#xff08;Environment#xff09;是智能体#xff08;Agent#xff09;进行学习和互动的场所#xff0c;它定义了状态空间、动作空间以及奖励机制。Env Wrapper#xff08;环境包装器#xff09;提供了一种方便的机制来增强或修改原始环境…在强化学习中环境Environment是智能体Agent进行学习和互动的场所它定义了状态空间、动作空间以及奖励机制。Env Wrapper环境包装器提供了一种方便的机制来增强或修改原始环境的功能而不需要改变环境本身的代码。 Env Wrapper主要有以下的几个特性1.预处理和归一化
为了提高学习效率和稳定性很多时候需要对环境的状态进行预处理例如归一化处理使得所有的输入特征都处在同一量级上以便于智能体更好地学习。Env Wrapper可以在不修改原始环境代码的情况下添加这些预处理步骤。
2.奖励形状改变Reward Shaping
有时原始环境的奖励信号太稀疏或不利于学习Env Wrapper可以用来修改奖励信号使之更加符合特定学习任务的需求。
3.动作和状态空间修改
如果需要对动作空间进行离散化或者对状态空间进行降维Env Wrapper允许用户实现这样的变换。这对于将复杂环境简化以适应低容量智能体或算法尤其有用。
4.实验一致性和复现性
当研究者想要分享他们的实验设置或与其他研究者进行比较时使用Env Wrapper可以确保所有人都在相同的环境变种上进行实验。
5.代码的模块化和复用
通过Env Wrappers可以创建可复用的模块对不同的环境应用相同的处理逻辑。这样可以避免代码冗余提高开发效率。
6.易于维护和扩展
当需要更新环境处理逻辑时只需修改对应的Env Wrapper而不需要重新触碰环境本身的实现。 例如若要为一个环境添加噪声处理或者状态的标准化处理可以创建一个Env Wrapper来实 现这些功能。这样当需要在不同的环境中实施同样的噪声或标准化处理时只需要将环境 通 过这个Env Wrapper传递即可而不需要为每个环境单独编写处理代码。
DI-engine 提供了大量已经定义好的、通用的 Env Wrapper DI-engine 继承和扩展了 OpenAI Gym 的设计提供了一系列通用的 Env Wrapper以便用户可以轻松地根据自己的需求来修改环境。以下是这些 Env Wrapper 的简介 1.NoopResetEnv
在环境启动时随机执行一定数量的无操作no-op步骤然后再重置环境。这有助于提供更多样化的初始状态。
2.MaxAndSkipEnv
在连续的几个帧中执行相同的动作并从中选取两个连续帧的最大值作为代表这样做可以减少环境内的非必要变化有助于稳定训练。
3.WarpFrame
将输入的图像帧缩放到固定的大小例如 84x84并转换为灰度图像这是许多深度强化学习工作中的常见做法。
4.ScaledFloatFrame
将图像帧的像素值从整数转换为浮点数并将其标准化到 0 到 1 的范围内。
5.ClipRewardEnv
将奖励剪裁为 -1, 0, 或 1根据奖励的正负性。这样做有利于限制梯度更新的规模有时能够增加训练的稳定性。
6.FrameStack
将连续的几个帧堆叠在一起作为网络的输入以提供给智能体关于动作的时间连续性信息。
7.ObsTransposeWrapper
重新排列观测数组的维度这在处理图像输入时特别有用如将图像数据从 HxWxC 调整为 CxHxW。
8.RunningMeanStd
计算和更新环境观测值的均值和标准差通常用于环境状态的归一化处理。
9.ObsNormEnv
使用实时更新的均值和标准差归一化观测值以保持输入值的分布稳定。
10.RewardNormEnv
使用实时更新的均值和标准差归一化奖励值帮助稳定训练过程。
11.RamWrapper
将环境的 RAM 状态转换为类似图像的格式这对于处理非图像的原始状态表示特别有用。
12.EpisodicLifeEnv
当智能体“死亡”时即使游戏没有真正结束也会结束当前的 episode。这可以让智能体更快地学习有关失败的信息。
13.FireResetEnv
在某些游戏中环境重置后需要执行一个 “fire” 动作来开始游戏。这个 Wrapper 自动处理这个动作。
二、如何使用 Env Wrapper 下一个问题是我们如何给环境包裹上 Env Wrapper。最简单的一种方法就是手动地显式对环境进行包裹
from ding.envs.env_wrappers.env_wrappers import NoopResetWrapperenv gym.make(env_id) # PongNoFrameskip-v4env NoopResetWrapper(env, noop_max 30)env MaxAndSkipWrapper(env, skip 4)
我们也可以尝试在gym中使用FrameStack环境包裹器
import gymfrom gym.wrappers import FrameStack# 创建并包裹环境env_id CartPole-v1env gym.make(env_id)env FrameStack(env, num_stack4)# 使用包裹后的环境运行一些episodefor episode in range(2): obs env.reset() done False step 0 while not done: action env.action_space.sample() # 随机选择动作 obs, reward, done, info env.step(action) print(fEpisode: {episode}, Step: {step}, Observation Shape: {obs.shape}, Reward: {reward}, Done: {done}) step 1 print(fEpisode {episode} finished after {step} steps.)# 关闭环境env.close() 以下是在 Python 中非显式的使用 Env Wrapper 的具体示例
点击DI-engine强化学习入门九环境包裹器Env Wrapper - 古月居可查看全文