evaluation.py

这段代码实现了一个用于评估强化学习策略的函数 evaluate_policy。它的主要功能是运行策略(policy)在指定环境中进行多次 episode 的评估,并返回评估结果(如平均奖励、episode 长度等)。以下是代码的详细解释:


1. 导入模块

  • warnings: 用于发出警告信息。

  • typing: 用于类型注解(如 Callable, Dict, List, Optional, Tuple, Union)。

  • numpy: 用于数值计算。

  • gymnasium: 用于定义和管理强化学习环境。

  • stable_baselines3: 提供了强化学习算法的实现和工具(如 type_aliasesVecEnv)。


2. evaluate_policy 函数

这是核心函数,用于评估策略在指定环境中的表现。

参数

  • model: 实现了 predict 方法的策略对象(如 RL 算法或策略)。

  • env: 评估环境(可以是 gym.EnvVecEnv)。

  • n_eval_episodes: 评估的 episode 数量(默认 10)。

  • deterministic: 是否使用确定性策略(默认 True)。

  • render: 是否渲染环境(默认 False)。

  • callback: 回调函数,用于在每个 step 后执行额外的检查。

  • reward_threshold: 期望的最小平均奖励,如果未达到会抛出错误。

  • return_episode_rewards: 如果为 True,返回每个 episode 的奖励和长度列表,而不是平均值。

  • warn: 如果为 True,当环境未包装 Monitor 时会发出警告。

  • save_info: 如果为 True,保存额外的信息(如动作、观察值等)。

返回值

  • 如果 return_episode_rewardsTrue,返回:

    • episode_rewards: 每个 episode 的奖励列表。

    • episode_lengths: 每个 episode 的长度列表。

    • episode_actions: 每个 episode 的动作数组。

    • episode_obs: 每个 episode 的观察值数组。

    • time_vec: 每个 episode 的时间向量。

    • episode_profits: 每个 episode 的利润数组。

    • episode_violations: 每个 episode 的违规次数数组。

  • 否则,返回:

    • mean_reward: 平均奖励。

    • std_reward: 奖励的标准差。

    • 其他统计信息(如平均动作、观察值等)。


3. 函数逻辑

环境检查

  • 如果环境不是 VecEnv,将其包装为 DummyVecEnv

  • 检查环境是否被 MonitorVecMonitor 包装。如果没有,发出警告。

初始化变量

  • episode_rewards: 存储每个 episode 的奖励。

  • episode_lengths: 存储每个 episode 的长度。

  • episode_profits: 存储每个 episode 的利润。

  • episode_violations: 存储每个 episode 的违规次数。

  • episode_actions: 存储每个 episode 的动作。

  • episode_obs: 存储每个 episode 的观察值。

  • time_vec: 存储每个 episode 的时间向量。

  • episode_counts: 记录每个子环境完成的 episode 数量。

  • episode_count_targets: 每个子环境需要完成的 episode 数量。

评估过程

  1. 重置环境:

    • 调用 env.reset() 初始化环境。

    • 初始化状态和 episode 开始标志。

  2. 运行策略:

    • 使用 model.predict 获取动作。

    • 执行动作并获取新的观察值、奖励、完成标志和信息。

    • 更新当前 episode 的奖励、长度、利润、违规次数、动作和观察值。

  3. 处理 episode 结束:

    • 如果 episode 结束,将当前 episode 的结果保存到相应的列表中。

    • 重置当前 episode 的奖励和长度。

    • 如果启用了 callback,调用回调函数。

  4. 渲染环境:

    • 如果启用了 render,调用 env.render() 渲染环境。

  5. 循环直到完成所有 episode:

    • 重复上述过程,直到所有子环境完成指定的 episode 数量。

返回结果

  • 计算平均奖励和标准差。

  • 如果指定了 reward_threshold,检查平均奖励是否达到阈值。

  • 根据 return_episode_rewards 参数返回相应的结果。


4. 代码的核心功能

  • 策略评估:

    • 在指定环境中运行策略,评估其表现。

    • 支持向量化环境(VecEnv),可以并行评估多个 episode。

  • 结果记录:

    • 记录每个 episode 的奖励、长度、利润、违规次数、动作和观察值。

    • 支持返回详细的 episode 结果或统计信息。

  • 环境检查:

    • 检查环境是否被 Monitor 包装,确保评估结果的准确性。

  • 回调支持:

    • 支持在每个 step 后执行自定义的回调函数。


5. 代码的应用场景

  • 强化学习训练:

    • 在训练过程中定期评估策略,监控其表现。

    • 保存评估结果,用于后续分析和可视化。

  • 策略比较:

    • 比较不同策略在同一环境中的表现。

    • 根据评估结果选择最佳策略。

  • 环境调试:

    • 检查环境是否正常工作,确保评估结果的准确性。


总结

这段代码实现了一个通用的策略评估函数 evaluate_policy,支持在单环境和向量化环境中评估策略的表现。它可以返回详细的 episode 结果或统计信息,并支持回调函数和环境检查功能。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