episode_number = 10000
for i in range(1,episode_number):
state = env.reset()
reward_count = 0
dropouts = 0
while True:
if random.uniform(0,1) < epsilon:
action = env.action_space.sample()
else:
action = np.argmax(q_table[state])
next_state, reward, done, _ = env.step(action)
old_value = q_table[state, action]
next_max = np.max(q_table[next_state])
next_value = (1-alpha)*old_value + alpha*(reward + gamma*next_max)
q_table[state,action] = next_value
state = next_state
if reward == -10:
dropouts += 1
if done:
break
reward_count += reward
if i%10 == 0:
dropout_list.append(dropouts)
reward_list.append(reward_count)
print("Episode: {}, reward {}, wrong dropout {}".format(i, reward_count,dropouts))我被要求加强这个代码,以展示奖励和惩罚的比较。它是如何工作的,我必须通过使这个代码显示在培训代理之前和培训后获得的奖励的比较来增强它。所绘制的图表必须重叠才能显示比较,但我找不到办法。我已经尝试了好几天了,但是找不到我想要的解决方案。我希望有人能在这方面帮助我。
如果需要创建新代码或单独的代码,那么请将结果进行比较,请告诉我。谢谢。
发布于 2022-08-31 09:33:14
我认为在做作next_value中缺少一个术语,它应该是next_value = (1-alpha)old_value +alpha(奖励+伽马*next_max-q_table(状态,动作))。
对于你想要做的情节,你可以在强化学习后,与你的代理人所获得的奖励同时进行交互绘制,这些奖励是由采取随机行动的代理人获得的。
我似乎没有被理解,但是您显示的代码是代理的学习阶段。
运行它之后,q_table包含与当前状态相关的每个操作的质量。
然后,给出了代理进程的算法。
initialize environment
done := false
while not done
s:= current state
a := argmax(q_table[s])
update s and done by making the action a我建议你检查一下本教程,其中涵盖了你所有的询问。
请随时查看帖子的评论部分,以了解有关情节的关切。
我希望我能帮上忙
祝你工作顺利!
https://stackoverflow.com/questions/73499472
复制相似问题