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

当我测试代理时
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图。

测试:
代码
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)
谢谢。
发布于 2019-10-17 07:46:18
这似乎很明显,但您是否尝试过使用Boltzmann发行版来进行操作选择,而不是使用argmax?这是众所周知的鼓励勘探,可以通过将行动策略设置为
其中,\beta是温度参数,控制着勘探开发的权衡.这也被称为softmax分布。
如果放入代码,这将是这样的:
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值:
q_values = q_values - np.max(q_vaues)发布于 2019-10-16 06:30:24
https://datascience.stackexchange.com/questions/61262
复制相似问题