2

こんにちは、Connect 4 ゲームの minMax アルゴリズムにアルファ ベータ プルーニングを追加する際に問題があります。これがminMaxプロシージャのコードです。私には、実行する必要があることが少しあるように見えます:S scoreBoard()は私のヒューリスティック関数であり、最初の値が位置である2つの値を持つ配列を返しますもう 1 つはこの位置のスコアです。

-(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 が

4

1 に答える 1

0

ジャンボリー アルゴリズムのようなものを探しているようです。このアルゴリズムの基本的な考え方は、ツリーを再帰的に調べ、各レベルで、そのレベルのノードの一部でアルファ ベータ アルゴリズムを実行し、残りのノードでミニマックス アルゴリズムを実行することです。今仕事中ですが、帰宅したら詳しく書きます。

実装:
http://chessprogramming.wikispaces.com/Jamboree

于 2013-07-29T21:01:22.047 に答える