2017.10.13

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

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

齋藤真祐美

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

2016年に電通テックに入社。コンテンツマーケティング部署に所属し、
オウンドメディアの企画・制作業務にあたる。たまに舞台俳優(自称)。愛読書は太宰治『きりぎりす』、三島由紀夫『花ざかりの森・憂国』。

超文系の若手電通テック社員が、超理系イベントである「コンピュータ大貧民大会」(注1)に挑戦! イチからAIについて勉強する過程で、いま話題となっている「AI」の基礎の基礎を、新人ならではの目線で分かりやすくご紹介する全4回のシリーズです。

目次

大会ルールのおさらいとプログラムの仕組みを学ぶ

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

前回の記事はお楽しみいただけましたでしょうか?
前回は、主に「コンピュータ大貧民大会」の成り立ちを電気通信大学(以下、電通大)の西野先生にお伺いしました。
今回は、実際に大貧民をプログラムするにあたって、大会ルールをおさらいし、西野先生とともに「コンピュータ大貧民大会」を立ち上げた、静岡県立大学講師 大久保先生にプログラミングの基礎知識について教えていただきます。いよいよプログラミングの入り口です!

さっそくレクチャー!の前に、自分でも少し「コンピュータ大貧民大会」についておさらいをしてみました。
今年度の公式サイトを見てみると、ルールやプログラム作成上の注意点が掲載されています。

細かいルールについては公式サイトにお任せするとして、私が気になったのは、

・革命あり
・8切り(ハチキリ)
(注2)あり

の2点です。前回記事でも少し触れましたが、「大貧民」というゲームには多くのローカルルールが存在します。そして、私が大貧民をプレイしてきた環境では、「革命」や「8切り」のようなルールは存在しなかったのです。「8切り」はともかく、特に「革命」が厄介です。「革命」とはその名の通り、“強さの序列がひっくり返る”ルール。「革命」が起こると、通常は強いカードとされているK(キング)やA(エース)が、いきなり最弱となってしまうという、弱者にとっては一発逆転のチャンス、強者にとっては一気にどん底へと落とされる恐ろしい状況です。

一般的に「革命」の条件は、以下とされています。

・4枚以上のカードがペアとして同時に出されたとき
・5枚以上のカードが階段(数字が12345など順列になっている)として同時に出されたとき


決して確率は高くはありませんが、プログラムを作る際には、当然この「革命」も考慮に入れないといけません。これまで、「革命」の文化が全くなかった私に、果たしてこのルールに対応したプログラムは組めるのでしょうか・・・?

次に、「通信のプロトコル」についてですが・・・。つ、つ、通信のプロトコル?

超文系の私にとってなじみのない単語が出てきました。
恐る恐るこのページを覗いてみますと、聞き慣れないタイトルに反して、非常に分かりやすく「コンピュータ大貧民大会」のゲームの進め方が記載されていました。
簡単に内容をまとめると、大貧民のゲームを進めていくために、カードを配布したり、出された手が正当かどうかを判断したりする「サーバー」と、手札の中からカードを提出する「クライアント」という二つの役割が存在するということ。
そして、「コンピュータ大貧民大会」において、参加者が作るのは「クライアント」のプログラムになるとのことです。

通信の概略図 ※UECda公式サイトより引用

つまり、私がプログラミングをする上で考えなくてはならないのは、

どういう場面で、どの手札を出すのか

ということ。
手札の出し方は、プレイヤーの個性が表れる部分。
じっくり堅実に弱いカードから順番に出していくのか、「切れそうな」場面で積極的に場を流し、自分のペースに持ち込むのか・・・。
「どうやったら最強のプログラムを作れるのか」と様々に想像を膨らませながら、電通大の卒業生で、現在は静岡県立大学で講師をされている大久保先生のもとへ伺います。

「ゲーム木」を制する者が、勝負を制す!

電通大に伺い、学生時代以来の座学スタイルで大久保先生のレクチャーを受けます。
また、今回の「取材」という名の勉強会には、心強い助っ人として、私の先輩で「プログラミング大好き!」な伊藤社員にも参加してもらいました。そして、現役の電通大の学生も一緒に学びます。

左から伊藤社員、電通大の学生さん、齋藤、大久保先生

