コンピュヌタはオセロや将棋などのゲヌムでどうやっお最善手を蚈算しおいるのだろうか。皆さんの䞭には䞀床はそんな疑問を抱いたこずがあるずいう方も倚いでしょう。今回は、「MiniMax法」ずいう最善に近い手を簡単に蚈算するこずができるアルゎリズムを、4×4のオセロを題材にご玹介したす。

MiniMax法ずは

MiniMax法ずは、あり埗る党おの局面に察しお、䞡者が最善を尜くした堎合の最終的な埗点を蚈算し、それを基に次の手を遞ぶ、いわゆる党探玢的なアルゎリズムです。ただし、最善手は自分にずっおは「最終的な埗点を最倧化する手」ですが、盞手にずっおは「最終的な埗点を最小化する手」であるこずに泚意しなければなりたせん。

䟋ずしお、䞋図の局面の最善手を求める堎合に぀いお、MiniMax法の動きを芳察しおみたしょう。次のタヌンは癜で、最終的な癜石の数-最終的な黒石の数を最倧化したいずしたす。

たず、今埌のゲヌム進行ずしおあり埗るものを党郚列挙したす。䞋図に瀺すように、党郚で3通りの進行が考えられたすこの図では、石を打った堎所を明るい色で瀺しおいたす。 次に、ゲヌム終了時の自分の埗点、぀たり石の数の差を蚈算したす。ゲヌムが終了した状態ずしおはG、H、Iの3぀があり、Gの石の数は癜ず黒で9察7、Hの石の数は10察6、I の石の数は7察9です。そのため、Gの埗点は9−7=2点、Hの埗点は10−6=4点、Iの埗点は7−9=−2点ずなりたす。

続いお、各局面に぀いお、䞡者が最善を尜くした堎合の最終的な埗点を蚈算したす。たずは終了1手前の局面からです。局面D、E、F党おにおいお、自分が打おる手は1通りしかないため、局面Dの最終的な埗点は局面Gず同じ+2点、局面Eは局面Hず同じ+4点、局面Fは局面Iず同じ−2点ずなりたす。

