Step 08 of 12

評価関数

盤面を数値化する evaluate と、最高スコアの手を選ぶ chooseBestMove を書きます。 探索なしの「1 手先評価」だけでも、ランダム AI よりずっと強くなります — 特に角を取るようになる。

MyOthello.java
Java runtime を初回読み込み中…
CheerpJ の JRE (数十 MB) をダウンロードしています。
preparing

About this step

なぜ角が +120?

オセロの角は 絶対にひっくり返されない特別なマスです。 そこに自分の石を置ければ、その影響で辺も支配しやすくなるので大きくプラス。 逆に角の隣 (X マス / C マス) は「角を相手にプレゼントしやすい」マスなので 大きくマイナスに設定してあります — 配置の原則を数値で表した表です。

snapshot / restore の罠

chooseBestMove の中で各手を仮に打つ時、placeAtboard を書き換えるので、評価が終わったら必ず元に戻す必要があります。 restore を忘れると 2 手目以降の評価が前の仮置きの上で行われて無意味に。 for ループで動的に盤面を壊して戻す、というテクは minimax でも同じ罠。

動かしてみる

Run して何度か対局してみて、白 AI が 角をしっかり取りに来るかを確認。 Step 07 のランダム AI と比べて明らかに強くなります。 余裕があれば POSITION_WEIGHTS の数値をいじって、白の好みを変えて遊んでみてください。