如何解决用于 2 人游戏的深度 Q 学习 (DQN)
我想知道如何为 Tic Tac Toe 和 Connect 4 等两人游戏正确实现 DQN 算法。虽然我的算法相对较快地掌握了 Tic Tac Toe,但我无法在 Connect 4 上获得很好的结果。代理是如果有机会,学习如何快速获胜,但它只在中心发挥作用。它无法检测第一列和最后一列中的威胁。我正在使用带内存重放的 DDQN。此外,teacher
和 student
指的是两个实力不同的代理,而老师经常被新学生取代。我的算法看起来简化如下:
for i in range(episodes):
observation = env.reset()
done = False
while not done:
if env.turn == 1:
action = student.choose_action(observation)
observation_,reward,done,info = env.step(action)
loss = student.learn(observation,action,observation_,done))
observation = observation_
else:
action = teacher.choose_action(-observation)
observation_,info = env.step(action)
observation = observation_
对于玩家“o”的观察结果为 -1,对于玩家“x”为 1,对于空玩家为 0。代理学习扮演玩家“x”并通过action = teacher.choose_action(-observation)
找到玩家“o”的最佳移动。我希望这很清楚。
更新规则如下:
# Get predicted q values for the actions that were taken
q_pred = Q_eval.forward(state,action)
# Get Q value for opponent's next move
state_ *= -1.
q_next = Q_target.forward(state_,max_action)
# Update rule
q_target = reward_batch - gamma * q_next * terminal
loss = Q_eval.loss(q_pred,q_target)
我使用-gamma * q_next * terminal
,因为如果对手在下一步中获胜,则奖励为负。我是否遗漏了任何重要的东西,还是只是超参数调整的问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。