使用 TFLite 插件构建 Flutter 棋盘游戏
2023 年 10 月 18 日

发布者:Wei Wei,开发者倡导者

在我们之前的博文中 使用 TensorFlow 构建棋盘游戏应用程序:一个新的 TensorFlow Lite 参考应用程序使用 JAX 构建强化学习代理,并使用 TensorFlow Lite 将其部署到 Android 上,我们展示了如何分别使用 TensorFlow、TensorFlow Agents 和 JAX 训练强化学习 (RL) 代理,然后使用 TensorFlow Lite 将转换后的 TFLite 模型部署到 Android 应用程序中,以玩简单的棋盘游戏“飞机攻击”。

虽然这些端到端教程对 Android 开发人员很有帮助,但我们从 Flutter 开发人员社区那里听说,将应用程序跨平台化将很有趣。受最近正式发布的 Flutter 的 TensorFlow Lite 插件 的启发,我们将编写最后一个教程并将应用程序移植到 Flutter。
Flow Chart illustrating training a Reinforncement Learning (RL) Agent with TensorFlow, TensorFlow Agents and JAX, deploying the converted model in an Android app and Flutter using the TensorFlow Lite plugin

由于我们已经使用 TensorFlow 训练了模型并将其转换为 TFLite,因此我们只需使用 TFLite 解释器加载模型即可

void _loadModel() async {
  // 创建解释器
  _interpreter = await Interpreter.fromAsset(_modelFile);
}

然后,我们传入用户棋盘状态,并通过运行 TFLite 推理来帮助游戏代理识别下一个最有可能攻击的位置(如果您需要复习游戏规则,请参考我们之前的博文)。

int predict(List<List<double>> boardState) {
  var input = [boardState];
  var output = List.filled(_boardSize * _boardSize, 0)
      .reshape([1, _boardSize * _boardSize]);

  // Run inference
  _interpreter.run(input, output);

  // Argmax
  double max = output[0][0 ];
  int maxIdx = 0;
  for (int i = 1; i < _boardSize * _boardSize; i++) {
    if (max < output[0][i]) {
      maxIdx = i;
      max = output[0][i];
    }
  }

  return maxIdx;
}

就是这样!使用一些 额外的 Flutter 前端代码 来渲染游戏棋盘并跟踪游戏进度,我们可以在 Android 和 iOS 上立即运行游戏(目前该插件仅支持这两个移动平台)。您可以在 GitHub 上找到完整的代码。

ALT TEXT
如果您想更深入地挖掘,您可以尝试以下几件事
  1. 将 TFAgents 训练的模型转换为 TFLite,并使用该插件运行它。
  2. 利用我们使用过的 RL 技术,在 Flutter 休闲游戏工具包 中为井字棋游戏构建一个新的代理。您需要创建一个新的 RL 环境并从头开始训练模型,然后再部署,但核心概念和技术几乎相同。

这总结了关于利用 TensorFlow/JAX 为 Android 和 Flutter 构建游戏的博客系列。我们非常期待您使用我们的工具构建的所有令人兴奋的东西,因此请务必与 @googledevs@TensorFlow 和您的开发人员社区分享!

下一篇文章
Building a board game with the TFLite plugin for Flutter

发布者:Wei Wei,开发者倡导者 在我们之前的博文中 使用 TensorFlow 构建棋盘游戏应用程序:一个新的 TensorFlow Lite 参考应用程序使用 JAX 构建强化学习代理,并使用 TensorFlow Lite 将其部署到 Android 上,我们展示了如何分别使用 TensorFlow、TensorFlow Agents 和 JAX 训练强化学习 (RL) 代理,然后将转换后的 …