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

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との対戦が可能です。

「どっちが勝つのか?」
 


ファミコン対ポケコン オセロ対決 【先手FC黒】

 

 

 

とにかく、ファミコンには(着手に)待たされました。
(上記の動画は、待ち時間はカットしてあります)

これだけ(探索)時間を掛けても良いのならば、ポケコンリバーシも、さらにもう1手深く読んでも良いかもしれません。
・・・「いや、ちょっとコレは無いな」

とにかく、勝てました。その後、先手(黒)ポケコンでも勝てました。

ファミコンは着手に変化がほとんど無い為(全く無い訳ではなさそうです)、ポケコン側で変化(定石をランダムで選択)をさせて数回対局をしてみました。

先手(黒)ポケコンだと4回やって全勝でしたが、後手(白)ポケコンだと、3回中1回は負けてしまいました。

勝ち越せてはいますが、圧倒的に自作ポケコンリバーシが強い訳では無さそうです。

しかも、1度だけですが対局途中で、ファミコンが試合放棄してしまったのです。
これには唖然とさせられました。(ファミコンの番で、なぜかリセットされた)

なお、ファミコン最強のレベル5に勝つと以下のエンディングが表示されます。


 

という訳で、「当時のソフト」と対戦させてみて、「まずまずの結果」だったので、これにてひとまず完成という事にしてみましょう。