目录
2. SubprocVecEnv([make_env( )...])
7. n_epochs和total_timesteps的关系
11. ep_len_mean、approx_kl等指标解释
==street_fighter_custom_wrapper.py部分==
一、说明
该项目针对B站UP主 林亦LYi 的作品 格斗之王!AI写出来的AI竟然这么强!进行代码解读。
因为我们之前对此接触较少,所以我们借助AI的力量进行解读。在理解的基础上,做了一些整理。
林亦LYi项目代码:GitHub - linyiLYi/street-fighter-ai: This is an AI agent for Street Fighter II Champion Edition.
此外,针对项目代码的视频解释,《格斗之王AI》代码逐行解读_哔哩哔哩_bilibili。
二、AI的解释
基于AI生成,可能对理解代码有帮助。(复制答案的过程中,数字标号有误,可忽略)
==train.py部分==
1. os.makedirs
问:os.makedirs(LOG_DIR, exist_ok=True)什么意思
答:os.makedirs(LOG_DIR, exist_ok=True) 是一个用于创建目录的 Python 代码片段。
os.makedirs() 是一个函数,用于递归创建多层目录。它接受两个参数:
LOG_DIR:要创建的目录的路径。这是一个表示目录路径的字符串变量。
exist_ok=True:一个可选的参数,表示如果目录已经存在是否忽略错误。如果设置为 True,则在目录已存在的情况下不会引发异常;如果设置为 False(默认值),则在目录已存在时会引发 FileExistsError 异常。
2. SubprocVecEnv([make_env( )...])
问:解释下env = SubprocVecEnv([make_env(game, state="Champion.Level12.RyuVsBison", seed=i) for i in range(NUM_ENV)])
答:这段代码使用 OpenAI Gym 的 SubprocVecEnv 类创建了一个并行化的环境,以便在多个并行的游戏环境中进行训练或评估。
下面是代码中的关键部分的解释:
1. `make_env(game, state="Champion.Level12.RyuVsBison", seed=i)`:这是一个自定义函数 `make_env`,用于创建游戏环境。它接受三个参数:游戏名称、游戏状态和随机种子。在这里,使用游戏名称和特定的游戏状态来创建游戏环境。
2. `NUM_ENV`:这是一个表示要创建的并行环境数量的变量。
3. `[make_env(game, state="Champion.Level12.RyuVsBison", seed=i) for i in range(NUM_ENV)]`:这是一个列表推导式,用于创建多个游戏环境。在这里,使用 `make_env` 函数创建了 `NUM_ENV` 个游戏环境,并将它们放入一个列表中。
4. `SubprocVecEnv([...])`:这是使用 SubprocVecEnv 类创建并行环境的部分。`SubprocVecEnv` 是 Gym 提供的一种环境类,它可以在多个并行进程中运行多个环境实例。它接受一个包含游戏环境的列表作为参数,并返回一个并行化的环境对象。
综合起来,这段代码的目的是使用 SubprocVecEnv 创建多个并行运行的游戏环境,每个环境都使用相同的游戏名称和特定的游戏状态。这样可以在训练或评估过程中同时在多个环境中进行并行操作,以提高效率和性能。
3. env = retro.make()
问:解释下 env = retro.make(
game=game,
state=state,
use_restricted_actions=retro.Actions.FILTERED,
obs_type=retro.Observations.IMAGE
)
答:这段代码使用 OpenAI Retro 库创建了一个游戏环境。
下面是代码中的关键部分的解释:
1. `retro.make()`:这是 Retro 库中的一个函数,用于创建游戏环境。它接受几个参数来指定游戏名称、游戏状态和其他选项。
1. `game`:这是一个参数,表示游戏的名称。它指定了要创建的游戏环境所对应的游戏。
1. `state`:这是一个参数,表示游戏的状态。游戏状态是游戏的一个特定快照或初始状态。通过指定游戏状态,可以从特定的游戏进度或关卡开始。
1. `use_restricted_actions`:这是一个参数,用于指定游戏环境是否使用受限制的动作集。在 Retro 中,游戏通常提供了完整的动作空间,但有些动作可能是不必要或无效的。通过设置 `use_restricted_actions=retro.Actions.FILTERED`,可以使用经过筛选的动作集来减少动作空间的大小。
1. `obs_type`:这是一个参数,用于指定观测的类型。在这里,`obs_type=retro.Observations.IMAGE` 表示观测的类型为图像。这意味着游戏环境将返回图像作为观测结果。
综合起来,这段代码的目的是使用 Retro 库创建一个特定游戏和状态的游戏环境。它还指定了使用受限制的动作集和返回图像观测结果。这样,您可以在游