Вопрос или проблема
Я пытаюсь создать алгоритм обучения с подкреплением, который может играть в игру MasterMind. Я использую пространство MultiDiscrete для действий и наблюдений. Пространство действий занимает 4 слота с 6 цветами каждый, а пространство наблюдений — это 2×4. Я создал собственную среду для соединения с моей программируемой игрой. Среда еще не готова из-за возникающей ошибки. Возможно, кто-то сможет помочь мне решить эту проблему.
import gym as gym
from gym import Env
from gym.spaces import Discrete, Box, MultiDiscrete, Dict
from stable_baselines3.common.policies import MultiInputActorCriticPolicy
action_space = MultiDiscrete(np.array([6,6,6,6]), dtype=int)
observation_space = MultiDiscrete(np.array([4,4]), dtype=int)
...
class MasterMindEnv(Env):
def __init__(self) -> None:
super(MasterMindEnv, self).__init__()
self.action_space = action_space
self.observation_space = observation_space
def step(self, action:np.ndarray):
pass_action(action)
output = get_output()
print(output)
reward = output[0] + output[1]
print(reward)
done = False
info = {}
return observation_space.sample(), 1, done, info
def reset(self):
return self.observation_space.sample()
...
model = A2C(MultiInputActorCriticPolicy, env)
model.learn(total_timesteps=1000)
А ошибка:
AttributeError Traceback (most recent call last)
c:\...\model.ipynb Zelle 10 in <module>
----> 1 model = A2C(MultiInputActorCriticPolicy, env)
2 model.learn(total_timesteps=1000)
File c:\...\Python310\lib\site-packages\stable_baselines3\a2c\a2c.py:126, in
A2C.__init__(self, policy, env, learning_rate, n_steps, gamma, gae_lambda, ent_coef,
vf_coef, max_grad_norm, rms_prop_eps, use_rms_prop, use_sde, sde_sample_freq,
normalize_advantage, tensorboard_log, create_eval_env, policy_kwargs, verbose, seed,
device, _init_setup_model)
123 self.policy_kwargs["optimizer_kwargs"] = dict(alpha=0.99,
eps=rms_prop_eps, weight_decay=0)
125 if _init_setup_model:
--> 126 self._setup_model()
File c:\...\Python310\lib\site-
packages\stable_baselines3\common\on_policy_algorithm.py:123, in
OnPolicyAlgorithm._setup_model(self)
112 buffer_cls = DictRolloutBuffer if isinstance(self.observation_space,
gym.spaces.Dict) else RolloutBuffer
114 self.rollout_buffer = buffer_cls(
115 self.n_steps,
116 self.observation_space,
(...)
121 n_envs=self.n_envs,
122 )
--> 123 self.policy = self.policy_class( # pytype:disable=not-instantiable
...
--> 258 for key, subspace in observation_space.spaces.items():
259 if is_image_space(subspace):
260 extractors[key] = NatureCNN(subspace, features_dim=cnn_output_dim)
AttributeError: 'MultiDiscrete' object has no attribute 'spaces'
У меня была такая же проблема, когда я тестировал свою пользовательскую среду. Все это происходит из-за MultiDiscrete пространства наблюдений.
self.observation_space = MultiDiscrete(max_machine_states_vec + [scheduling_horizon+2]) ### Пространство наблюдений это 0,...,L для каждой машины + состояние планирования включая "ns" (None = "ns")
Вам не нужно менять пространство наблюдений, измените алгоритм, который вы используете. A2C или PPO не могут работать с MultiDiscrete пространствами наблюдений. DQN может с ними работать. Поэтому ваш код должен импортировать DQN.
from stable_baselines3 import DQN
# Все промежуточные части кода
model = DQN('MlpPolicy', env, verbose = 1)
Надеюсь, ваша проблема решена.
Ответ или решение
Ошибка, с которой вы столкнулись в вашем коде Reinforcement Learning, связана с ограничениями, касающимися обработки пространства наблюдения MultiDiscrete
в некоторых алгоритмах обучения, таких как A2C или PPO. Эти алгоритмы не поддерживают MultiDiscrete пространство наблюдения, что приводит к ошибке AttributeError: ‘MultiDiscrete’ object has no attribute ‘spaces’.
Проблема
Ваш код создает кастомную среду для игры MasterMind, где вы определяете Action Space как MultiDiscrete([6, 6, 6, 6])
и Observation Space как MultiDiscrete([4, 4])
. При попытке использования алгоритма A2C возникает ошибка из-за несовместимости A2C с MultiDiscrete Observation Space.
Решение
Для решения данной проблемы вам потребуется заменить используемый алгоритм A2C на тот, который поддерживает MultiDiscrete пространство наблюдения. В данном случае, алгоритм DQN является подходящим выбором, так как он может работать с MultiDiscrete Observation Space.
Шаги для исправления:
-
Импортируйте алгоритм DQN из библиотеки stable_baselines3:
from stable_baselines3 import DQN
-
Инициализируйте модель с использованием алгоритма DQN вместо A2C:
model = DQN('MlpPolicy', env, verbose=1)
-
Запустите обучение:
model.learn(total_timesteps=1000)
Преимущества и Ожидаемый Результат
Использование алгоритма DQN обеспечит совместимость с вашим MultiDiscrete пространством наблюдения. Это позволит избежать ошибок и наладить процесс обучения RL-алгоритма для игры в MasterMind. Замена алгоритма поможет достичь эффективности в обучении модели, избегая переписывания логики вашей кастомной среды.
Заключение
Изменив подход к выбору алгоритма, вы сможете успешно настроить и обучить RL-агента для вашей задачи. Убедитесь, что используете алгоритмы и методы, совместимые с определенным пространством действия и наблюдения, чтобы минимизировать вероятность подобных ошибок в будущем.