首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Agent在DQN强化学习中总是采取相同的动作。

Agent在DQN强化学习中总是采取相同的动作。
EN

Data Science用户
提问于 2019-10-04 15:02:21
回答 2查看 4K关注 0票数 3

我使用DQN算法训练了一个RL代理。在20000集之后,我的奖励就会聚在一起了。现在,当我测试这个代理时,代理总是采取相同的操作,而不管状态如何。我觉得这很奇怪。有人能帮我做这个吗。有没有理由,任何人都能想到为什么代理人会这样做?

奖励地块

当我测试代理时

代码语言:javascript
复制
state = env.reset()
print('State: ', state)

state_encod = np.reshape(state, [1, state_size])
q_values = model.predict(state_encod)
action_key = np.argmax(q_values)
print(action_key)
print(index_to_action_mapping[action_key])
print(q_values[0][0])
print(q_values[0][action_key])

q_values_plotting = []
for i in range(0,action_size):
    q_values_plotting.append(q_values[0][i])


plt.plot(np.arange(0,action_size),q_values_plotting)

每次它给出相同的q_values图时,即使初始化的状态是不同的,每个time.Below都是q_Value图。

测试:

代码

代码语言:javascript
复制
test_rewards = []
for episode in range(1000):
    terminal_state = False
    state = env.reset()
    episode_reward = 0
    while terminal_state == False:
        print('State: ', state)
        state_encod = np.reshape(state, [1, state_size])
        q_values = model.predict(state_encod)
        action_key = np.argmax(q_values)
        action = index_to_action_mapping[action_key]
        print('Action: ', action)
        next_state, reward, terminal_state = env.step(state, action)
        print('Next_state: ', next_state)
        print('Reward: ', reward)
        print('Terminal_state: ', terminal_state, '\n')
        print('----------------------------')
        episode_reward += reward
        state = deepcopy(next_state)
    print('Episode Reward' + str(episode_reward))
    test_rewards.append(episode_reward)

plt.plot(test_rewards)

谢谢。

EN

回答 2

Data Science用户

发布于 2019-10-17 07:46:18

这似乎很明显,但您是否尝试过使用Boltzmann发行版来进行操作选择,而不是使用argmax?这是众所周知的鼓励勘探,可以通过将行动策略设置为

p(a|s) = \frac{\exp(\beta Q(a,s)}{\sum_{a'} \exp(\beta Q(a',s))},

其中,\beta是温度参数,控制着勘探开发的权衡.这也被称为softmax分布。

如果放入代码,这将是这样的:

代码语言:javascript
复制
beta = 1.0
p_a_s = np.exp(beta * q_values)/np.sum(np.exp(beta * q_values))
action_key = np.random.choice(a=num_act, p=p_as)

这可能会导致数值不稳定,因为指数,但这是可以处理的,例如,首先减去最高Q值:

代码语言:javascript
复制
q_values = q_values - np.max(q_vaues)
票数 5
EN

Data Science用户

发布于 2019-10-16 06:30:24

  • agent所采取的行动可以是最优的行动。
  • 如果输入相同的状态,您可能会得到相同的奖励。可能是状态未被正确更新。由于next_state是由代理提供的,请检查深度复制函数。
  • 模型可能不是在更新它的参数或它的Q值。检查模型如何更新其参数和Q值。
票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/61262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档