見出し画像

自己の利益を最大化するアルゴリズムを考えて、君だけの最強の囚人を作ろう!~ヘボAIトーナメントのススメ~

 こんにちは。

 ゆる言語学ラジオ、ゆるコンピューター科学ラジオなど、ゆる学徒系ラジオのサポーターコミュニティ内で科学好きが集まった「ゆるく楽しく科学を学んで遊ぶ」をモットーに活動中の"ゆる科学部"、部員のれいばひろうです。

 さて、我々ゆる科学部ですが、このたび、参加型企画「ヘボAIトーナメント」という催し物を開催するはこびとなりました。

ヘボAIトーナメントとは


 ディープラーニングだ、LLMだと、昨今注目を集めているAI。しかし、高度になりすぎて、我々の手から離れてしまっているように思えます。でも、広辞苑 第七版の「人工知能」の語釈を引くと、「推論・判断などの知的な機能を備えたコンピュータ・システム」とあります。昨今AIと言えば機械学習みたいに思われていますが、必ずしも学習などしなくていいのです。「人工無能で良いという提案」です。そして、「AI」の開発を通じて、アルゴリズムとは何か、コンピュータがものを考えるとはどういうことか、ということに思いを馳せていただきたい。そんなことを考えて、この催しを企画いたしました。

 「ヘボAIトーナメント」は、ゲームの思考AIプログラム同士で試合を行い、トーナメント形式で優勝者を決定する、プログラム初心者でも参加可能なプログラミングコンテストです。
 また、トーナメント優勝以外に、主催者により、ヘボいAIに与えられる賞を決めたいと思います。優勝よりもこちらのほうがより名誉な賞です。勝ち負けにこだわらずに楽しめるものになれば良いと考えています。

 伝わる方向けに言うと、プログラミング版のヘボコン※のようなものを想定しています。

※ヘボコンとは( https://dailyportalz.jp/hebocon )​


第一回トーナメントのテーマは「囚人のジレンマ」です。

囚人のジレンマ

 はい。皆さんご存じの、ゲーム理論でお馴染み、あの「囚人のジレンマ」です。ゆる生態学ラジオとかでも言及があったと思います。

共同で犯罪を行ったと思われる2人の囚人A・Bを自白させるため、
検事は囚人A・Bに次のような司法取引をもちかけた。

  ・本来ならお前たちは懲役5年なんだが、もし2人とも黙秘したら、
  証拠不十分として減刑し、2人とも懲役2年だ。​
  ・もし片方だけが自白したら、そいつはその場で釈放してやろう(つまり懲役0年)。
  この場合黙秘してた方は懲役10年だ。​
  ・ただし、2人とも自白したら、判決どおり2人とも懲役5年だ。​

 このような条件において、「2人の囚人A・Bはそれぞれ黙秘すべきかそれとも自白すべきか」というのが「囚人のジレンマ」の問題です。
 なお2人の囚人A・Bは別室に隔離されており、相談することはできない状況に置かれているものとします。​

AもBも黙秘した場合
Bだけ自白した場合
AもBも自白した場合

ゲームルール

  • 二人のプレイヤーがそれぞれ上述の問題における囚人A、囚人Bとなり、任意回数分(1回から10000回のランダムで設定)のゲーム終了後、合計懲役年数が短い側の勝利​

  • 「無期限繰り返しゲーム」を採用。

    • ヘボ囚人はバカなので将来自分が何回逮捕されるかなんて解らないから​です。

  • プレイヤーが知りうる情報は、各回終了時に宣告される自分の懲役年数のみ​

    • 必要があれば、AIは自分でゲームの進行状況と想定される相手の状態を管理する必要があります。​

  • AIプログラムの不備等により、異常な行動(ゲーム進行シーケンスに悖った行動)をしだした囚人はその時点で死刑(負け)となります。

囚人のジレンマバトルシステム

 今回の課題は、我々が独自に開発した​『囚人のジレンマバトルシステム』で動作する、​各囚人の思考AIを作っていただくことです。

  • 検事の挙動(囚人から行動を聞き取り、それぞれの囚人に懲役年数を言い渡す)を行うサーバプログラム ( Windows11/Ubuntuで動作する )​

  • 言い渡された懲役年数を元に次の行動(黙秘か自白か)を決め、サーバに報告するクライアントプログラムが二つ( 🌟 募集するのはこれ!

  • サーバプログラムとクライアントプログラムは、UDPプロトコルで通信を行う​

  • クライアントプログラムは、UDPソケットプログラミングができる環境であればどのような形式でも動作可能

    • Python/Perlで動作するサンプルプログラムを提供します(後述)。通信処理部はサンプルプログラムのものをそのまま使用すれば動作しますので、気にせず思考AIのロジックのみを開発すればいいようになっています。

  • バトルの結果はサーバプログラムがcsvファイルとして出力する

囚人のジレンマバトルシステム

 動作シーケンスや、プロトコル仕様について詳しいことを知りたい方向けには仕様書を用意しています。

サンプルプログラムについて

 特に考え事をせず、ランダムに自白したり黙ったりするAI「mizuno」​、初手で自白し、それ以降は相手の手を逆張り続けるAI「horimoto」というふたつのサンプルプログラムを用意しています。

mizunoプログラム抜粋
horimotoプログラム抜粋

これらのサンプルプログラムは、トーナメント本戦にも参加予定です。

……AIなんてね、こんなんでええんですわ。

 さて、この二つのサンプルプログラムを、「ヘボ囚人のジレンマバトルシステム」上で実際に戦わせた様子が以下になります。画面上の二つのコマンドプロンプトでそれぞれ"mizuno"、"horimoto"が動作しており、画面下の横長のコマンドプロンプトで、サーバプログラムが動作しています。

 このデモでは、1762回逮捕された結果、合計懲役数で130年の差を付けてhorimotoが勝利しています。

対戦結果
グラフで見る対戦履歴

募集要項


 プログラムは、ゆる学徒系サポーターコミュニティ、及びゆる科学部Discord内で募集しています。
 ゆる言語学ラジオサポーターコミュニティに加入されている方は
「ゆる○○ラジオwithボイス」フォーラム内の「ゆる『ヘボAIトーナメント』学ラジオ(イベントキックオフ)」
というスレッドに募集要項をまとめておりますので、探してみて下さい。サーバプログラム、サンプルプログラム、仕様書はまとめて上記スレッドで公開されています。

募集締め切りは 2024/7/31 です。

 トーナメントの開催は8月後半を予定しています。(鋭意検討中)
トーナメントはゆサDおよびゆる科学部Discord内で、画面共有つきボイスチャットにて配信予定です。配信自体はゆサDで時折開催されている、非公式のゆる××ラジオみたいな方式でワイワイやれればと考えています。

イカしたアルゴリズムを考えて、君だけの最強のヘボ囚人を作ろう!

この記事が気に入ったらサポートをしてみませんか?