我正在尝试为http://riddles.io上的 Connect 4 比赛制作一个机器人
我的机器人并不可怕,就像它正在爬梯子一样,但它无法与获胜的机器人竞争。
我正在使用与一个隐藏层完全连接的神经网络。在内部,它使用 sigmoid 函数作为每个神经元中的激活器。我已经用 TD-Lambda 反向传播训练了超过 500,000 场比赛。将 alpha 和 beta 值(即学习率)设置为0.1
每个,并将资格跟踪的 lambda 设置为0.7
。有 2 个输出节点,一个用于为玩家 1 提供该位置的值,另一个用于为玩家 2 提供该位置的值。在获胜时,这些节点会反向传播,输赢-1
和1
赢一个平局,它们都用 a 反向传播0
。
每个神经元也有一个偏差输入和权重。
所有权重都初始化为 之间的随机值+-4*sqrt(6/totalNumberWeights)
。
棋盘状态在网络中表示为:
- 对于板上的每个空间,2 个值:
- 对于第一个值,如果玩家 1 占据该空间,则为 a
1
,否则为0
- 对于第二个值,如果玩家 2 占据该空间,则为 a
1
,否则为0
- 如果两者都是
0
,那就意味着它是一个免费的地方
- 对于第一个值,如果玩家 1 占据该空间,则为 a
- 对于板上的每个空间,另外 2 个值:
- 对于第一个值,如果在此处放置令牌会导致玩家 1 的连接 4,则为 a
1
,否则为0
- 对于第二个值,如果放置一个令牌会让玩家 2 获得连接 4,那么它
1
是0
- 因此,如果没有人会通过在此处放置令牌而获胜,那么
0
这两个输入就是两个值
- 对于第一个值,如果在此处放置令牌会导致玩家 1 的连接 4,则为 a
- 两个最终值,第一个表示是否轮到玩家 1,第二个表示是否轮到玩家 2
当我的机器人在玩时,我看到的是它做出了我认为有些聪明的动作,就像它正在为水平和对角线移动做准备一样。
但是,当另一个机器人在下一步获得 Connect 4 时,我的机器人无法在此处放置令牌。组合中最好的机器人似乎能够将自己设置为连续获得三个并且两侧都有可用空间,因此它肯定会获得 Connect 4。同样,我的机器人似乎无法看到这一点.
我认为问题在于,除了可能是我的学习率之外,我以一种糟糕的方式代表了董事会。是否有更好的方法向网络表示它,以便它可以更准确地估计板状态的价值,并且不会无法识别直接的 Connect 4 威胁?