DDQN无法解决井字游戏

时间:2020-06-25 08:01:44

标签: python deep-learning neural-network reinforcement-learning dqn

很久以来,我一直在尝试使用DDQN方法解决井字游戏。我花了一些时间来填补知识空缺,但是现在我的代码似乎还不错。但是,由于这是两人游戏,所以我不确定如何训练特工。目前,我让代理人使用 X 进行游戏,并让 O 由随机玩家进行游戏,后者会随机但合法地移动,而代理人也可以进行非法移动并获得负面的回报。步进函数如下所示:

def step(self, action):
    reward = 0.
    info = None
    if self.state[action] != 0:  # illegal move
        reward = -1.
        self.done = True
        return self.state, reward, self.done, info
    self.state[action] = self.turn  # make move
    self.turn = -self.turn
    self.state[-1] = self.turn  # update last state, which refers to the turn
    if self.is_winner():  # check for win
        reward = 1.0
        self.done = True
    elif self.state.count(0) == 0:  # check for draw
        reward = 1.0
        self.done = True
        info = 'draw'
    elif self.state.count(0) == 1: # check for draw in final move of the opponent
        final_action = self.state.index(0)
        self.state[final_action] == self.turn
        if not self.is_winner():
            reward = 1.0
            info = 'draw'
            self.done = True
    return self.state, reward, self.done, info

因此,如果座席获胜,平局或如果他下棋,则会获得正数奖励,这将导致随机玩家下一个棋局产生平局。

不幸的是,DDQN没有收敛。我得到的平均奖励不能超过0.5。为了跟踪培训进度,我让代理在当前参数和epsilon为0.01的情况下,每1000场游戏可以玩1000场游戏。有时,在找到好的策略之后,平均值突然变为负值,因此它似乎也相当不稳定。

我的超参数如下:

lr = < 0.001 (I trained many)
memory size = 100.000
target network update rate = 1000
epsilon start = 1.0, epsilon end = 0.1
batch size = 512

有人在我可以做得更好的方面有技巧吗?对于井字游戏这样的简单游戏,预计会有多少训练纪元?

1 个答案:

答案 0 :(得分:0)

嗨,我遇到了同样的问题,但是经过几次尝试,我才能够针对3x3、4x4训练DDQN,并且在5x5游戏板上也观察到了一些不错的结果。在这里https://github.com/hreso110100/RL-Tic_tac_toe

检查我的代码
相关问题