我对2048游戏的双DQN算法从未学习过

时间:2017-07-06 07:24:43

标签: machine-learning tensorflow artificial-intelligence keras reinforcement-learning

我正在尝试制作Double-DQN算法来学习玩2048游戏。如果要检查代码,我的实现在GitHub中可用。 (https://github.com/codetiger/MachineLearning-2048

我的代码在基本级别之后没有学习。它无法实现超过256瓦。我的一些预测如下。

  1. 我正在使用随机播放器来训练代码。我想RL算法就是这样学习的。他们尝试所有可能的举动并从失败中吸取教训我疯狂的猜测是,因为我使用随机移动训练它,所以代码学得非常有限。
  2. 我尝试的最大剧集是4000.如何计算最佳剧集数量。
  3. 我的代码存在问题。
  4. 我无法通过我的方法确定问题。想对此有所了解。

    我的伪代码在这里。

        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()
    

1 个答案:

答案 0 :(得分:2)

我的两分钱,

  • RL算法无法随机学习。我建议你看看萨顿和巴托(第二版)'有关各种算法的详细说明。话虽如此,我并不认为您链接的git代码符合您的期望(为什么您有ES模块?您是否使用进化算法训练网络?)。您可能希望从简单而稳定的实现开始,例如https://yanpanlau.github.io/2016/07/10/FlappyBird-Keras.html

  • 2048对于简单的Q-network来说可能是一个难以学习的游戏,因为它需要长期规划。 DQN学习玩Pong或Breakout等控制/即时动作游戏要容易得多,但在需要一定规划的游戏(例如Pacman)上表现不佳。

    < / LI>