0

i am building an RL agent for which the model is defined:

def build_model(states, actions):
azioni = list(actions)
model = Sequential()
model.add(Dense(4, activation='relu', input_shape=[len(azioni)]))
model.add(Dense(4, activation='relu'))
return model

The action.space is:

 self.action_space=gym.spaces.Tuple(tuple([gym.spaces.Discrete(3)]*4 ))
    

my action space consists of 4 action for 4 agent, where agent is a list of 4 object agent.

Then define Agent:

def build_agent(model, actions):
policy = BoltzmannQPolicy()
memory = SequentialMemory(limit=50000, window_length=1)
dqn = DQNAgent(model=model, memory=memory, policy=policy,
              nb_actions=actions, nb_steps_warmup=10, target_model_update=1e-2)
return dqn

Whine I try to build the Agent:

dqn = build_agent(model, actions)

I get this error:

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-98-512746ffa1dc> in <module>
 11     return dqn
 12 
 ---> 13 dqn = build_agent(model, actions)
 14 dqn.compile(Adam(lr=1e-3), metrics=['mae'])
 15 dqn.fit(env, nb_steps=50000, visualize=False, verbose=1)

 <ipython-input-98-512746ffa1dc> in build_agent(model, actions)
  8     memory = SequentialMemory(limit=50000, window_length=1)
  9     dqn = DQNAgent(model=model, memory=memory, policy=policy,
 ---> 10                   nb_actions=actions, nb_steps_warmup=10,     target_model_update=1e-2)
  11     return dqn
  12 

  ~/PycharmProjects/pythonProject6/venv/lib/python3.6/site-packages/rl/agents/dqn.py   in __init__(self, model, policy, test_policy, enable_double_dqn, enable_dueling_network, dueling_type, *args, **kwargs)
 109             raise ValueError('Model "{}" has more than one output. DQN expects a model that has a single output.'.format(model))
 110         if tuple(model.output.shape) != list((None, self.nb_actions)):
 --> 111             raise ValueError('Model output "{}" has invalid shape. DQN expects a model that has one dimension for each action, in this case  {}.'.format(model.output, self.nb_actions))
 112 
 113         # Parameters.

 ValueError: Model output "Tensor("dense_16/Relu:0", shape=(?, 4), dtype=float32)" has invalid shape. DQN expects a model that has one dimension for each action, in this case (1, 2, 1, 0).

I cheched the value of model.output.shape and action:

print(model.output_shape)
#(None, 4)


print(actions)
#(1, 2, 1, 0)

I don t know how to adapt the action list to assing to my agents with the model.output_shape. Since my space_action is given by a list where space_action[0] is the action of agent[0], action[1] is the action of agent[1] etc.

thanks for the assist.

0 Answers0