Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C中将Alpha-Beta修剪添加到minMax_Objective C_Algorithm_Artificial Intelligence - Fatal编程技术网

在Objective-C中将Alpha-Beta修剪添加到minMax

在Objective-C中将Alpha-Beta修剪添加到minMax,objective-c,algorithm,artificial-intelligence,Objective C,Algorithm,Artificial Intelligence,您好,我在为connect 4游戏添加minMax算法时遇到问题,您能帮我吗?这是我的minMax程序代码,在我看来,只有一点需要做的事情我没有做:S scoreBoard()是我的启发式函数,我返回一个带有2个值的数组,第一个是表上的位置,另一个是这个位置的分数 -(NSArray*) miniMaxWihtAlphaBetaPrunning:(BOOL)maxOrMin withAlpha:(NSInteger)alpha withBeta:(NSInteger)beta withPlay

您好,我在为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];
}
-(NSArray*)最小值带alpha运行:(BOOL)最大值带alpha:(NSInteger)alpha
带beta:(NSInteger)带玩家的beta:(枚举玩家颜色)玩家和树深度:
(NSInteger)深度
{
如果(深度==0)
{
返回[NSArray arrayWithObjects:[NSNumber numberWithInt:-1],
[NSNumber numberWithInt:scoreBoard()],无];
}
其他的
{
NSInteger bestScore=maxOrMin?红蜘蛛:蓝蜘蛛;
NSInteger-bestMove=-1;
对于(NSInteger列=0;列<10;列++)
{
如果(discPlacedMatrix[0][column]!=0)
{
继续;
}
NSInteger rowFilled=dropDiscAtPoint(列,玩家);
如果(行填充==-1)
{
继续;
}
NSInteger s=记分板();
如果(s==(maxOrMin?蓝赢:红赢))
{
bestMove=列;
最佳得分=s;
discPlacedMatrix[行填充][列]=0;
打破
}
NSArray*结果=[NSArray ARRAY WITH ARRAY:[self minimaxWihtAlphabetaRunning:!maxOrMin with alpha:alpha with beta:beta with player:(player==1?红色:蓝色)和TreeDepth:depth-1];
NSInteger scoreInner=[[result objectAtIndex:1]intValue];
discPlacedMatrix[行填充][列]=0;
如果(scoreInner==blueWins | | scoreInner==redWins)
{
scoreInner-=深度*玩家;
}
if(maxOrMin)
{
如果(分数内部>=最佳分数)
{
bestScore=scoreInner;
bestMove=列;
}
}
其他的
{

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

实现:

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