人狼知能プロジェクト

以下の議論は、必ずしも aiwolf.org の仕様に沿うものではない。

ざっと目は通したが細かい部分まで把握はしておらず、想像で書いている。


思考の基本モデル

人狼ゲームというのは、「可能なシナリオを各プレイヤーが提案し、そのいずれが最も有り得るかを判断するゲーム」だと定義できる。

ここで言うシナリオとは、「誰が本物の能力者で、誰が人狼か?」という仮説のことを指すと思ってもらいたい。

例えばAからMまで13人のプレイヤーがいて、狼が3人だとすれば、「狼はDHK、占い師はC、霊能者はL」というのが1つのシナリオだ。

この組み合わせは有限である。

それぞれのプレイヤーは、これらのシナリオのうちの幾つかを支持し、別の幾つかを妥当ではないと判断する。

また、プレイヤーはそれぞれ、自分の視点での可能なシナリオを語る。(あるいは “騙る”)

狼は当然、「自分は村人である」あるいは「自分は真の占い師である」というシナリオを騙っていくわけだ。

人間には、可能なシナリオを全て網羅することは不可能だが、AIにはそれは可能だ。

将棋のように爆発的に可能性があるわけではない。

それぞれのシナリオについて評価関数を元にスコアを算出し、各プレイヤーの発言をもとにスコアを増減させていく、というのが基本的な考え方になるだろう。

例えば、プレイヤーAが、「私はBを本物の占い師だと思う」と発言したら、プレイヤーAが本物の占い師であるシナリオはスコアを大きく下げることになる。

ゲーム開始から、様々な議論を重ねる中で、「可能なシナリオ」はどんどん減っていく。

ある者は途中で破綻、つまり、自分視点で語れる可能なシナリオがゼロになって、客観的に嘘が確定し処刑されることもあるが、稀なパターンと言って良い。

考えるべきことは大きく2つある。「推理」と「説得」である。

説得

まず「説得」について。

発言回数に制限が設けられているので、自分の支持する全てのシナリオを他のプレイヤーに伝えられるわけではない。

どのシナリオを誰と共有していくかという部分に戦略の余地がある。これがつまり「どう説得するか」である。

効果的に説得していくには、まず「誰を説得すべきか」を考える。

例えば「Bは狼である」というシナリオを自分が支持しているとするならば、説得の対象は明らかにB以外である。

また、このゲームは多数決で進行するので、最も説得に応じやすいプレイヤーを見極めることは重要だろう。

次に、説得対象のプレイヤーの性格を過去の発言から分析し、そのプレイヤーの判断を最も効果的に変化させるような発言をしていく、ということになる。

(相手の性格を読むということ自体はAIの世界でそれほど特別なことではない。将棋AIだって、相手の癖を見つけてその裏をかくようなアルゴリズムは持っている。)

このように、「自分視点で可能なシナリオの中から、最も同意の得られそうなシナリオを語っていく」という「説得」の思考モデルは、実は村側も狼側も全く同じように使える。

推理

次に「推理」について考えよう。

これは村側と狼側で大きく異なるところだ。

実際、狼側は殆ど推理する必要はない。すでに3人の狼を知っているのだから。

その代わりに、推理を偽装する必要があり、また、村側の推理を誘導する必要がある。

順番に考えよう。まずは村側の、真の意味の「推理」について。

先に述べた、「それぞれのシナリオについて評価関数を元にスコアを算出し、各プレイヤーの発言をもとにスコアを増減させていく」という思考モデルで推理の半分は達成されるが、十分ではない。

より正確に推理するためには「質問」をする必要がある。

自分の中で、Cはほぼ狼だが、Bが狼かどうかはっきりしない、としよう。

以下の様な問答を考えてみる。

自分 「Bに尋ねたい。Cは狼か?」

B 「いや、Cは占い師だ」

これによって、BとCが共に狼であるシナリオのスコアは上がる。

また、Bが占い師であるというシナリオは自分の中から消去することが出来る。

自分の中で有効な複数のシナリオの中から、より正しいシナリオを効果的に絞り込んでいく質問が出来れば、かなり賢い推理と言えるだろう。

推理偽装

さていよいよ狼側の推理、および「推理偽装」について考える。

この部分こそ、人狼AIが既存のゲームAIと一線を画す要素であろう。

先に述べたように将棋AI等にも、相手の「性格を読む」というアルゴリズムは既に多く実装されている。

ということは逆手に取って「性格を誤認させる」という戦略も当然あるにはあるのだが、実際にはあまり有効では無い。

というのは、「1番強い手を指すか、相手を騙すために別の手を指すか」と天秤にかけてみれば、相手を実際に騙せるという保証がどこにもない以上、素直に強い手を指すほうが効率が良いからだ。

将棋を始めとした、プレイヤーが対称な全てのゲームにおいて、相手を騙すことはどうしても二の次になる。

しかし人狼は違う。村側と狼側は対称ではない。

狼にとって、「もっともうまく騙すこと=もっとも強い手」なのだ。

狼側のアルゴリズムの半分は、村側と同じだ。「自分は狼ではない」というシナリオの幾つかを "信じこみ” それに従って推理や説得をすれば良い。

また、誰を襲撃すべきかもある程度定石があるのでそれにのっとっていけば良いだろう。

狼の難しさは、破綻をいかに避けるかにある。

狼の提案するシナリオは破綻しやすい。何故なら嘘が混じっているから。

破綻したシナリオは速やかに捨てて、別のシナリオに切り替えて説得していかなければならない。

ここに狼の癖が出るだろう。

この癖に気づかせないようにしなければならない。

鈍感なプレイヤー、推理の下手なプレイヤーを目ざとく見つけ、味方につけるシナリオを描く。

論理的な推論が完全ではないプレイヤーが混じっていたら、時には敢えて非論理的な発言をして説得できる可能性もある。

「騙す」ための具体的なテクニックはいくつかある。

それをAIの実装者である人間がAIに沢山教えこんでいく、という発想では「その裏」「裏の裏」というような思考のループに陥り、結局はただのジャンケンゲームになってしまう。

次の段階として「騙しの創発」 人間が教えていない騙し方をAIが実行する、ということが実現できるだろうか。

遺伝アルゴリズムやニューラルネットワークのような抽象化された思考回路から、「騙し方」を生み出すことが出来るだろうか。

そのあたりが、大変興味深い。