序盤、中盤、終盤、隙がないAIをめざします。
駒たっ石たちが躍動する僕のオセロをみなさんに見せたいね。
方針
- 序盤:定石を使う。
- 中盤:従来通り、重みづけテーブルで局面を評価する。
- 終盤:単純に石の数で局面を評価する。
序盤
1手目
オセロの1手目は、打てる場所が4つありますが、対称性に着目すればどれも等価です。一般的には、下図(A)の形が標準とされています。(B)〜(D)の場合は、座標変換によって(A)の形に変換して定石の処理をすることとします。
2手目
2手目は、縦取り、斜め取り、並び取りの3パターンがあります。並び取りは後手が不利になることが知られているので、自分からは打たないこととします。
3手目以降
いろいろな定石がありますが、ここでは4つの定石を採用します。
- 縦取り:兎定石、虎定石
- 斜め取り:牛定石
- 並び取り:鼠定石
定石に従って打ち、定石のパターンが終了するか、相手が定石から外れた時点で中盤に移行します。
中盤
従来通り、重みづけテーブルで局面を評価しますが、テーブルを改良します。
中盤までは「少なく取る」のが良いとされています。しかしもちろん、四隅を取ることは大事です。そこで、重みづけテーブルを以下のように修正します。
private int[,] WEIGHT = { {+30, -12, 0, -1, -1, 0, -12, +30}, {-12, -15, -3, -3, -3, -3, -15, -12}, { 0, -3, 0, -1, -1, 0, -3, 0}, { -1, -3, -1, -1, -1, -1, -3, -1}, { -1, -3, -1, -1, -1, -1, -3, -1}, { 0, -3, 0, -1, -1, 0, -3, 0}, {-12, -15, -3, -3, -3, -3, -15, -12}, {+30, -12, 0, -1, -1, 0, -12, +30} };
終盤
終盤では、もちろん「多く取る」ことこそが大事です。そこで、単純に石の数のみで評価することにします。
結果
従来、Ultima Reversiとの対戦ではレベル6以上、レベル7未満程度の棋力で、特に後手番のときはまずレベル7には勝てませんでした。今回の改良で、先手番ならレベル7に勝ち越し、後手番でもそこそこレベル7に勝てるようになりました。
問題点
- 序盤定石のデータが貧弱すぎてあまり効果が無い
- 少なく取ろうとするあまり、むしろヘボ相手だと中盤に全滅されることがある
- 何のタイミングで中盤から終盤に移行するべきか