使用Gym的Lunar Lander演示代码时出现错误
问题解决
1. 修复policy未定义错误
代码中的policy(observation)是占位符,必须先定义这个策略函数才能运行。如果只是测试环境,可先使用简单的随机策略示例:
import gym import random # 定义策略函数:随机选择动作(LunarLander-v2动作空间为0-3的离散值) def policy(observation): return random.randint(0, 3) env = gym.make("LunarLander-v2", render_mode='human', new_step_api=True) observation, info = env.reset(seed=42, return_info=True) for _ in range(1000): action = policy(observation) # 新版API返回5个值:观测、奖励、终止状态、截断状态、额外信息 observation, reward, terminated, truncated, info = env.step(action) # 终止或截断时重置环境 if terminated or truncated: observation, info = env.reset(return_info=True) env.close()
2. 解决Gym API弃用警告
原代码使用了旧版step API,该API会被逐步淘汰,按以下方式切换到新版API即可消除警告:
- 创建环境时添加
new_step_api=True参数 - 调用
env.step(action)时接收5个返回值:observation, reward, terminated, truncated, info - 用
terminated or truncated替代原代码中的done判断结束条件
错误说明
NameError: name 'policy' is not defined:代码调用了未定义的policy函数,必须先实现该函数(可以是随机策略、规则策略或训练后的智能体策略)。- 弃用警告:Gym旧版step API将不再维护,新版API拆分了结束状态的判断逻辑,更清晰规范。
内容的提问来源于stack exchange,提问作者Lawrie Darbyshire
相关产品推荐
相关产品推荐

