「Connect 4」ゲームのJava実装があります(列と行の数が可変です)。
この実装では、(ユーザーの選択に応じて) maxDepthの検索の最大深度でのアルファ ベータ プルーニングを使用したミニマックスのミニマックス アルゴリズムを使用します。
私の問題は、ボードの状態に対する適切な評価関数の設計です(これは maxDepth で返される値です)。
値は-100 (最悪の選択、負けた状況に対応)から100 (最良の選択、勝利の状況に対応) の間で、0は「引き分け」の状況と見なされます。
実際には2つの関数を実装しました(コードが非常に長いため、疑似コードを報告します)
1)
- 勝てない・負けない
--> テーブルがいっぱいの場合 ==> 抽選 (0)
--> テーブルがいっぱいでない場合 ==> 不明な状況 (50)
- 勝つ
--> 勝った場合: 100
--> 対戦相手に勝利した場合: -100
2)
Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row
Of the opponent
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow2[1] = maximum number of pieces in a VERTICAL in a row
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row
value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]) )/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]) )/16
3 番目の (そして可能であればより優れた)関数を設計する必要があります。なにか提案を?
前もって感謝します。