深度学习在游戏中的应用

198 阅读4分钟

游戏AI的难度

如果从深度学习的角度考虑,游戏AI的难度,取决于模型的训练次数。

所以难度高的游戏AI,就是训练次数多的模型,难度低的游戏AI,就是训练次数少的模型。

按照这个思路,我们才能真正的把控住游戏AI的难度,这样的AI也不会给人智障的感觉。

如何生成游戏AI模型

先不考虑模型的神经网络如何搭建,我们需要生成一个可以给cocos使用的模型,这个模型肯定是需要训练数据的,而训练数据可以是玩家的游戏数据,也可以是AI的游戏数据,这是一个闭环的逻辑。

关于如何训练生成模型,我想到了2个思路:

思路1:

步骤如下:

  1. 将游戏的有效数据样本保存为json文件。
  2. 在Python中读取json数据,传递给神经网络进行训练,最终我们会得到训练好模型。
  3. 将训练好的模型导入到游戏中,预测出一个输入值,游戏并使用这个输入值观察结果是否符合预期。
  • 优点:
    • 训练过程非常快,因为是在Python中训练的,计算性能肯定要快很多。
    • 模型的训练跟游戏的运行环境无关,只要训练好模型,游戏只需要完善加载运行模型的逻辑即可。
  • 缺点:
    • 如果我们在使用游戏中发现对模型的预测结果不满意,可能就需要重复以上3个步骤,直到训练出一个符合预期的模型,步骤稍微有点繁琐。
    • 将模型训练和数据样本采集隔离,从随机样本中收集到有效样本的样本,需要花费时间比较久,当然我们可以在第一次生成模型后直接放到游戏中使用,使用模型生成输入数据,这样可以减少生成有效样本数据的时间,顺着这个思路,就产生了思路2

思路2

我们直接在游戏中一边采样有效样本数据,一边训练模型,步骤如下:

  1. 游戏在得到有效的样本数据后,直接传递给神经网络去训练
  2. 经过一次训练后,会得到一个新的模型
  3. 我们直接使用优化后的模型,预测一个新的输入数据,观察这个数据样本是否是有效的,如果有效就重复步骤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

可以看到针对小游戏都优化了

image.png