2017.11.24

超文系社員が挑むAIプログラミング。「コンピュータ大貧民大会」への道!!(第三回)

第一回大会優勝者に聞く! 勝てるプログラミングのコツとは?

齋藤真祐美

P&E部門 デジタル・マーケティングセンター

2016年に電通テックに入社。ダイレクトプロモーション部署に所属し、eCRMを中心とした制作・分析業務にあたる。たまに舞台俳優(自称)。愛読書は太宰治『きりぎりす』、三島由紀夫『花ざかりの森・憂国』。

私の考えた戦略は通用するのか!?

皆様こんにちは。電通テック2年目社員の齋藤です。

さて、このシリーズも3回目ですね!
前回は、「コンピュータ大貧民大会」に参加するプログラムを作成するにあたって、考え方の基礎となる「ゲーム情報学」や「プログラム理論」について静岡県立大学(以下、静県
大)の大久保先生にお伺いしました。

第二回「そもそも大貧民をプログラミングするってどういうこと?」

また、電気通信大学(以下、電通大)の西野哲朗先生からは、私が作成するプログラムのベースとして「kou2」というプログラムをご紹介いただきました。
ご紹介いただいた「kou2」についての論文を読み、私なりに“勝てる作戦”を考えてみました。

作戦1:前の人が上がった時に真価を発揮する、「しれっと上がる作戦」

(直前の番の人が上がると、自動的に自分が親になるので)

作戦2:前半と後半とで手札の出し方を変える

果たして、この作戦はプログラムとして上手くいくものなのでしょうか。
そもそも、どうやったら他のプログラムに勝てるのでしょうか。
分からなければ聞いてみよう、というわけで、「コンピュータ大貧民大会」第一回大会の優勝者である西野順二先生(以下、西野(順)先生)に大会の“必勝法”を聞いてきました。

西野 順二

電気通信大学大学院情報理工学研究科 情報ネットワーク工学専攻 助教

日本知能情報ファジィ学会に所属。日本唯一とも言える「多次元ファジィ」を専門に、長きに渡り第一線で研究を進めている。その研究成果を応用した、AIを搭載したミニ四駆を開発し、ミニ四駆AI大会実行委員会の代表も務める。

丁寧なプログラミングを心がけることが優勝につながった

前回同様、プログラム大好きな先輩、伊藤社員にも取材に同行してもらっています
齋藤

先生がコンピュータ大貧民大会へ参加されたきっかけについて教えてください。

西野(順)先生

もともとロボカップサッカー(※2)という人工知能ロボット世界大会にも参加したり、イベントが好きでして(笑)。それから、天才プログラマでもあるんですね。

齋藤

名刺にも天才の字が! 天才、すごい……。

西野先生の名刺に輝く「天才プログラマ・スーパークリエータ」の文字
西野(順)先生

大会を主催されている西野哲朗先生の情報を得て、天才プログラマの沽券にかけて乗り込まねばならないな、と(笑)

齋藤

結果、第一回優勝者になられて。

西野(順)先生

どんな相手と戦うのかもわかりませんから、とてもドキドキしました。ただ、私は教育者ということもあり、丁寧できれいなプログラミングを心掛け、オープンソースとしてみんなに使ってもらえることを目指したんです。

齋藤

では勝因は「丁寧」という部分にあったと思いますか? 

西野(順)先生

まあ、ちょっと運がよかったこともあるのかなあ(笑)。

にこッ
齋藤

運かい!

西野(順)先生

確かに丁寧に作ったことで、安定して動いたという面はあります。対戦相手のプログラムには予期せぬカードを出すトラブルも相次いだようです。ところが私のプログラムは丁寧に作ったことで堅実な手を打っていたので。

「損をしない」が勝利への近道!?

西田先生がコンピュータ大貧民以外で情熱を注いでいる、AIミニ四駆
齋藤

私は、「kou2」という前々回の大会で優勝したプログラムを使って戦おうとしているのですが、これ以上どうやって改善すればいいのか、行き詰まっています。西野哲朗先生とお話していると、大富豪をキープするより、富豪をキープしたほうが強い(※3)ということもあるようです。堅実性というのは、そういうこともありますか?

西野(順)先生

あります。「ゲーム理論」(※4)でもなるべく損をしないようにするほうが強いと言われています。勝つためには得をするよりも損をしないことを目指す、ということですね。

齋藤

損をしないというのが大事……?

西野(順)先生

わかりやすいように、簡単なゲームで考えてみましょうか。伊藤さんに質問です。

伊藤

は、はい。

西野(順)先生

伊藤さんと私でグー、パーを2人で出し合うだけのゲームです。グーとグーだったら伊藤さんが1点、パーとパーだったら伊藤さんが5点、お互いが違ったら伊藤さんは0点で、私に3点が入ります。さあ、なにを出しますか!?

伊藤

ええっ。いまの話の流れでは、パーが得だけれど、そちらは出し辛いですよね。そういう意味で堅実にグーを出し続けたほうが有利な気がする……(笑)

西野(順)先生

