游戏AI的难度
如果从深度学习的角度考虑,游戏AI的难度,取决于模型的训练次数。
所以难度高的游戏AI,就是训练次数多的模型,难度低的游戏AI,就是训练次数少的模型。
按照这个思路,我们才能真正的把控住游戏AI的难度,这样的AI也不会给人智障的感觉。
如何生成游戏AI模型
先不考虑模型的神经网络如何搭建,我们需要生成一个可以给cocos使用的模型,这个模型肯定是需要训练数据的,而训练数据可以是玩家的游戏数据,也可以是AI的游戏数据,这是一个闭环的逻辑。
关于如何训练生成模型,我想到了2个思路:
思路1:
步骤如下:
- 将游戏的有效数据样本保存为json文件。
- 在Python中读取json数据,传递给神经网络进行训练,最终我们会得到训练好模型。
- 将训练好的模型导入到游戏中,预测出一个输入值,游戏并使用这个输入值观察结果是否符合预期。
- 优点:
- 训练过程非常快,因为是在Python中训练的,计算性能肯定要快很多。
- 模型的训练跟游戏的运行环境无关,只要训练好模型,游戏只需要完善加载运行模型的逻辑即可。
- 缺点:
- 如果我们在使用游戏中发现对模型的预测结果不满意,可能就需要重复以上3个步骤,直到训练出一个符合预期的模型,步骤稍微有点繁琐。
- 将模型训练和数据样本采集隔离,从随机样本中收集到有效样本的样本,需要花费时间比较久,当然我们可以在第一次生成模型后直接放到游戏中使用,使用模型生成输入数据,这样可以减少生成有效样本数据的时间,顺着这个思路,就产生了思路2
思路2
我们直接在游戏中一边采样有效样本数据,一边训练模型,步骤如下:
- 游戏在得到有效的样本数据后,直接传递给神经网络去训练
- 经过一次训练后,会得到一个新的模型
- 我们直接使用优化后的模型,预测一个新的输入数据,观察这个数据样本是否是有效的,如果有效就重复步骤1,无效则重复步骤3
其实这就是在自我训练
- 优点:
- 所有环节都是在游戏中运行,工作流程不割裂。
- 玩家可以自己训练不同难度的模型,比较灵活,可能游戏还比较有趣。
- 缺点:
- 在游戏中训练模型,需要消耗一定的计算资源,好在对大部分的玩家来说,他们只需要使用模型。
- 需要找到支持游戏环境的深度学习框架。
什么是有效的数据样本呢?
以上2个思路中都提到有效的数据样本,我们收集举个例子:
我们以投篮球游戏为例:
- 篮筐的位置
- 篮球的位置
- 投球的方向
- 投球的力度
这些都是输入数据,都会直接影响是否命中篮筐
假如篮筐在(0,10,0)、篮球在(10,6,0)、投球方向为(-1,1,0)、投球力度为20,如果最终进球了,那么这组样本数据就是有效的,如果不进球,我们就要丢弃掉这个样本,因为我们的训练数据样本肯定都是正确的。
开整
基于以上的分析,我们最终的选择聚焦到TensorFlow.js,可以直接在浏览器中训练和使用机器学习模型。
安装
- html 直接使用
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script>
- npm
npm install @tensorflow/tfjs
可以看到针对小游戏都优化了