0

0

Gomoku AI 修复:Minimax 必须正确定义胜负评估以防止对手获胜

碧海醫心

碧海醫心

发布时间:2026-01-11 14:42:33

|

576人浏览过

|

来源于php中文网

原创

Gomoku AI 修复:Minimax 必须正确定义胜负评估以防止对手获胜

本文详解 gomoku(五子棋)ai 中 minimax 算法无法识别并阻止对手必胜局面的根本原因——胜负判断时混淆了玩家身份,导致评估值符号错误;通过修正 `iswinningmove` 的归属判断逻辑与返回值语义,可确保 ai 在任意搜索深度下优先拦截对手的四连、活三等致胜威胁。

在实现 Gomoku(五子棋)的 Minimax AI 时,一个常见但隐蔽的致命缺陷是:AI 能积极进攻(如构建四连、制造双杀),却对人类玩家即将形成的五连视而不见。正如问题中所示,当对手(HUMAN)已在棋盘上形成潜在的“活三”或“冲四”时,AI 并未选择防守落点(如示例中的位置 64),反而执行无关紧要的进攻动作(如 20)。这并非搜索深度不足或启发式函数粗糙所致,而是 胜负状态评估逻辑存在根本性语义错误

? 根源问题:胜负归属与评分符号错位

关键错误位于 minimax 函数中对终局状态的提前终止判断:

if (isWinningMove(board, opponent, latestRow, latestCol)) {
  const multiplier = player === COMP ? 1 : -1; // ❌ 错误:应基于 opponent 判断!
  return [ WINNING_MOVE * multiplier, latestRow * COLS + latestCol ];
}

这段代码本意是:若上一手棋(由 opponent 落下)直接导致其获胜,则当前节点为终局。但 multiplier 却错误地依据当前轮到谁走(player) 来决定分值正负,而非依据谁真正获胜(opponent)

  • ✅ 正确逻辑:若 opponent === COMP(即电脑刚赢),该局面对当前 player(人类)是极大劣势 → 应返回大负值(-WINNING_MOVE);
  • ✅ 若 opponent === HUMAN(即人类刚赢),该局面对当前 player(电脑)是极大劣势 → 应返回大负值(-WINNING_MOVE);
  • ❌ 原逻辑中 player === COMP ? 1 : -1 实际将人类获胜判为 +WINNING_MOVE(对电脑有利!),彻底反转了胜负语义,导致 AI 主动“欢迎”对手获胜。

✅ 正确修复:按实际获胜方定符号,按逻辑清空无效 move

只需两处修改:

if (isWinningMove(board, opponent, latestRow, latestCol)) {
  // ✅ 修正1:multiplier 由 opponent 决定(COMP 是最大化方,HUMAN 是最小化方)
  const multiplier = opponent === COMP ? 1 : -1;

  // ✅ 修正2:终局无“最佳移动”,返回 -1 表示无效 move,避免误导上层
  return [ WINNING_MOVE * multiplier, -1 ];
}

同时,建议同步修正 depth === 0 分支中的 move 返回值(虽非本问题主因):

无阶未来模型擂台/AI 应用平台
无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

下载
if (depth === 0) {
  const val = evaluateBoard(board, latestRow, latestCol);
  return [val, -1]; // 非终局也无需返回具体 move,由上层收集
}

? 为什么低深度有时“碰巧有效”?

当 maxDepth = 1 时,AI 仅看一步后局面:若人类落子后直接五连,isWinningMove(..., HUMAN, ...) 触发,原错误逻辑会返回 WINNING_MOVE * (-1) = -100000 —— 这个巨大负值仍能被 min 层捕获并规避。但随着深度增加(如 depth=3),错误评分会在多层传播中被剪枝(alpha-beta)或平均效应削弱,导致防守意图被“淹没”。修复后,所有深度下人类获胜均稳定返回 -100000,确保防守动作始终具备最高优先级。

? 完整修复后行为验证(示例棋盘)

对问题中 exampleBoard,修复后调用 getBestMove(exampleBoard, 3) 将稳定返回 64(即第7行第1列,0-indexed 行列 row=7, col=1),该位置恰好堵住人类从 (6,2)→(5,3)→(4,4) 延伸的斜线四连,消除下一步必胜威胁。

? 进阶建议:为提升实战鲁棒性,可在 evaluatePlayerBoard 中增强局部威胁检测(如区分“活四”“冲四”“活三”并赋不同权重),但胜负判定的符号正确性是 Minimax 生效的前提,不可妥协。

通过本次修复,你的 Gomoku AI 将真正具备“攻守兼备”的博弈能力:既不放过任何制胜机会,也绝不放任对手完成五连——这才是完备博弈 AI 的基石。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

398

2023.08.14

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

79

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

46

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

122

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

12

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

71

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

373

2026.01.09

php学习网站大全
php学习网站大全

精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

47

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.6万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号