プログラミングの理論の前に、まずは「ゲーム情報学」の基礎の基礎である「ゲーム木」の説明を受けました。
「ゲーム木」とは、ゲームの盤面と指した手を図に表したものです。

「木」と言われるように、手順が枝分かれして表現されます。

たとえば三目並べ(=○×ゲーム)の場合、一手目に先手が○をどこに置くかは3通りあります(「9通りでは?」と思った方、「ゲーム木」では、回転させたり反転させたりして同じ形になるものは、全て同じと見なします)。
次に、二手目で×をどこに置くかを考えます。例えば、「一手目に○を格子の中心のマスに置いた場合」では、×の置き場所は2通りになります。
このように、ゲームが進んでいく中で繰り出される手を全て網羅していくことが、ゲームのプログラミングに重要なのだそう。

大久保先生

「ゲーム木」を明らかにすることで、戦局に有利な手が計算によって導き出せます。コンピュータは、「次の手でどこに何を出したらどんな結果になるか」を計算し、最も勝率の高い手を出すことが可能なのです。

「ゲーム木」の説明をしてくださる大久保先生

大久保先生によると、オセロはこの「ゲーム木」が完全に解明されているとのこと。
一方、チェスや将棋は、盤面がより複雑なため、「ゲーム木」を計算し尽くすのは難しい。

ゲーム木の説明を聞きながら、真剣にノートを取ります

プログラムとは製作者の頭の中を書き表したもの

大久保先生の分かりやすいご説明で、なんとかゲーム情報学の入り口には立てたような気がします。 では、いよいよプログラムを書く段階に・・・ちょっと待ってください、公式サイトや大久保先生のご説明で、プログラミングの仕組みは分かりましたが、実際にプログラムを書くのって専門知識が必要なのでは・・・?

大久保先生

「コンピュータ大貧民大会」では、過去の優勝プログラムが公開されています。その中身を読んで、改善点を見つけて改訂することで、十分強いプログラムが作れるんです。

過去の優勝プログラムをいじるだなんて、お、畏れ多い・・・!!
なんだか、先人たちが科学力を結集して作った戦闘ロボットに突然パイロットとして選ばれて乗り込む気分です。

大久保先生

まあ、たとえプログラムの数値をいじっても、強くなるかどうかはまた別なんですけどね。

で、ですよね・・・! ここで、同席していた西野先生から助け舟が!!

西野先生

過去の優勝プログラムの中でも、「kou2」というものが多分一番読みやすいので、このプログラムを読んでいきましょう。プログラムとは製作者の頭の中を書き表したもので、とても性格が出ます。他の人が読むと、何が書いてあるのかも分からないようなプログラムが多いのですが、この「kou2」は比較的分かりやすいです。

てきぱきと私に「kou2」を“処方”する西野先生に、「プログラムって読めるんですか・・・?」なんて初歩的な質問を飲み込みます。
すると、そんな私の表情を察知したのか、

西野先生

大久保先生、「kou2」は論文もたくさんありますからね。それを齋藤さんに読んでもらってください。

大久保先生

そうですね。では、基礎的なものをお送りしますね。

西野先生

論文を読んでもらえば、「kou2」に何が書いてあるかも分かるようになります。

超文系の私には、思わずめまいがする光景

「日本語で書かれてる、良かった!」と思ったのも束の間、もちろん「英語+数式」の論文もありました。これから辞書を引き引き読んで勉強します。

次回は、論文を読んで勉強した「kou2」の疑問点や改善点を見つけ、オリジナルのプログラムを作成する過程をお届けします!
 


 


(注1) 正式名称は「UECda-2017」。毎年、電気通信大学が主催しているコンピュータ大貧民大会。プレイヤーは人間ではなく、参加者の組んだプログラム。
(注2) 大富豪は、弱いカードから強いカードを順々に出していくルールがあるが、唯一、この「8」を出したときだけ、「8切り(ハチキリ)」として、8を出した人が場を流すことができる。これによって大貧民となり弱いカードしかないときでも、切り札として8を使って、次の回で大富豪を目指すことが可能になる。
 

齋藤真祐美

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


2016年に電通テックに入社。コンテンツマーケティング部署に所属し、オウンドメディアの企画・制作業務にあたる。たまに舞台俳優(自称)。愛読書は太宰治『きりぎりす』、三島由紀夫『花ざかりの森・憂国』。