自定义Gym环境训练PPO模型时遇AttributeError问题求助
问题排查与解决方法
1. 核心错误原因:环境未正确实例化
你触发的'function' object has no attribute 'unwrapped'错误,大概率是因为传入PPO的env是环境类(shower)而非实例化后的对象(shower())。必须先创建环境实例再传入模型:
env = shower() # 实例化自定义环境 model = PPO("MlpPolicy", env, verbose=1, tensorboard_log=log_path)
2. 修正自定义环境的规范问题
你的shower类存在多处不符合Stable Baselines3要求的细节,逐一修正:
(1)修正属性名大小写
框架要求环境必须包含**小写的action_space和observation_space**属性,你当前写的Action_Space(大写A)无法被识别,改为:
self.action_space = Discrete(3) # 改为小写action_space self.observation_space = Box(low=0, high=100, shape=(1,), dtype=np.float32)
(2)统一状态的数组类型
__init__中初始化的self.state是整数,而reset返回的是numpy数组,会导致状态类型不一致。修改__init__中的状态初始化:
self.state = np.array([38 + random.randint(-3, 3)], dtype=np.float32)
同时step方法中保持状态为数组类型:
self.state += (action - 1) # 数组直接做元素运算
(3)添加状态边界裁剪(可选但推荐)
为避免状态超出observation_space的范围,在step中添加裁剪逻辑:
self.state = np.clip(self.state, self.observation_space.low, self.observation_space.high)
(4)修正后的完整环境代码
import numpy as np import random from gym import spaces class shower: def __init__(self): self.action_space = spaces.Discrete(3) self.observation_space = spaces.Box(low=0, high=100, shape=(1,), dtype=np.float32) self.state = np.array([38 + random.randint(-3, 3)], dtype=np.float32) self.shower_length = 60 def step(self, action): self.state += (action - 1) self.shower_length -= 1 self.state = np.clip(self.state, self.observation_space.low, self.observation_space.high) reward = 1 if 37 <= self.state[0] <= 39 else -1 done = self.shower_length <= 0 info = {} return self.state, reward, done, info def render(self): pass def reset(self): self.state = np.array([38 + random.randint(-3, 3)], dtype=np.float32) self.shower_length = 60 return self.state
3. 验证环境合规性
用Stable Baselines3自带工具检查环境是否符合规范,避免隐藏问题:
from stable_baselines3.common.env_checker import check_env env = shower() check_env(env) # 无报错则说明环境符合要求
4. 重新训练模型
验证通过后,即可正常初始化并训练PPO模型:
log_path = "./ppo_shower_logs/" model = PPO("MlpPolicy", env, verbose=1, tensorboard_log=log_path) model.learn(total_timesteps=100000)
内容的提问来源于stack exchange,提问作者mohd mafaz
相关产品推荐
相关产品推荐

