You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带Alpha-Beta剪枝的4x4三子连珠Minimax算法未阻断对手问题

4x4三子连线版井字棋Minimax算法修复方案

核心问题根源

当前算法仅在评估函数中判断最终胜负状态,没有考虑潜在的胜负威胁。在3x3棋盘上,胜负仅需一步就能触发评估函数的±10分,算法能直接感知败局;但4x4棋盘上,对手形成两子连线后,需要提前阻断,而现有评估函数未给这种“即将失败”的状态赋予负分,导致AI只会优先追求自身直接获胜,完全忽略对手的进攻威胁。

具体修复步骤

1. 重写评估函数,加入潜在威胁评分

扩展evaluate方法,除了判断最终胜负,还要计算双方的半完成连线得分,让算法能识别即将出现的胜负趋势:

public static int evaluate(long desiredMarks, long undesiredMarks)
{
    // 优先判断已决出的胜负
    if (HasWon(desiredMarks))
    {
        return +10;
    }
    else if (HasWon(undesiredMarks))
    {
        return -10;
    }

    int totalScore = 0;
    // 遍历所有可能的三子连线组合(需提前定义所有合法连线)
    foreach (var line in GetAllValidThreeInARowLines())
    {
        int aiMarks = 0;
        int playerMarks = 0;
        foreach (int pos in line)
        {
            if ((desiredMarks & (1L << pos)) != 0)
                aiMarks++;
            else if ((undesiredMarks & (1L << pos)) != 0)
                playerMarks++;
        }

        // 给AI的潜在连线加分
        if (playerMarks == 0)
        {
            if (aiMarks == 2) totalScore += 3;  // 两子连线,接近获胜
            else if (aiMarks == 1) totalScore += 1; // 一子连线,有发展空间
        }
        // 给玩家的潜在连线扣分(阻断优先级)
        if (aiMarks == 0)
        {
            if (playerMarks == 2) totalScore -= 3; // 玩家即将连成三子,必须阻断
            else if (playerMarks == 1) totalScore -= 1; // 玩家有潜在连线趋势
        }
    }
    return totalScore;
}

注:GetAllValidThreeInARowLines()需要返回4x4棋盘上所有合法的三子连线集合,包括横向(每行的1-3、2-4位)、纵向(每列的1-3、2-4位)、斜向(所有连续三个的斜线)。

2. 为胜负得分加入深度权重(优化项)

在Minimax递归中,根据获胜的回合数调整得分,让算法优先选择最快获胜的路径,同时优先阻断对手最快的获胜可能:

int score = evaluate(desiredMarks, undesiredMarks);
if (score == 10)
{
    // AI获胜:越早获胜得分越高,用10减去当前深度
    int weightedScore = score - depth;
    OldAnswers[state] = weightedScore;
    return weightedScore;
}
if (score == -10)
{
    // 玩家获胜:越早失败扣分越多,用-10加上当前深度
    int weightedScore = score + depth;
    OldAnswers[state] = weightedScore;
    return weightedScore;
}

3. 验证HasWon方法的正确性

确保HasWon能正确识别4x4棋盘上的所有三子连线,避免因连线判断错误导致评估失效。

额外检查项

  • 确认Values列表的位置编号(1-16)与位运算逻辑完全匹配,没有位置映射错误
  • 检查OldAnswers的state计算:desiredMarks << Highest中的Highest值应为16,确保AI和玩家的棋子状态不会重叠

内容的提问来源于stack exchange,提问作者Display Namesson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:57:42