查看: 287|回复: 2

【教程】深度学习目标检测之井字棋

[复制链接]

该用户从未签到

发表于 2021-4-7 19:27 | 显示全部楼层 |阅读模式
  
    井子棋(tic-tac-toe)又称“过三关”,是一款历史悠久、流传广泛的益智游戏。棋盘是一个3*3=9的九宫格,棋子只有X和O两种,轮流下棋,直到某一方棋子在棋盘的纵横或斜线形成三子连线,即告获胜。如果双方轮流走子,直至棋盘摆满(9子)则宣告和棋。
由于井子棋简单、流传广泛,所以在棋类的AI(人工智能)学习中,井子棋成为比较常见的研究对象,有很多算法和攻略对其进行深入研究,被称为“已经解决”的棋类游戏。此类书籍也非常多。
    本文研究的重点并不在于下棋算法,而是使用K210作为深度学习平台,通过模型训练,运用K210对井子棋的两类棋子(X,O)进行目标检测,返回棋子的类别以及在棋盘上的坐标。并且描绘成棋盘列表,将当前棋盘的棋子类别以及位置编制成json数据格式的字符串,通过串口(uart)传送给m5stack basic,后者是一个非常优秀成熟的基于esp32的开发平台,带有屏幕、按键并且适配了完整的软件库。
    M5stack basic接收到了来自K210的数据后,会有两种玩法:
  • 一是“双人对战裁判”。将收到的棋盘数据进行json解析。在屏幕上对两类棋子以及其位置进行展示,实时显示对弈战况,并且判定两位玩家的胜负以及是否平局。即充当了“AI裁判”。
  • 二是“简单的人机对弈”。如前文所述,井子棋被称为“已经解决”的棋类游戏,也就是说,其算法已经被充分认知和破解,如使用minmax算法后,后手棋玩家将没有机会获胜,最好的结果也是平局。这样的对弈技术含量颇高,但是兴味不足。为了增加乐趣,我们引入了一个非常简单的算法,实现了简单的人机对弈。即;esp32主控会对当前棋盘进行分析,对当前剩余的所有空位编列成列表,然后从该列表中随机推荐下一步的步骤,这样以来,玩家在和机器对弈中,对方的下一步实际上是随机状态,玩家就有很大机会获胜。这样就增加了乐趣。后续我们可以通过对算法难度的调节,来丰富对弈的难度和乐趣。
ui.png IMG_20210401_231756_副本.jpg 硬件.jpg 终局.jpg

    近期发帖上传比较麻烦,我已经发到dfrobot那边,直接给出链接。 《深度学习目标检测之井字棋
   代码也已经分享,欢迎交流。
   沧海抱拳。

签到天数: 63 天

[LV.6]常住居民II

发表于 2021-4-7 20:30 | 显示全部楼层
沧海笑1122老师出品,必是精品,学习一下,谢谢分享,

该用户从未签到

 楼主| 发表于 2021-4-8 16:45 | 显示全部楼层
topdog 发表于 2021-4-7 20:30
沧海笑1122老师出品,必是精品,学习一下,谢谢分享,

感谢师兄支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

基于麦克纳姆轮的PID实例学习--机甲大师PID控制
基于麦克纳姆轮的PID实例
一 认识pid 首先要了解PID算法是什么。网上很多帖子要么就是只有理论,要么就没讲清
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
有没有人遇到过"MQTT Ping!"进入500ms间隔发送,偶现自动复位...
有没有人遇到过"MQTT Ping
出现该情况后,我在5V与3.3V端都加了1000uf和104。之后用弱网络进行测试,在一定程度
HC05发送数据出错
HC05发送数据出错
HC05往手机发送数据会产生错乱和缺失?
arduinoT12焊台 控制器 炫酷UI
arduinoT12焊台 控制器 炫
*声明:本项目源于https://github.com/wagiminator/ATmega-Soldering-Station 采用CC3
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表