我有一个学校项目,是为一个2D赛车游戏构建一个AI,它将与其他几个AI竞争。
我们得到一张赛道的黑白位图图像,我们可以在收到地图后为我们的赛车选择基本属性(操控性,加速度,最高速度和刹车)。AI连接到游戏服务器,并以每秒几次的频率向服务器提供当前的加速度和转向数值。顺便说一下,我选择的语言是C ++。问题是
- 什么是最好的策略或算法(因为我想尝试并赢得比赛)? 我目前想到了一些在网上找到的想法以及我自己的一两个想法,但在开始编码之前,我希望我的视角是最好的。
- 关于这个主题有哪些好书?
- 我应该参考哪些网站?
回答:
对于这个问题,没有“正确答案”——它相当开放,许多不同的选择都可能奏效。
你可能需要研究强化学习,以此来让AI更好地确定如何在选择不同的控制统计数据后控制赛车。 强化学习模型可以训练计算机尝试开发一个良好的系统,以便根据底层的控制系统进行特定的操作。
要确定你要使用的控制方式,你可以使用某种形式的强化学习,或者你可能需要研究监督学习算法,这些算法可以尝试不同的控制组合,并查看它们对于特定地图的“拟合”程度。 例如,你可以将地图分成小块,然后尝试查看哪些控制方式在最多数量的块中表现良好。
在规划你想要采取的路径方面,A*是一种众所周知的用于查找最短路径的算法。 在你的情况下,我不确定它会有多大用处,但它是教科书式的知情搜索算法。
为了避开对手赛车手并试图将他们引入更棘手的情况,你可能需要开发某种对手建模系统。 通用投资组合是做到这一点的一种方式,尽管我不确定它们在这种情况下会有多大用处。 一种选择可能是围绕赛道和对手赛车开发一个势场,以帮助你的赛车尝试避开障碍物; 对于寻路来说,这实际上可能比A*更好。 如果你对战术动作感兴趣,那么直接的极小极大搜索可能是避免被困住或找到困住对手的方法的好方法。
我不是人工智能专家,但我认为以上链接可能是一个很好的起点。 祝你比赛好运!