【中小学AI人工智能教育】井字棋小游戏

【中小学AI人工智能教育】井字棋小游戏 Ai创想实验室是专门为中小学AI教育开发的教学平台包含了值计算、图像分类、音频分类、文本分类、数值回归、图像回归、图像分类回归、平衡杆、手写数字生成、文本生成等中小学人工智能学习类项目。无需编程基础、无需添加硬件、无需购买算力、无隐私担忧、无需师资培训即可进行教学实践。井字棋小游戏在一定意义上属于“Hello World!”一类所以相关文章或讨论有很多。用几个小时时间实现了一个极简项目——让一个全连接网络学会下井字棋把它放在了首页上。即使这是一个不太公平的游戏在玩家一直是先手的情况下你训练的AI表现也能非常好。实现这个小游戏主要途径有以下几条1、AlphaGo的思路这种思路有一些现成的第三方库如果需要了解可以搜索alphago-zero-tictactoe-js学习把局面评价交给模型处理的蒙特卡洛树的思路——这非常经典。2、传统的α—β剪裁这种思路非常适合井字棋其状态空间极小完全能够穷举相关内容可以搜索“清月连珠”来进行学习——这一点也不AI。3、穷举局面训练一个网络——监督学习或强化学习。最终选定的是监督学习利用α-β剪枝生成完美棋谱让网络“模仿”最优走法。整个训练在浏览器中完成无需GPU数十秒即可看到AI从随机落子成长为不败高手。一、什么是井字棋井字棋状态空间极小仅约5,478种不同局面但包含完整博弈要素先手优势、平局、攻防转换。它既非微不足道又足够简单非常适合作为AI入门的“Hello World”。更重要的是我们可以穷举所有局面为每个局面标记“最佳走法”从而构建一个完美的监督学习数据集。二、数据生成实现了一个经典的α-β剪枝算法它能从任意棋盘状态出发计算出当前玩家的最优落子位置。我们让这个算法遍历所有可能局面形成数据集(棋盘状态 → 最佳位置)。但这里有一个关键细节棋盘必须以“当前玩家”的视角编码。即始终让当前玩家视为“1”对手视为“2”而非固定玩家为X、O。这样模型只需学习一个策略而后在实战中通过视角转换即可应对先手或后手。三、模型设计有很多关于这个小游戏的资料、模型但有一部分不尽人意以下模型经过测试使用生成的数据数据增强可以在几分钟之内学会攻守棋力完全满足对弈需求。model tf.sequential(); model.add(tf.layers.dense({ units: 32, activation: relu, inputShape: [9] })); model.add(tf.layers.dense({ units: 64, activation: relu })); model.add(tf.layers.dense({ units: 32, activation: relu })); model.add(tf.layers.dropout({ rate: 0.1 })); model.add(tf.layers.dense({ units: 9, activation: softmax })); model.compile({ optimizer: tf.train.adam(0.001), loss: categoricalCrossentropy, metrics: [accuracy] });四、数据增强去重后数据量从29万压缩至4520个唯一状态训练速度加快但存在对称局面AI棋力表现相差极多的线性。井字棋具有8种对称性旋转和镜像。为了让模型学会这些对称变形对每个样本应用所有对称变换并相应映射走法位置。这使数据量扩大8倍模型泛化能力显著提升。五、结束语这个项目证明了一个简单神经网络配合完美数据可以轻松解决一个看似需要推理的博弈问题。它展示了“模仿学习”的力量在足够好的数据面前复杂的强化学习并非总是必要。对于教育场景这种轻量、可交互、可解释的AI演示或许比黑盒式的大模型更有价值。你可以在平台上亲身体验打开Ai创想实验室平台首页在右侧的井字棋训练你的AI由于模型和数据特性在CPU上训练要比在GPU上快所以该模型训练时使用的是CPU然后与它对弈。你也可以查看代码来学习井字棋项目你会发现从零开始创造一个AI棋手原来如此简单六、模型和工程花费一点时间把模型导出和转换而后利用模型做一个井字棋游戏。使用ms.ml其中有几个需要注意的地方1、模型的输入名为intput可以使用工具来查看也可以用如下代码来进行自动检测Private Sub DetectInputOutputNames() Try If _session.InputMetadata IsNot Nothing AndAlso _session.InputMetadata.Count 0 Then _inputName _session.InputMetadata.Keys.First() End If If _session.OutputMetadata IsNot Nothing AndAlso _session.OutputMetadata.Count 0 Then _outputName _session.OutputMetadata.Keys.First() End If Catch ex As Exception 使用默认名称 End Try End Sub2、不用ML的抽象层直接进行推理 AI 走棋 Private Function GetAIMove() As Integer Try 构建输入AI 视角AI1玩家2 Dim inputData(8) As Single For i As Integer 0 To 8 Select Case _board(i) Case AI : inputData(i) 1.0F Case PLAYER : inputData(i) 2.0F Case Else : inputData(i) 0.0F End Select Next Dim inputTensor As New DenseTensor(Of Single)(inputData, New Integer() {1, 9}) Dim inputs As New List(Of NamedOnnxValue)() inputs.Add(NamedOnnxValue.CreateFromTensor(_inputName, inputTensor)) Using results _session.Run(inputs) Dim outputTensor results.First(Function(x) x.Name _outputName).AsTensor(Of Single)() Dim scores outputTensor.ToArray() Dim bestPos As Integer -1 Dim bestProb As Single -1.0F For i As Integer 0 To 8 If _board(i) EMPTY Then If scores(i) bestProb Then bestProb scores(i) bestPos i End If End If Next If bestPos 0 Then lblConfidence.Text AI 选择: _positionNames(bestPos) (概率: bestProb.ToString(P1) ) End If Return bestPos End Using Catch ex As Exception MessageBox.Show(AI 预测失败: ex.Message) Return -1 End Try End Function完整的项目含全部模型在文章顶部绑定资源中下载。在AI创想实验室中我们无需编程基础不用学习框架不用配置环境无需购买费用高昂的显卡更不用为云端算力付费使用当前已有的各种硬件仅有核显的个人、办公、机房电脑希沃白板等都能达到理想的教学效果。操作简单但AI核心知识样样俱全无需师资培训就可以进行教学且能取得理想的教学效果。如果加入试点或合作方那么只需要一台局域网服务器无需显卡、服务器不用供算力即可一次投入永久使用全部项目和功能通过后台管理一分钟即可创建一个本地化、校本化的项目实例。演示版本地址www.AiEduLab.tech有任何问题欢迎留言或发送邮件至helloAiEduLab.tech