我正在尝试制作Double-DQN算法来学习玩2048游戏。如果要检查代码,我的实现在GitHub中可用。 (https://github.com/codetiger/MachineLearning-2048)
我的代码在基本级别之后没有学习。它无法实现超过256瓦。我的一些预测如下。
我无法通过我的方法确定问题。想对此有所了解。
我的伪代码在这里。
for e in range(EPISODES):
gameEnv.Reset()
state = gameEnv.GetFlatGrid()
state = np.reshape(state, [1, state_size])
reward = 0.0
prevMaxNumber = 0
while True:
action = agent.get_action(state)
(moveScore, isValid) = gameEnv.Move(action + 1)
next_state = gameEnv.GetFlatGrid()
next_state = np.reshape(next_state, [1, state_size])
if isValid:
# Reward for step score
reward += moveScore
# Reward for New Max Number
if gameEnv.GetMaxNumber() > prevMaxNumber:
reward += 10.0
prevMaxNumber = gameEnv.GetMaxNumber()
gameEnv.AddNewNumber()
else:
reward = -50.0
done = gameEnv.CheckGameOver()
if done:
reward = -100.0
agent.append_sample(state, action, reward, next_state, done)
agent.train_model()
state = next_state
if done:
agent.update_target_model()
答案 0 :(得分:2)
我的两分钱,
RL算法无法随机学习。我建议你看看萨顿和巴托(第二版)'有关各种算法的详细说明。话虽如此,我并不认为您链接的git代码符合您的期望(为什么您有ES模块?您是否使用进化算法训练网络?)。您可能希望从简单而稳定的实现开始,例如https://yanpanlau.github.io/2016/07/10/FlappyBird-Keras.html。
2048对于简单的Q-network来说可能是一个难以学习的游戏,因为它需要长期规划。 DQN学习玩Pong或Breakout等控制/即时动作游戏要容易得多,但在需要一定规划的游戏(例如Pacman)上表现不佳。
< / LI>