在没有健身房环境和调用适合的情况下训练 keras-rl DQNAgent

问题描述

我在自动驾驶领域有一个基于代理的模型,我有 50 多个不同的代理。其中一个是“聪明人”,他使用 DQN 来选择操作,该 DQN 是通过 DQNAgent 包中的 keras-rl 定义的。由于我有多个由模型运行的代理,我不能使用 gym.Env,因为实际上模型执行了代理的 step 方法,但不是一个代理像通常那样执行环境的 step 方法在强化学习中。

所以。我在 keras DQNAgent 类上做了一个小包装:

class AutoDQN():
  def __init__(self,actions_number=25,state_shape=(7,)):
    model = self.create_default_model(actions_number,state_shape)

    memory = SequentialMemory(limit=10000,window_length=1)

    policy = LinearannealedPolicy(epsgreedyQPolicy(),attr='eps',value_max=1.,value_min=.1,value_test=.05,nb_steps=1000)

    gamma = 0.99

    nb_actions = actions_number
    batch_size = 32
    nb_steps_warmup = 50
    target_model_update = 0.01

    lr = 0.001
    metrics = ['mse']
    optimizer = Adam(lr=lr)

    self.dqn = DQNAgent(model=model,policy=policy,memory=memory,nb_actions=nb_actions,batch_size=batch_size,nb_steps_warmup=nb_steps_warmup,target_model_update=target_model_update,gamma=gamma)
    self.dqn.training = True
    self.dqn.compile(optimizer=optimizer,metrics=metrics)


  def create_default_model(self,actions_number,state_shape):
    model = Sequential()
    model.add(Flatten(input_shape=(1,) + state_shape))
    model.add(Dense(1024))
    model.add(Activation('relu'))
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dense(128))
    model.add(Activation('relu'))
    model.add(Dense(actions_number))
    model.add(Activation('linear'))
    return model
    
  def act(self,current_state):
    return self.dqn.forward(current_state)

  def observe(self,reward,terminal):
    return self.dqn.backward(reward,terminal)

因为我也知道 Q-learning 和 DQN 的理论,所以我认为调用 forward 类的 backwardDQNAgent 方法就足以完成这项工作。还有一些保存权重的方法,我在 1000 次迭代后保存它们,target_update 也完成了。有 25 个离散动作,状态有 7 个数值。在她计算出代理的新位置后从模型接收奖励,然后她返回一个奖励,该奖励返回到 backward 方法中的 DQN。

从理论的角度来看,据我了解,这正是 DQN 的实际工作原理,因为在下面有贝尔曼方程的所有组件,至少我从查看 keras-rl代码中得到了这样的印象github上的代码。是的,我不使用 fit 方法,因为我不使用健身房环境,但我认为它实际上不是 100% 需要的。但是看着我的 DQN 测试的糟糕结果,我决定问一个问题:我的尝试是否失败,即没有 gym.Envfit 方法根本不可能?或者也许有更聪明的方法来调整它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)