Gym env.step()报错:int与str不支持>=比较问题求助
解决Gym MountainCar-v0中TimeLimit包装器的TypeError问题
问题描述
基于Gym库开发MountainCar-v0环境的强化学习代码时,调用env.step()持续触发TypeError,错误信息为:
TypeError: '>=' not supported between instances of 'int' and 'str'
报错栈显示问题源于TimeLimit包装器中的self._elapsed_steps >= self._max_episode_steps比较操作。
错误原因
代码中环境创建方式有误:
env = gym.make("MountainCar-v0", 'rgb_array')
gym.make()的第二个参数为关键字参数字典,直接传入字符串'rgb_array'会导致Gym错误解析参数,使得TimeLimit包装器的_max_episode_steps被设置为字符串类型,后续与整数类型的_elapsed_steps比较时触发类型错误。
解决方案
1. 修正环境创建代码
将环境创建语句改为指定render_mode关键字参数:
env = gym.make("MountainCar-v0", render_mode='rgb_array')
2. 适配Gym新版本的step返回值(可选但推荐)
Gym 0.26+版本中,env.step()的返回值为(observation, reward, terminated, truncated, info),原代码变量名映射错误,建议修正为:
next_state, reward, terminated, truncated, info = env.step(action) done = terminated or truncated # 合并终止状态判断
完整修正后的关键代码片段
# 修正环境创建 env = gym.make("MountainCar-v0", render_mode='rgb_array') initial_state, info = env.reset() # 新版本reset返回(observation, info) # 修正step返回值处理 while not done: action = epsilon_greedy_action_selection(epsilon, q_table, discretized_state) next_state, reward, terminated, truncated, info = env.step(action) done = terminated or truncated # 正确判断是否结束 position, velocity = next_state next_state_discretized = discretize_observation(next_state, BINS) # ... 其余逻辑不变
内容的提问来源于stack exchange,提问作者Jm3s
相关产品推荐
相关产品推荐

