C++のゲームtictactoe3Dにミニマックスアルゴリズムを適用しようとしています。良い評価関数を見つけるのに苦労しています。
評価関数を見つけるための良いリソースがどこにあるか誰かが知っていますか?
ありがとうございました。
C++のゲームtictactoe3Dにミニマックスアルゴリズムを適用しようとしています。良い評価関数を見つけるのに苦労しています。
評価関数を見つけるための良いリソースがどこにあるか誰かが知っていますか?
ありがとうございました。
これが私が使うものです:
すべての行を(すべての方向に)移動します。各行について、プレーヤーのマークが1つしかない場合は、マークの数に基づいてそのプレーヤーのポイントを獲得します。スコアするマークの数をマッピングするルックアップテーブルを作成できます。これを調整して、最良の結果を得ることができます。最終的な結果は、2人のプレーヤーのスコアの差になります。
例(擬似コード):
const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board
//The above values are arbitrary - adjust to what you think makes sense.
score = 0;
for all rows in all directions:
count Xs and Os
if (xs>0 && os==0)
score += markScore[xs];
else if (os>0 && xs==0)
score -= markScore[os];
return score;
これはうまくいくはずです。なぜなら、1人のプレーヤーのマークしかない行は、そのプレーヤーに勝つチャンスを与えるからです。
ヒューリスティックは不要です。状態は3^27しかないので、それらすべてを列挙して最適なプレイを計算できます。
このゲームの評価関数は、勝ちポジションをテストするだけで済みます。ボードにある空のフィールドが多いほどスコアが高くなるため、評価関数はボード内の空のフィールドをカウントする必要があります。評価関数がチェックしなければならない線、行、対角線の数を減らすために、ボードをミラーリングして回転させることができます。