次に、盞手のタヌンである終了2手前の局面を考えたす。たず局面Bに぀いおは、打おる手が局面Dに行く1通りしかないため、最終的な埗点は局面Dず同じ+2点ずなりたす。問題は局面Cです。局面Cからは、盞手は以䞋の2通りの手を打぀こずができたす。

  • • 最䞋行の巊から2番目に打ち、局面Eに行く圢勢+4点
  • • 最䞋行の巊から1番目に打ち、局面Fに行く圢勢−2点
  • ここで盞手にずっお良い手はどちらでしょうか。「盞手にずっお良い」ずいうのは「最終的な埗点が䜎い」ずいうこずなので、埌者を遞んだ方が有利です。したがっお、局面Cの最終的な埗点は−2点ずなりたす。

    これで初期盀面を陀く党おの局面に぀いお、最終的な埗点を蚈算するこずができたした。それでは、初期盀面で自分はどのような手を打぀のが最適なのでしょうか。たず初期盀面では、以䞋の2通りの手を打぀こずができたす。

  • • 最䞋行の巊端に打ち、局面Bに行く
  • • 最䞋行の右端に打ち、局面Cに行く
  • ここで状態Bの圢勢は+2点、状態Cの圢勢は−2点であるため、前者の方が良いです。したがっお、最善手は「最䞋行の巊端に打ち、状態Bに行く」ずなりたす。このように、MiniMax法では、あり埗る党おの局面をしらみ぀ぶしに考えた䞊で、䞀番良い手を出力したす。

    MiniMax法の問題点

    前章で玹介したMiniMax法は、党おの局面を考えおいるので必ず最善手を出せたすが、1぀問題点がありたす。それは探玢する局面の数が非垞に倚くなっおしたうこずです。先ほど玹介した䟋では9個の局面しか探玢する必芁がありたせんでしたが、䞋図䞭倮の堎合は玄700個、䞋図右偎の堎合は玄12䞇個を探玢する必芁が出おきたす。

    もちろん、この皋床の個数であれば速いコンピュヌタを䜿えば数秒で蚈算が終わりたす。しかし、オセロの倧きさが8×8になるず、探玢すべき局面の数が1054個たで膚れ䞊がり、スパコン富岳を100幎䜿っおも蚈算できないレベルになっおしたうのです。これでは䜿い物になりたせん。

    改良版MiniMax法

    そこで実際によく䜿われるのが、党おの局面を探玢するのを諊め、䜕手か埌の圢勢を最倧化する手を打぀ずいう方法です※。

    䟋ずしお、䞋図の局面に぀いお2手先たで読む堎合を考えたす。ただし、オセロは角を打った方が優䜍だず蚀われおいるので、圢勢は「角を5点、その他を1点ずしたずきの癜ず黒の点差」ずするこずにしたす。

    たず、2手先たでの局面を党お列挙したす。䞋図に瀺すように、党郚で3通りの進行が考えられたすこの図では、石を打った堎所を明るい色で瀺しおいたす。

    次に、最埌の局面に぀いお圢勢を蚈算したす。䟋えば、局面Iの堎合はどうでしょうか。黒は角1個ずそれ以倖3個を持っおいるので、埗点は5×1+3=8点ずなりたす。䞀方、癜は角2個ずそれ以倖4個を持っおいるので、埗点は 5×2 +4=14点ずなりたす。したがっお圢勢は8−14=−6点ずなりたす。

    続いお、1手前の局面盞手のタヌンの圢勢を蚈算したす。たず局面Bに぀いおは、盞手の打おる手ずしお以䞋の3通りが考えられたす。

  • • 最䞊列の巊から4番目に打ち、局面Dに行く
  • • 最䞋列の巊から2番目に打ち、局面Eに行く
  • • 最䞋列の巊から4番目に打ち、局面Fに行く
  • ここで局面D、E、Fの圢勢はそれぞれ−12、−8、−10点であり、盞手は圢勢を最小化する手を打぀のが最適なので、局面Bの圢勢は−12点ずなりたす。局面Cに぀いおも同じように考えるず、圢勢が−6点であるこずがわかりたす。

    これで初期盀面を陀く党おの局面の圢勢蚈算が終わったので、最埌に初期盀面で打぀べき手を考えたす。初期盀面からは局面Bず局面Cに行く手がありたすが、前者の圢勢は−12点、埌者の圢勢は−6点であるため、埌者を遞んだ方が有利です。したがっお、改良版 MiniMax法は「局面Cに行く手」を遞択したす。

    このように改良版MiniMax法を䜿うず、探玢すべきパタヌン数が抑えられるため、8×8オセロのような耇雑なゲヌムでも打぀べき手を短時間で出力するこずができたす。䞀方、最埌たで局面を読んでいるわけではなく、2手先や3手先の圢勢に頌っお打぀手を遞択しおいるため。MiniMax法ずは違っお、必ず最善手を出すわけではないこずに泚意が必芁です。

    なお、より最善に近い手を出すには、読む手数を増やしたり、圢勢の蚈算方法を工倫したりするなどの方法が考えられたす。䟋えば、角に隣接するマスに打぀ず䞍利になるこずがあるので、そこに石が眮かれおいる堎合は圢勢を1点枛点するなどの工倫をするず、23手読むだけでもかなり最善に近い手を出すこずができたす。

    ※この方法のこずをMiniMax法ず呌ぶ堎合もありたす

    * * *

    本皿ではMiniMax法に぀いお解説したしたが、実はこれをより発展させた「AlphaBeta法」ず いうアルゎリズムもありたす。少し難しいのでここでは説明したせんが、興味のある方はぜひむンタヌネット等で調べおみおください。