自定义Gym环境中observation space含义及断言错误排查
问题解答
1. 自定义Gym环境中的observation space(观测空间)是什么?
观测空间是Gym环境规定的智能体每一步能感知到的环境状态的结构与范围,它明确了观测数据的类型、形状、取值边界。比如离散空间(Discrete)对应有限可选值,连续空间(Box)对应连续数值范围,Tuple或Dict用于组合不同类型的子空间。智能体的决策完全基于该空间输出的观测数据,因此必须与实际返回的观测严格匹配。
2. 断言错误的原因及解决方法
你的观测空间定义与step()返回的观测完全不匹配,这是报错的核心:
- 你定义的
self.observation_space = spaces.Tuple((spaces.Discrete(1875), spaces.Discrete(9)))是包含两个离散元素的元组空间,要求返回的观测是长度为2的元组(比如(x, y),x为0-1874的整数,y为0-8的整数)。 - 但
step()返回的观测形状是(1,1875,9),属于三维张量,包含1个样本、1875条K线、每条K线9个特征。
正确定义方式
根据你的K线数据结构,应该使用Box空间(K线特征多为连续数值):
from gym import spaces import numpy as np def __init__(self,pcl,fcl,plb,ts): ... # 假设每个特征的取值范围是0到对应最大值,需根据实际数据调整边界 low = np.zeros((1875, 9)) high = np.array([[10000]*9 for _ in range(1875)]) # 示例边界,按需修改 self.observation_space = spaces.Box(low=low, high=high, dtype=np.float32)
同时,step()返回的观测需去掉多余的维度,直接返回(1875,9)形状的数组,与定义的空间形状一致。
内容的提问来源于stack exchange,提问作者Fenil Gajera
相关产品推荐
相关产品推荐

