皆様こんにちは。電通テック2年目社員の齋藤です。
さて、このシリーズも3回目ですね!
前回は、「コンピュータ大貧民大会」に参加するプログラムを作成するにあたって、考え方の基礎となる「ゲーム情報学」や「プログラム理論」について静岡県立大学(以下、静県
大)の大久保先生にお伺いしました。
第二回「そもそも大貧民をプログラミングするってどういうこと?」
また、電気通信大学(以下、電通大)の西野哲朗先生からは、私が作成するプログラムのベースとして「kou2」というプログラムをご紹介いただきました。
ご紹介いただいた「kou2」についての論文を読み、私なりに“勝てる作戦”を考えてみました。
作戦1:前の人が上がった時に真価を発揮する、「しれっと上がる作戦」
(直前の番の人が上がると、自動的に自分が親になるので)
作戦2:前半と後半とで手札の出し方を変える
果たして、この作戦はプログラムとして上手くいくものなのでしょうか。
そもそも、どうやったら他のプログラムに勝てるのでしょうか。
分からなければ聞いてみよう、というわけで、「コンピュータ大貧民大会」第一回大会の優勝者である西野順二先生(以下、西野(順)先生)に大会の“必勝法”を聞いてきました。
西野 順二
電気通信大学大学院情報理工学研究科 情報ネットワーク工学専攻 助教
日本知能情報ファジィ学会に所属。日本唯一とも言える「多次元ファジィ」を専門に、長きに渡り第一線で研究を進めている。その研究成果を応用した、AIを搭載したミニ四駆を開発し、ミニ四駆AI大会実行委員会の代表も務める。
今回、西野先生にお話を伺って、私なりに「必勝ポイント」をまとめてみました。
- ・きちんと動作すること(当たり前ですが、意外と大事。)
- ・損をしないようにすること(ずっと“富豪=第二位”をキープすることが最終的に勝つポイントだそう。)
- ・たまにベストとは違う手を打つ
やはり勝利は、堅実で安定したプログラムが掴むものなのですね。
私の挑戦するライト級においては、奇をてらった戦略や、クセのあるプログラムよりも、オールマイティーに“負けない”プログラムが強いということがよく分かりました。
そして、冒頭で紹介した私の作戦ですが、西野先生のお話を伺った後で改めて考えてみますと、
作戦1→効果を発揮する範囲が狭すぎて、最終的な勝敗には影響しないのではないか。
作戦2→悪くないけれど、そんな複雑なプログラムを組むときちんと動くようにするまでが大変そう…。
……やはりより良いものを作ることは難しいのですね。
では、既に完成している「kou2」を私なりに改善するとしたら、どうしたら良いのでしょうか。
「kou2」の中には、「自分が親の時に出す組を決める」という動作があります。自分の手札の中に出せる組が複数あった場合、
「kou2」では、独自の関数によって優先順位をつけ、その順位が一番高い組を場に出します。ですが、もしもプレイヤーが人間だった場合、必ず、優先順位の一番高い組を出せるのでしょうか。
「なんとなくこっちを出してみたい」「スートの中ではスペードが一番好きだから、出したい(取っておきたい)」という心理があるはずです。そしてその“ベストを選べない”心理が、戦局をより面白いものにするのではないでしょうか。また、その不規則性が、計算によって厳密に決められたプログラムよりも強い、ということがあるかもしれません。
プログラムが、相手のプログラムの動きを予測できる(あるいは予測しようとするように組まれている)と仮定すると、そのプログラムの裏をかけるかもしれないのです。
なんだかワクワクしてきましたね!
毎回、必ず優先順位第一位のものを出すのではなく、たまに第二位のものを出すとして、その割合は……ここから先は、大会本番までの秘密です。
私の作るプログラムの方針も決まったので、静県大の大久保先生と作戦会議を重ねつつ、大会本番に備えたいと思います。
次回は、いよいよ「コンピュータ大貧民大会」に挑戦します!
果たして、私の理論はプログラムに実装できるのか!? そして、他のプログラムに太刀打ちできるのでしょうか!大会当日の様子と共にお送りいたします。
※1) 正式名称は「UECda-2017」。毎年、電気通信大学が主催しているコンピュータ大貧民大会。プレイヤーは人間ではなく、参加者の組んだプログラム。