x-o AI brain.js

时间:2019-12-30 15:29:11

标签: javascript machine-learning brain.js

我一直在玩Brain.js和AI,所以我认为创建一个可以玩一个简单的X-o游戏的AI会很有趣,在该游戏中,AI在每次移动/游戏后都可以轻松学习。但是我有一些麻烦。

我:我的训练模型应该是什么样的?

II:应该为AI提供单个动作还是当前板的整个状态?

III:AI只是在预测对方的举动还是在寻找最佳结果的位置?防止其他玩家获胜(平局)与争取获胜之间有区别。这是强化学习吗?

IV:AI应该如何知道目标结果是什么?

V:我如何代表AI理解网格上的每个坐标和每个玩家(x,o)。

VI:只要AI尝试产生类似于tarining模型的结果,它是否应该关心它是X还是O?

我问所有这些问题的原因是因为我对AI的知识有限。 在最初的训练模型中,我将图块表示为三个可能的值。 0,.1,.2,如果为.1,则被玩家x占用,.2,其被玩家o占用,0表示未被占用。瓷砖本身是x / 10 y / 10,我什至不确定这是否是正确的方法。但是从本质上讲,训练模型就是这样。

input: [.1,.1,.1]//x,y,player 1
output: [0,0,.2]//x,y,player 2
input: [.2,0,.1]
output: [.1,.1,.2]

以此类推。

此模型无法正常运行有几个原因。它无法正确预测下一个地点。它不知道是x还是o。

然后,我尝试了另一种模型,将整个电路板的状态反馈给它。希望它能带我回到下一个要占据的位置。我给了它三个状态作为训练数据。但这也行不通,只是导致NaN

trainingdata.push({
    input: 
        [{
            xpostion:0,
            yposition:0,
            val:0
        },{
            xpostion:.1,
            yposition:0,
            val:0
        },{
            xpostion:.2,
            yposition:0,
            val:0
        },{
            xpostion:0,
            yposition:.1,
            val:0
        },{
            xpostion:.1,
            yposition:.1,
            val:.1
        },{
            xpostion:.2,
            yposition:.1,
            val:0
        },{
            xpostion:0,
            yposition:.2,
            val:0
        },{
            xpostion:.1,
            yposition:.2,
            val:0
        },{
            xpostion:.2,
            yposition:.2,
            val:0
    }],
    output: [{xpostion:0,yposition:0,val:.2}]
});

所以基本上我回到正题了。我的目标是将每次打法/每局比赛都传递到训练数据上,以便AI学习更多的局限。

0 个答案:

没有答案