0

私は 4x4 tic-tac-toe ゲームで小さなプロジェクトを行っています。次善の策を見つけるために Alpha Beta Search を使用しています。アルファベータ検索では、以下のアルゴリズムの「ユーティリティ」関数で呼び出されているカットオフ評価関数を使用しています

アルファベータ検索

すべてを正常に実装しましたが、問題はユーティリティ関数が負の値を返さないことであり、その理由が本当にわかりません! 以下は機能です

private static int utility(GameTreeNode gtn, bool isMin = false)
{
    int nodeValue = 0;
    switch (gtn.NodeBoard.getBoardStatus())
    {
        case Status.Success:
            nodeValue = 50;
            if (isMin) nodeValue = -50;    /// here
            break;
        case Status.Incomplete:
            if (isMin)
                nodeValue = gtn.evaluate(State.X);
            else
                nodeValue = gtn.evaluate(State.O);
            break;
    }
    // case Status.Draw:
    return nodeValue;
}

isMinMinValue 関数から呼び出されると、true に設定されます

isMinは O の動きで、AI の動きは X です。O が勝った場合、ユーティリティは -50 を返すことになっています。しかし、それは 0 だけを返します。プログラムをデバッグしたところ、実際には -50 が割り当てられますnodeValue(nodeValueデバッガーで -50 に変更されます) が、Min 関数または Max 関数で受け取るとゼロになります。

注: プロジェクト全体で使用されるすべての int はsigned int. unsigned関数呼び出し元が署名されていないと考えている場合は、キーワードは使用されません

アルファベータ検索の完全なコードはこちら: http://pastie.org/8538015

友達、できるだけ早く助けてください。

4

1 に答える 1