web-dev-qa-db-ja.com

java=

ミニマックスアルゴリズムをコネクトフォーゲームで使用する方法を調査しています。プログラムを見ていると、この評価関数が見つかりました。

private static int[][] evaluationTable = {{3, 4, 5, 7, 5, 4, 3}, 
                                          {4, 6, 8, 10, 8, 6, 4},
                                          {5, 8, 11, 13, 11, 8, 5}, 
                                          {5, 8, 11, 13, 11, 8, 5},
                                          {4, 6, 8, 10, 8, 6, 4},
                                          {3, 4, 5, 7, 5, 4, 3}};

//here is where the evaluation table is called
public int evaluateContent() {
        int utility = 128;
        int sum = 0;
        for (int i = 0; i < rows; i++)
            for (int j = 0; j <columns; j++)
                if (board[i][j] == 'O')
                    sum += evaluationTable[i][j];
                else if (board[i][j] == 'X')
                    sum -= evaluationTable[i][j];
        return utility + sum;
    }

そして、可能なソリューションを評価するためにMiniMaxアルゴが使用されます。

これがどのように/なぜ機能するのかわかりません。誰かが説明できますか?

2
Michael James

表の数値は、そのスペースを含む4つの接続された位置の数を示します。次に例を示します。

  • 左上隅の3は、4本の水平線、垂直線、対角線のそれぞれ1本で作成できます。
  • 横にある4つは2つの水平用です(1つは隅から開始、1つは開始、垂直は1つ、対角線は1つ)

これにより、各正方形がゲームの勝利にどれだけ役立つかがわかり、戦略の決定に役立ちます。

evaluateBoard関数は、0未満の数値を返すと思います

intユーティリティ= 128

はタイプミスです-138に初期化する必要があります(表のすべての値の合計が276 = 2 x 138であるため)。これにより、evaluateBoard関数が戻ります。

  • マーカーが「X」のプレーヤーが勝つ可能性が高い場合は0未満(効用関数に基づいて最も戦略的な場所がある)
  • =プレーヤーが勝つ可能性が等しい場合は0
  • > 0は、マーカーが「O」のプレーヤーが勝つ可能性が高い場合。
3
James McLeod

この評価関数は、ボードの平均位置を中心としたガウス正規分布に他なりません。中心位置がより多いものは、この評価関数からより高いスコアを取得します。この行列をMATLABでプロットすると、値がテントを形成するため、中心位置にバイアスがかかることがわかります。ただし、これは総合評価を実行し、空間分析を行わないため、これよりもはるかに優れた評価関数があると言わざるを得ません。

score = board.longest_chain(board.get_current_player_id()) * 10
        # Prefer having your pieces in the center of the board.
        # score boost
        for row in range(6):
            for col in range(7):
                if board.get_cell(row, col) == board.get_current_player_id():
                    score -= abs(3-col)
                Elif board.get_cell(row, col) == board.get_other_player_id():
                    score += abs(3-col)

上記は、longest_chainを介して取得された空間分析結果に中心指向のアイデアを適用する1つの例にすぎません。

1
Vishal Sahu