ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 王小雨830518

[分享] 【博弈树MAX-MIN和α-β剪枝那些事】从零开始====五子棋制作的详细记录

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-25 00:12 | 显示全部楼层
我下不赢它。。。。。。。

TA的精华主题

TA的得分主题

发表于 2022-10-25 00:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
#If VBA7 And Win64 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long '调用WINDOWS的API
#Else
Private Declare Function timeGetTime Lib "winmm.dll" () As Long '调用WINDOWS的API
#End If
改这个适合64位excel

TA的精华主题

TA的得分主题

发表于 2022-10-25 20:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-26 22:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mythqiu 发表于 2022-10-25 00:14
#If VBA7 And Win64 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long '调 ...

又学到知识了,感谢测试,
下个版本我改成用Timer延时,应该就没有这个问题了
我是小白,那会儿不知道VBA自带Timer

TA的精华主题

TA的得分主题

发表于 2022-10-27 00:38 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
王小雨830518 发表于 2022-10-26 22:21
又学到知识了,感谢测试,
下个版本我改成用Timer延时,应该就没有这个问题了
我是小白,那会儿不知道V ...

代码同时兼容了64和32OFFICE。ai计算有时长达数秒,应该有优化空间。不过我是完全看不懂AI代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-24 21:57 | 显示全部楼层



五子棋_Beta1.30.rar (153.86 KB, 下载次数: 23)

这是接触VBA学的头一个完整的代码,历时半个月终于算完成了吧
自己想实现的功能基本实现了,如果计算机执黑反正我一不小心就会输掉
3岁(预判4个棋子,深度4层)的AI执黑基本完胜不搜索的基础AI了。

整个代码的一点一点写下感觉涵盖了太多的细节
太多值得思考的知识点,不实实在在自己写一写,真的很难真正理解
卡的最久的还是决策树的建立,如何把MAXMIN算法和α-β剪枝融入递归
但是写到最后发现最难的还是局势评估函数
即每个叶子节点对局势的评估打分
评估函数的水平直接决定了AI的质量,悲哀
好在这也不是咱学习VBA的初衷
AI和自动化办公本质上差异并不大,安慰自己吧
或许哪天回头看看,这些代码肯定是漏洞百出
但“纸上得来终觉浅,绝知此事要躬行”就是收获吧

这楼把不好理解的东西做个总结记录

1、博弈树建立
首先非常感谢山菊花版主的帮助
其实说白了,这个AI算法就是一个树形结构的递归深度搜索
每个节点的孩子和父节点都是对方玩家
所有的节点被分为极大值(我方)节点和极小值(对方)节点
个人感觉是学习递归的非常好的一个例子
可惜弱智的我还是不是很懂,说几个关键字把
  • 栈(理解递归思想的前提)
  • 二叉树的先序、后序
  • 传递的变量
  • 节点概念


2、MINMAX算法

该算法需要满足零和博弈,初略的解释就是若有两个玩家进行游戏
如果其中一方得到利益那么另一方就会失去利益
游戏利益的总和为0(某些情况下为常数)
因此,零和的约束条件也使得该算法在很多游戏中图体现出很好的效果
比如大多数的棋类游戏。
以上来自百度百科

网上有很多讲这个的,关键点在于无论MAX还是MIN
它的选择都是相对于子节点
并且它的选择是从叶子节点开始,自下而上最终到根节点
这个理解起来不难,见下图:
MINMAX.jpg

3、α-β剪枝
同样这个网上好多讲的,感觉很多都是断章取义的
包括各种教授的视频(讲的真的云里雾里......一言难尽)
很多说法都这样单独介绍α剪枝、β剪枝,其实个人理解这两个不能分开的
我们只说实现的过程:
  • 首先子节点继承父节点α、β的数值
  • 如果节点的父节点α>β,发生剪枝
  • 如果是MAX节点,根据子节点更新α的值
  • 如果是MIN节点,根据子节点更新β的值
就这点事,没了(盗图一张)
αβ剪枝.jpg

TA的精华主题

TA的得分主题

发表于 2023-5-7 20:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
开启新思路,谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 06:54 , Processed in 0.041102 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表