You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:43:12