2017.12.12

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

大会直前! 果たして本番までにプログラミングを実装できるのか!?

.co.jp/articles/workation/
  • https://baestg.dentsutec.co.jp/articles/web-comic/

  • https://baestg.dentsutec.co.jp/Articles/weather/

  • https://baestg.dentsutec.co.jp/articles/vr-stadium2/

  • https://baestg.dentsutec.co.jp/articles/vr-musical/

  • https://baestg.dentsutec.co.jp/articles/vr-fitness/

  • https://baestg.dentsutec.co.jp/articles/vr-firstairlines/

  • https://baestg.dentsutec.co.jp/articles/vr-01/

  • https://baestg.dentsutec.co.jp/articles/uecda-5/

  • https://baestg.dentsutec.co.jp/articles/uecda-4/

  • https://baestg.dentsutec.co.jp/articles/uecda-3/

  • https://baestg.dentsutec.co.jp/articles/uecda-2/

  • https://baestg.dentsutec.co.jp/articles/uecda-1/

  • https://baestg.dentsutec.co.jp/articles/tomofun/

  • https://baestg.dentsutec.co.jp/articles/instagram-02/

  • https://baestg.dentsutec.co.jp/articles/ili/

  • https://baestg.dentsutec.co.jp/articles/idea/

  • https://baestg.dentsutec.co.jp/articles/gnavi/

  • https://baestg.dentsutec.co.jp/articles/gifmagazine/

  • https://baestg.dentsutec.co.jp/articles/gifmagazine-02/

  • https://baestg.dentsutec.co.jp/articles/gen-z-2021-03/

  • https://baestg.dentsutec.co.jp/articles/gacha-04/

  • https://baestg.dentsutec.co.jp/articles/gacha-03/

  • https://baestg.dentsutec.co.jp/articles/gacha-02/

  • https://baestg.dentsutec.co.jp/articles/fuji-4/

  • https://baestg.dentsutec.co.jp/articles/fuji-3/

  • https://baestg.dentsutec.co.jp/articles/fuji-2/

  • https://baestg.dentsutec.co.jp/articles/fuji-1/

  • https://baestg.dentsutec.co.jp/articles/flyvision/

  • https://baestg.dentsutec.co.jp/articles/flash-print/

  • https://baestg.dentsutec.co.jp/articles/flash-print-02/

  • https://baestg.dentsutec.co.jp/articles/ethical/

  • https://baestg.dentsutec.co.jp/articles/ec-video/

  • https://baestg.dentsutec.co.jp/articles/ec-01/

  • https://baestg.dentsutec.co.jp/articles/digiexpo/

  • https://baestg.dentsutec.co.jp/articles/deliro/

  • https://baestg.dentsutec.co.jp/articles/d360/

  • https://baestg.dentsutec.co.jp/articles/cultv/

  • https://baestg.dentsutec.co.jp/articles/cultv-02/

  • https://baestg.dentsutec.co.jp/articles/contents/

  • https://baestg.dentsutec.co.jp/articles/consumption-behavior/

  • https://baestg.dentsutec.co.jp/Articles/computing/

  • https://baestg.dentsutec.co.jp/articles/charging/

  • https://baestg.dentsutec.co.jp/articles/chalk-2/

  • https://baestg.dentsutec.co.jp/articles/chalk-1/

  • https://baestg.dentsutec.co.jp/articles/ceatec/

  • https://baestg.dentsutec.co.jp/articles/butterflycircuit/

  • https://baestg.dentsutec.co.jp/articles/bpo/

  • https://baestg.dentsutec.co.jp/articles/book_and_bed/

  • 超文系の私がプログラミングに挑戦!と、 全四回にわたりお届けしてきたこの記事も、とうとう最終回を迎えました。ラストとなる今回は前編・後編と2本立てでお送りします。
    ではさっそく。”いよいよ本番!”とその前に、大会当日までの奮闘記をお届けします!初心者の私が、なぜプログラムを組めたのか!? 前編ではその全貌を明らかにします。

    目次

    大会本番までの最終調整の日々…

    さて、今日は大会当日です!「AI大貧民大会」は、電気通信大学(以下、電通大)の学園祭である「調布祭」の中で行われます。この大会のために、わざわざ地方から会場に駆けつける方もいらっしゃると聞いて、開場前から心が躍ります。「AI大貧民界の甲子園」と言っても過言ではないでしょう!
    ……なんて軽口を叩いておりますが、実は前回の第三回記事から本日に至るまでプログラミングに四苦八苦し、最後の最後まで大久保先生と西野哲朗先生にご指導いただいておりまして…なんとか無事に大会当日を迎えられて一安心しているところです。

    「kou2」という既存のAI大貧民のプログラムを改変するという形で挑戦している私ですが、前回の記事では、『毎回、必ず優先順位第一位のものを出すのではなく、たまに第二位のものを出す。』という作戦を立てました。
    言葉にするとたったこれだけのことなのですが、この作戦をいざプログラムに実装させるとなると色々な箇所を書き換えたり、指示を追加したりという作業が必要になります。そう考えると、人間の脳の処理能力の凄さに驚かされます。もしこれが人間のプレイヤーであれば、上記の作戦を“意識する”だけで実行可能なのですから……。

    論文を読み込むことでプログラムの内容を理解できた!

    プログラミング初心者の私は、プログラムを頭から読んだところで、10行理解するのに半日はかかってしまいます(「kou2」のプログラムは、全部で数千行あるのです……)。
    そんな時に便利なのが、第二回記事にある西野先生に“処方”いただいた論文なのです。
    論文には、プログラミングの内容が日本語(もしくは英語)と簡単な数式で解説してありますから、文系の私にも頑張れば読めてしまうのです。

    論文を読んだことで、「kou2」について次のことが分かりました。

    簡単に言えば、自分に配られた手札の中から、親の時は“弱い組”を出し、親でない時には各評価値に基づいて“出した後に最も不利にならない組”を出すということです。
    ふむふむ、これまた、言葉にすると簡単そうですが…。
    「kou2」では、上の図の中にある「優先評価値」が最も高い組を出すようにプログラミングされています。ということは、私の作戦を組み込むためには、「最も優先評価値が高い組を出す」という命令の部分を書き換えたらい良いわけです。
    なるほど、と一人で納得した私は、実際のプログラムの中から該当箇所を探し出そうとしました。が…。

    あれ? どこなのだろう…。
    実はプログラムは一つのファイルから成っているのではなく、複数のファイルが参照しあって作業を実行しているので、「ここで使われているこの関数は、全く別の場所で定義されている」ということが度々あります。
    こうなると、プログラミング初心者の私には手も足も出ません。
    慌てて大久保先生にメールを送りました。

    私の慌てぶりがよく分かります。対して、大久保先生の適切な返答。さすがです。
    これで、プログラミングのどこをいじれば、『毎回、必ず優先順位第一位のものを出すのではなく、たまに第二位のものを出す。』という作戦が実行できるのか分かりました。 後日、大久保先生のもとで、最後の作戦会議が行われました。
    論文とプログラミングを読むことで、どの箇所をいじればいいかは大体把握した私ですが、実際にそれをC言語や計算式に落とし込むには、やはり専門家の助けが必要です。

    大久保先生にプログラム中に挿入する式を教えていただき、あとは実際にこれらの式を入れるだけ!段々とゴールが見えてきました。

    あとはこれをコンパイルして、問題なく作動すれば完成です!
    長い道のりでしたが、これでやっとエントリーができます。大会の出場者は、大会の2週間ほど前にプログラムを提出する必要があるのです。その後、提出されたプログラムは電気大の学生さんたち達の手によってデバッグという作業を経て、正式に大会への参加が認められるとのことです。
    最後の最後まで確率の調整で粘ってしまった私は、締め切り当日の夜に、完成したプログラムと共にエントリーをしました。やれやれ、後は大会を待つだけ…と思いきや。

    大久保先生からの最後のチェック! そして……

    大久保先生から、「プログラムのチェックをしていたら、ミスを見つけました。まだ間に合うので修正して提出し直してください。」と連絡が。
    慌てて修正し、再提出が無事に完了。後は野となれ山となれ、ほっと肩の荷が下りました。

    プログラムの提出も完了し、残るは大会当日の戦いを見守ることだけとなりました。果たして、私の提出したプログラムは、大会を勝ち進むことはできるのか!?そもそもきちんと動いてくれるのでしょうか。
    何にせよ、私にできることはもうない…と思っていたところ、西野先生からご連絡をいただきまして…。

    「齋藤さん、大会中のシンポジウムで今回の記事の経緯を喋ってみませんか?」

    ええっ!!!、こんな新参者が喋っていいのでしょうか…。
    新たな不安を抱えながらも、シンポジウムで話す準備を始めた齋藤は、無事に大会を生き抜くことができるのでしょうか。
    後編もどうぞお楽しみに!