HOME → 懐かしのパソコンネタ
■ポケコン版リバーシ(オセロ) ひとまず完成 【自作ソフトの仕様など】
〜 ファミコン対ポケコン 〜
【はじめに】
8ビットコンピュータによるリバーシ(オセロ)ソフトの(Z80における)開発内容です。 しかも、当時のレベルにも達していないと思います。 (以降、かなり低次元な事を書いているのは自覚しています)
前回記事
(8月31日)にて、先読み(αβ)を実装して、普通の人(オセロの打ち方を特に学んでいない人)には負けない位の強さになりました。
そして、前回予告(@〜B)通り、以下の仕組みを実装してみました。(+CD)
@ 浅い手(深さ2以下)で、着手位置を(その深さの)評価順に並び替える。 A 並び替えた順で、再度、深く先読みをする。 B 終盤(空マス
7程度かな?)からの、「必勝読み」を実装させる。
C
盤面評価(評価関数)に、辺における「山」の評価と加えました。 D 定石の実装
定石(と云ってもメモリの都合上、僅か8手までの194パターンに過ぎませんが)を実装したので、序盤で極端な悪手を(コンピュータが)打つ事も減るでしょう。
まずは、どの程度の探索速度の向上になったのかを新旧で比較してみます。
(先読みの仕様変更について)
旧(V21)は、深さ1のみを1手読みの評価でソート(高評価順)しているだけ。 その後、本番の深さまで読む。 本番読みでは、深さ2以降は盤の左上から順に着手をする。
新(V21)は、 序盤・中盤(必勝読みの前)については 深さ1までの旧(V21)と同様 本番読みでは、深さ4までは、それぞれの深さからの1手読みの評価でソート
【序盤の比較】
なお、新(V22)は定石を実装しましたので、序盤については旧(V21)と同じ着手になりません。
よって、以下の盤面から比較を開始してみます。(定石終了後)
次にコンピュータが着手する位置は、B6です。
「@とAによってαカット・βカットが増えて探索速度の向上が期待される」と書きましたが、効果はかなり大きかったようです。
上記の表は、評価数(局面数)を示しています。(リーフなんて呼んでいるとか)
【終盤の比較】
終盤(必勝読み以降)について、新旧で、速度の比較を行ってみます。 サンプルとして以下の盤面を準備して、3パターンの着手を試してみます。
なお、旧(V21)は、序盤の時のソートと同じ事をしているだけです。 新(V22)は以下のソートを行っています。
終盤(必勝読み以降)については 深さ1の段階で3手先読み(αβを使用せず単純MINIMAXにより順位付け)による評価で
ソートする。 本番読みでは、深さ5までは、それぞれの深さからの1手読みの評価でソート
新旧で比較すると、かなり枝狩りがなされています。
しかし、このサンプルでは白(コンピュータ側)が”勝ってしまう”ので「必勝読み」の場合、”勝ち”と判断されると探索を終了してしまいます。 つまり、上記表の空きマス13と11の速度(探索性能)は、あまりあてには出来ないと思っています。
そこで、テストとして空きマス13と11とで、「完全読み」を行ってみました。
※時間を測定しませんでした。”必勝読み”時の速度が 140局面/1秒 程度なので、
空きマス13の着手時間は、着手パターン1と2で202秒程度 (3分22秒程度) 着手パターン3で、342秒程度
(5分42秒程度)になる事が予想されます。 ここまで、待たせる訳にはいかないので、空きマス13の”完全読み”は、やはり無理です。
「完全読み」の場合でも、改良の効果は得られている事が分かりました。
序盤、中盤・終盤の共に、約半分程の探索時間で完了していましたので、”とりあえず合格”とすることにいたしました。
(しかし、枝狩りの効率については、もっと改善の余地はありそうです。 ものスゴク低次元な事を書いている・・・とは思っています。)
【森田オセロについて】
8ビット時代で「強いオセロプログラム」・・と云えば「森田オセロ」を思い出します。 しかし、その「森田オセロ」が、どの程度の強さ(と読みの深さ)だったのかは、全然知りませんでした。 色々と調べたら、あやおりさんのブログに記載されていました。 当時のパソコン性能からしたら驚異的なのではないでしょうか?? (発表時期によって、違いはあるかもしれませんが・・・・)
「森田オセロ」の仕様(性能)
@ 1〜40手 3〜6手先読み 比較的浅い読み。 序・中盤では変化が広く深い先読みより時間ロスが大きい A
41〜46手 5〜9手先読み @よりも高速な評価関数を使用 局面変化が狭くなってきているので時間がかからない。 B 47〜48手
必勝読み (空きマス 13個より) C 49〜60手 完全読み (空きマス 11個より)
【引用】総評で、「森田オセロは残り12手の読み切りを、平均して3分以内で済ませています。 この時間はこれまでのオセロプレイヤーが10手読み切る時間に過ぎません。 【引用終わり】
「スゴイですね!」
【自作ポケコンリバーシについて】
私のプログラムでは、”必勝読み”だけでは無く、序盤・中盤で、(最大)9手なんて、とても待っていられません。
・・・・と云う訳で、
「トモカズのポケコンリバーシ」の仕様(性能)
@ 1〜47手 4手先読み プアな評価関数による A 47〜49手 必勝読み (空きマス 13個より) B
50〜60手 完全読み (空きマス 10個より)
そして、レベルを0から3まで設定出来るようにしたので、初心者でも「強すぎてツマラン」と云う事は無いでしょう。 (上級者ではレベル3でも物足りない・・・・とも言える)
こうやって比較すると、とてもじゃないけれど、「森田オセロ」に勝てる気がしないなぁ・・・・ 終盤の少し手前で、「森田オセロ」のように、もっと深く読むようにしても良いかもしれません。 (4手では余りにも浅いし、確かに40手位になってくると探索局面は少なくなっているようです。 5手先読みにしてもよさそうです)
【ファミコンと対戦】
基本的(なプログラムしか実装していませんが)、ソコソコの強さ※になったみたいです。
※現代のパソコン&リバーシソフトの性能と比較してはなりませぬ。 8ビットCPUなのです。
このポケコンリバーシの実力を測る為に、何か良い(当時のオセロソフト)は無いものかと考えてみました。
「そうだ!ファミコンのオセロ」があるではないか!!」
・・・と、思いつき、早速対戦をさせてみました。
「さぁ、自作ポケコンリバーシの実力はいかに??」
まずは、ファミコン版オセロ
レベル4 (メニューから選択できる最強レベル)には先手・後手、共に勝てました。
なお、ファミコン版オセロは、通常だとレベル4までしか選択できませんが、レベル4に勝つと「スペシャルステージ」としてレベル5との対戦が可能です。
「どっちが勝つのか?」 |