我一直在玩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学习更多的局限。