MultiPVと手加減モードとの関係

コンピューター将棋が強くなりすぎた結果、相手が人間(アマチュア)の場合は、手加減しないと勝負にならなくなってきました。

従来、探索深さを浅くしたり(depth limit)、探索ノード数を制限したり(nodes limit)、思考時間を制限したり(time limit)することによって弱さを実現してきましたが、それだと自然な弱さにはなりませんでした。(序盤がすごく弱いのに終盤だけが相対的に強いというような…)


2011年に私が作った、接待ひよこ将棋は、そのへん結構うまく出来ています。

いくら接待将棋だからと言っても、例えば角をただで取れるのにそれを取りに来ないようなのは興ざめでしょう。

そういう露骨さなしに、少しずつ損をしながら形勢を互角か少し悪いぐらいに保つような将棋を指してくれる将棋ソフトが欲しかったので作りました。

不思議なことに自然と互角ぐらいに保ってくれます。あまりの自然さに、相手が手加減してくれていることを忘れるほどです。(言い過ぎ?)

接待ひよこ将棋 v1.70を公開しました。

普通、αβ探索ではPV(最善応手列≒読み筋)で進めた末端の局面の評価値しか求まりません。

現局面で「2番目に良い指し手」がどれであるかはわからないのです。「2番目に良い指し手」が欲しければ、1番目に良い指し手を除外してPVを求めるという作業が必要になります。こうして2つ目のPVが得られます。これをMultiPVと言います。

MultiPVで上位5手求めようと思うとおおよそ5倍の思考時間が必要になるのでMultiPVは計算資源が結構無駄になります。

今回の電王戦に出場するAperyは、序盤ではMultiPVで探索して点数が近かったらランダムで採用しているらしく、指し手をバラけさせるために使っているそうです。(電王戦は持ち時間が結構あるので、プロ棋士の研究にハマるよりは、多少持ち時間を無駄にしてでもそれを回避するほうが良いという判断でしょう。)

また、Stockfishは手加減モードをMultiPVを用いて実現しています。つまり、MultiPVで最善手を上から5つほど求めて、手加減レベルに応じて、2番目の指し手を選ぶだとか3番目の指し手を選ぶだとかします。(最善手のscoreとの差が120 – 2×SkillLevelの範囲のscoreの指し手のなかからランダムで選ぶ)  そうするとうまい具合に手加減された手になります。

接待ひよこ将棋は形勢互角以上のときは手加減しない実装になっていたので、接待とは言え、なかなか人間が勝てない仕様でしたが、Stockfishの方法は手加減の手法としてその点においては優れています。

ただ、この実装だと、即詰みに関しては、「最善手のscoreとの差が120 – 2×SkillLevelの範囲まで許容する」ので、即詰みのスコアは無限大に近い値ですから、SkillLevelがいくらであろうと2番目の指し手を選ばず、コンピューターは長手数の即詰みに討ち取りにきます。このへんは人間っぽくないですね。SkillLevelに応じた手数の即詰みしかやってこないようにする(アマチュア初段相当であれば9手詰めまで、だとか)などこのへんの手加減に関して工夫の余地はありそうです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です