85DATA HOMEへ
MYCAR情報掲示板BLOGプロフィール

HOME →  懐かしのパソコンネタ

■ポケコン版リバーシ(オセロ)をBASIC+機械語で作ってみた その2
    〜 ほとんど機械語になった 〜

前回記事 (8月9日)にて「約3倍程度、速くなりました」と書きました。
これは、「石の反転判定と反転処理を機械語」にしただけだったのですが「”たったのコレだけ”でも体感的な違いがありました。」

「しかし、まだ遅い!」

たかだか、「1手先読みのテーブル評価」程度で、(1手打つのに)5秒はかかります。
(なお、オールBASICの時には10秒以上かかっています)

やはりBASICによるループは遅いのですね。

この状態(処理速度では)、これよりも(CPUを)強くする事は困難です。
(これ以上の凝った評価関数を作るには速度向上が求められます)


【強さの目標設定】

拙作ソフト「ヨウコのリバーシ」と対戦させてみた。

「ヨウコのリバーシ レベル0」よりは、今回のポケコン版リバーシの方が強いはずです。
(レベル0は、隅は優先させるが石を多く返すロジックである為です)




この結果は、想定通り「ポケコン版リバーシの勝ち」です。

そして、レベル1と対戦させると・・・・







これも想定通り「ポケコン版リバーシの負け」です。

レベル1はポケコン版と同様に1手先読みしかしておりませんが、ポケコン版ではしていない盤面評価を行っています。

CPUが着手後に盤面を確認

@人間の着手可能数とCPUの着手可能数をカウントし、評価
A辺のパターン (石の色 (なし、黒、白) 3パターンが8マスありますので、3の8乗=6561パターン)による評価
B確定石の評価 (Aのパターンテーブルによる)

ですから、レベル1の方が強いのは当たり前ですね。

そして、ポケコン版リバーシの強さの目標として、「ヨウコのリバーシ レベル1」程度にまで引き上げたいと思いました。

その為には、ポケコン版リバーシのCPUのAI部分(←と呼べるほど大層なモノではありません)を全て機械語にして、処理速度の飛躍的向上が必須となるはずです。

(そうしないと、上述の@〜Bの処理を組み込めない・・・・いや、BASICで作ったら遅くてプレイしたくなくたりそう)

 

【BASICと機械語の速度比較】

CPUのAI処理部分の全てを機械語に作り変えました。
さぁ、どの程度の速度向上がなされたのでしょうか?


 
 ※機械語の処理とは以下の@からEです。

@着手可能位置を探す(無ければEへ)
A石を置ければ相手石を反転させる
B評価を計算する。(単純なテーブル評価による)
C盤を着手前の状態に戻す
D @に戻る
E最高の評価点の箇所に着手させる

オールBASICの時には10.73秒かかっていたのが、0.23秒になりました。(初手)
これは、実に46倍の速度向上です。

実行画面を動画キャプチャしたので、ご覧下さい。


まずは、オールBASIC

 

機械語

 

機械語の場合は、人間が石を置いた直後にCPU側の処理が完了しているかのようです。

プログラムリストも公開しておきます(誰も見ないとおもうけど)

「オールBASIC版」のソース

「BASIC+機械語版」のBASICソース

「BASIC+機械語版」のアセンブルリスト

ここまで処理速度の向上が図れたので、次にやる事は「評価関数をもっと凝ったモノにする」です。

何だか、Z80(のプログラミング)が楽しくなってきたよ〜
 (ハテ?今更、オレ何してんのかな。やっている事が高校生の時と一緒だよ)