OpenAI Gym定义观测空间与Stable Baselines环境校验报错问题
报错原因排查与解决方案
第一次Discrete观测空间报错原因
你初始使用的Discrete观测空间仅支持返回单个整数作为观测,代表离散状态的索引值。但你的Broker_Node_Map是长度为46的数值列表,类型与Discrete空间要求完全不匹配,因此触发AssertionError: The observation returned by reset() method must be an int报错。
第二次Box观测空间报错原因
你切换为Box空间后仍报错,是因为存在两个参数不匹配的问题:
- 数值范围不匹配:你定义的Box空间下限
low=1,但你返回的观测数组中存在大量值为0的元素,超出了定义的数值范围 - 数据类型可能不匹配:你定义的Box空间dtype为
np.int64,如果返回的numpy数组没有强制指定dtype,默认生成的可能是np.int32等其他整数类型,校验时会因类型不一致报错
修复方案
- 修正观测空间的下限参数,匹配实际观测的数值范围:
import numpy as np from gym import spaces # 把low改为0,匹配你观测中存在0的实际情况 self.observation_space = spaces.Box(low=0, high=73, shape=(46,), dtype=np.int64)
- 在
reset方法中返回观测时,强制转换为对应dtype的numpy数组:
def reset(self, seed=None, options=None): # 兼容新版Gym的reset接口要求,可传入seed参数 super().reset(seed=seed) observed_State = np.array(self.Broker_Node_Map, dtype=np.int64) # 新版Gym要求reset返回(观测, 信息字典),旧版可以只返回观测,根据你使用的Gym版本调整 return observed_State, {}
- 同步修改
step方法中返回的观测,同样做dtype强制转换,避免step阶段触发同类校验错误。
内容的提问来源于stack exchange,提问作者SURABHI SHARMA
相关产品推荐
相关产品推荐

