当前位置: 首页 > news >正文

【中小学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 Sub

2、不用ML的抽象层直接进行推理

' AI 走棋 Private Function GetAIMove() As Integer Try ' 构建输入(AI 视角:AI=1,玩家=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

有任何问题欢迎留言或发送邮件至:hello@AiEduLab.tech

http://www.jsqmd.com/news/1232883/

相关文章:

  • 2026年 车辆运输物流公司推荐榜单:整车/零担/轿运专线全覆盖,高效安全与定制服务的实力优选 - 甄选服务推荐
  • CoPaw:国产AI助理工具的零配置实践与模型优化
  • Redis 全局通用命令详解(keys、exists、del、expire、ttl、type 等)
  • 二叉树数据结构详解:创建、遍历与优化实践
  • Java面试转型:从八股文到场景实战的系统性应对策略
  • 2026 年更新:遂溪热门的水下清淤供货商深度解析与优选指南,别让淤泥吞噬你的财富:水下清淤的秘密 - 实业推荐官【官方】
  • 深入解析TI C6000 DSP SYSCFG模块:从寄存器原理到实战优化
  • LangChain多代理系统设计与实现详解
  • Sqribble:面向内容工作者的云原生文档操作系统
  • Python自动化工作流:13个高效工具库与实践指南
  • 2026小程序定制开发十大公司测评:需求、源码与交付能力怎么选?含零代码SAAS、AI编程、源码定制交付
  • 2026年有没有免费拼长图的好方法?亲测可用教程分享 - 效率工具研究所
  • 【LLM】一文讲透 AI Agent:从概念到四大核心组件
  • Redis 五大数据类型精讲(String 字符串)
  • 计算机专业四大基础学科:数据结构、操作系统、网络与组成原理
  • 企业信用与工商信息采集:构建企业关系网络图谱与智能风控平台
  • Java面试高效备考:系统化策略与AI辅助实践指南
  • TMS320F280013x eQEP模块深度解析:从原理到伺服控制实战
  • HK1 BOX 晶晨S905X3芯片刷home assistant智能家居系统
  • AI工程范式演进:从Prompt到Loop的智能体技术实践
  • QT跨平台架构深度解析:从抽象层到部署实战
  • Zig语言Web开发:wing-app工程骨架解析与实践
  • Python演化史:从圣诞节的业余项目到吞噬世界的编程语言
  • 深度学习张量操作指南:从基础到实战
  • U盘数据丢失恢复全攻略:10种实用方法与避坑指南
  • 【数据库】tdsql(mysql8.0)慢sql优化思考二
  • 生成式AI与传统AI的本质区别:从模式映射到世界模拟
  • ROS中为PR2添加场景物体:MoveIt!空间建模实战指南
  • Claude Desktop 部署与核心功能体验:本地AI助手集成指南
  • Java集成YOLOv8实现工业质检的高性能优化实践