【问题标题】:Adding Alpha-Beta prunning to minMax in Objective-C在 Objective-C 中为 minMax 添加 Alpha-Beta 修剪
【发布时间】:2013-01-26 20:09:02
【问题描述】:

您好,我在将alpha beta pruning 添加到connect 4 游戏的minMax 算法时遇到问题,您能帮帮我吗?这是我的 minMax 过程的代码,在我看来,我需要做的只是一点点:S scoreBoard() 是我的启发式函数,我返回一个包含 2 个值的数组,第一个是位置的在桌子上,另一个是这个位置的分数。

-(NSArray*) miniMaxWihtAlphaBetaPrunning:(BOOL)maxOrMin withAlpha:(NSInteger)alpha
 withBeta:(NSInteger)beta withPlayer:(enum playerColor)player andTreeDepth:
(NSInteger)depth
{
if (depth == 0)
{
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:-1],
[NSNumber  numberWithInt:scoreBoard()],nil];
}
else
{
    NSInteger bestScore = maxOrMin ? redWins: blueWins;
    NSInteger bestMove = -1;

    for (NSInteger column = 0; column < 10; column++)
    {
        if (discPlacedMatrix[0][column] != 0)
        {
            continue;
        }

        NSInteger rowFilled = dropDiscAtPoint(column, player);

        if (rowFilled == -1)
        {
            continue;
        }

        NSInteger s = scoreBoard();

        if (s == (maxOrMin? blueWins : redWins))
        {
            bestMove = column;
            bestScore = s;
            discPlacedMatrix[rowFilled][column] = 0;

            break;
        }

        NSArray* result =  [NSArray arrayWithArray:[self miniMaxWihtAlphaBetaPrunning:!maxOrMin withAlpha:alpha withBeta:beta withPlayer:(player == 1 ? RED : BLUE) andTreeDepth:depth - 1]];

        NSInteger scoreInner = [[result objectAtIndex:1] intValue];

        discPlacedMatrix[rowFilled][column] = 0;

        if (scoreInner == blueWins || scoreInner == redWins)
        {
            scoreInner -= depth * player;
        }
        if (maxOrMin)
        {
            if (scoreInner >= bestScore)
            {
                bestScore = scoreInner;
                bestMove = column;
            }
        }
        else
        {
            if (scoreInner <= bestScore)
            {
                bestScore = scoreInner;
                bestMove = column;
            }
        }
    }

    return [NSArray arrayWithObjects:[NSNumber numberWithInt:bestMove],[NSNumber numberWithInt:bestScore],nil];
}

}

我尝试了一些场景,但 Ai 开始了

【问题讨论】:

  • 我不确定你的问题是什么;你能澄清一下你遇到了什么问题吗?
  • 我需要将 alpha - beta 修剪添加到 miniMax 程序中,目前它只是 miniMax,正如你所看到的,我目前没有在函数中使用 alpha beta 值,我只有它们作为参数 :) 关键是我尝试以几种不同的方式添加它几次,但 AI 开始玩得很糟糕:(

标签: objective-c algorithm artificial-intelligence


【解决方案1】:

听起来您正在寻找类似 jamboree 算法 之类的东西。该算法的基本思想是递归地遍历你的树,并在每个级别上,对该级别的部分节点运行 alpha beta 算法,然后在其余节点上运行 mini-max 算法。我现在正在工作,等我回家再详细说明。

一个实现:
http://chessprogramming.wikispaces.com/Jamboree

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多