正解です。もし伊藤さんがずっとパーだったら、僕はずっとグーを出していれば負けないです。普通は、5点と1点ならば5点を選ぶほうが得のような気がするのですが、それは相手のことを考えてないパターン。
ゲームでは必ず相手がいます。相手はあなたがうまくいかない手を考えるんです。伊藤さんが5点取得のためにパーを出したい、と分かるから私はグーを出す。ただ、ずっとグーを出していると、伊藤さんもグーに変えてくる可能性があるので、私はたまにパーを出そうと考える……。そうすると、伊藤さんはグーをちょっと多めにして、たまにパーも出しておけば、タイミングによっては5点採れる、となるわけです。

齋藤

ああ! なるほどそういう戦略ですか!

あえてベストではない手を選ぶという戦法

齋藤

「kou2」の中には謎の数字が多いといいますか…ここはどうしてこの数字なのかな……?というのがたくさんあります。あれは、やっぱり勘で決めるのですか?

西野先生

勘で決めつつ、対戦を一万試合くらいやって比較して決めていると思います。実験と実績と勘と……ですね。面白いですね。

齋藤

なんだか人間味というか、作者の気持ちが入っていて面白いプログラミングですね。

西野先生

囲碁や将棋のようにすべての打ち手を考察できるゲームは完全情報ゲームと言います。「AlphaGo」(※5)がいろいろと話題ですよね。
一方、多人数で行う大貧民や人狼(※6)は、不完全情報ゲーム。
相手がなにをやってくるかわからないゲームで、一番よい手のがよくならないというケースがあります。
そんなとき、相手に「見え見え」な手はダメなんです。手が読まれて、攻略されてしまう。

齋藤

まさに人間のゲームですね……。

西野先生

絶対に勝ちたい!という気持ちも、勝てなくなる原因なんだなあと、この分野を研究していると痛感しますね。

齋藤

くやしい!と思うと、それが見抜かれちゃう?(笑)

西野先生

そういう意味では、相手に意図を見抜かれづらくするのも一つの手ですね。自分の番で1枚のカードを出すか2枚のカードを出すかが選べるとき、常にベストの選択をするのではなく、何回かに1回はベストではないカードを出すほうが、勝ちやすくなる可能性はあります。

「人間らしい」不規則性で勝利を狙う!

今回、西野先生にお話を伺って、私なりに「必勝ポイント」をまとめてみました。

 
  • ・きちんと動作すること(当たり前ですが、意外と大事。)
  • ・損をしないようにすること(ずっと“富豪=第二位”をキープすることが最終的に勝つポイントだそう。)
  • ・たまにベストとは違う手を打つ

やはり勝利は、堅実で安定したプログラムが掴むものなのですね。
私の挑戦するライト級においては、奇をてらった戦略や、クセのあるプログラムよりも、オールマイティーに“負けない”プログラムが強いということがよく分かりました。

そして、冒頭で紹介した私の作戦ですが、西野先生のお話を伺った後で改めて考えてみますと、

作戦1→効果を発揮する範囲が狭すぎて、最終的な勝敗には影響しないのではないか。
作戦2→悪くないけれど、そんな複雑なプログラムを組むときちんと動くようにするまでが大変そう…。

……やはりより良いものを作ることは難しいのですね。

では、既に完成している「kou2」を私なりに改善するとしたら、どうしたら良いのでしょうか。
「kou2」の中には、「自分が親の時に出す組を決める」という動作があります。自分の手札の中に出せる組が複数あった場合、
「kou2」では、独自の関数によって優先順位をつけ、その順位が一番高い組を場に出します。ですが、もしもプレイヤーが人間だった場合、必ず、優先順位の一番高い組を出せるのでしょうか。

「なんとなくこっちを出してみたい」「スートの中ではスペードが一番好きだから、出したい(取っておきたい)」という心理があるはずです。そしてその“ベストを選べない”心理が、戦局をより面白いものにするのではないでしょうか。また、その不規則性が、計算によって厳密に決められたプログラムよりも強い、ということがあるかもしれません。
プログラムが、相手のプログラムの動きを予測できる(あるいは予測しようとするように組まれている)と仮定すると、そのプログラムの裏をかけるかもしれないのです。
なんだかワクワクしてきましたね!

毎回、必ず優先順位第一位のものを出すのではなく、たまに第二位のものを出すとして、その割合は……ここから先は、大会本番までの秘密です。

私の作るプログラムの方針も決まったので、静県大の大久保先生と作戦会議を重ねつつ、大会本番に備えたいと思います。
次回は、いよいよ「コンピュータ大貧民大会」に挑戦します!
果たして、私の理論はプログラムに実装できるのか!? そして、他のプログラムに太刀打ちできるのでしょうか!大会当日の様子と共にお送りいたします。

※1) 正式名称は「UECda-2017」。毎年、電気通信大学が主催しているコンピュータ大貧民大会。プレイヤーは人間ではなく、参加者の組んだプログラム。
(※2)ロボット工学と人工知能の融合、発展のために自律移動ロボットによるサッカーを題材とした日本の研究者らによるプロジェクト。1997年に「第1回RoboCup世界大会」が開催。
(※3)大貧民では、プレイヤーごとに階級が割り振られる。「大貧民」「貧民」「平民」「富豪」「大富豪」の順に階級が上がる。
(※4)ジョン・フォン・ノイマンとオスカー・モルゲンシュテルンの共著書『ゲームの理論と経済行動』(1944年) によって提唱された理論。
 
Written by:
齋藤真祐美