Morikatron Engineer Blog

モリカトロン開発者ブログ

ガイスターのプログラムを紹介します

こんにちは、モリカトロン株式会社チーフエンジニアの松原です。

今日は、モリカトロンがオープンソースとして公開しているガイスターのプログラムとその周辺情報を紹介します。この記事の対象読者はゲームAIに興味がある人、ボードゲームが好きな人、ガイスターが好きな人、ガイスターの思考ルーチンをPythonで書きたい人(日本に何人います?)、などです。Google Colaboratoryってナニ?な人もどうぞ。

とても面白いボードゲーム「ガイスター」の紹介

ガイスターは、ターン制でコマを動かして勝敗を決める二人用のボードゲームです。最大の特徴は「敵のコマの種類がわからない」ところ。将棋やチェスは、お互いのコマの種類が一目瞭然(完全情報ゲーム)ですが、ガイスターの場合敵コマを捕獲するまで、それが赤か青かがわからない不完全情報ゲームです。

f:id:morika-ma2:20200204181415j:plain

ゲームの進め方を簡単に紹介します。

  • まずは赤コマ4つ+青コマ4つを自陣に並べて(相手に色が見えないように)、ゲームを開始。
  • 1ターンで、自コマを縦横どちらかに1マス分だけ動かせます。
  • 動かした先のマスに敵コマがいたら捕獲します。
  • 勝利条件は次の三つのいずれかです。
     相手の青いコマを4つ全て捕獲する
     自分の赤いコマを4つ全て捕獲させる
     自分の青いコマでボードから脱出する(敵陣奥の左右のマスから)

この三つの勝利条件があることが、ゲームをたいへん面白くかつ複雑にしています。相手のコマのどれが赤でどれが青なのかを見極めることが、まずは勝利への近道となります。いろいろなダマシの戦術が考えられるため、同じ相手となんども連戦していると、過去の戦術を参考に相手の裏をかいたり、裏のまた裏をかいたりといった泥沼の戦いとなっていくのが素晴らしい。素人相手に完勝するのも楽しいですし、玄人同士の騙し合いも面白いという、たいへんよくできたボードゲームとなっております。一家に一台必要です。

参考に、すごろくやさんのガイスター紹介ページはこちらです。
https://sgrk.blog.fc2.com/blog-entry-76.html

 

ガイスタープログラムのリポジトリ紹介

https://github.com/morikatron/GeisterWorkshop

今回紹介するガイスタープログラムは、IGDA日本SIG-AIさん主催のボードゲームAIワークショップ第1回において、参加者のみなさまに触っていただくために作ったものです。上記のGithubリポジトリにてソースコードを公開しております。

リポジトリの中には、同じロジックを2種類のフォーマットで用意しています。ひとつはGeisterWorkshop.pyで、ローカルPCのPython3環境で動かす場合に使ってください。もうひとつはGeisterWorkshop.ipynbで、Google Colaboratory用となっています。どちらを使ってくださってもプログラムの動きは同じです。PCにPythonが入っている人は.pyを動かした方が手っ取り早いと思いますが、Pythonなんか入れていないけどプログラムは動かしてみたい、っていう贅沢でワガママな人はGoogle Colaboratoryを使うと良いです。

ガイスタープログラムをGoogle Colaboratoryで動かしてみよう

Google Colaboratoryはwebブラウザ上でPythonを動かせるサービスで、インターネットに接続さえしていればあっという間にPythonプログラムを動かせます(Googleさんありがとう)。つまり、この記事を読んでいるあなたなら、いますぐ↓をクリックするだけでOKです。

colab.research.google.com

↑のリンクを開くと、ガイスタープログラムの概要、使い方、ボードの表現方法や、プログラムに入力できるコマンドなどの説明が書いてあります。また、プログラムを修正して自分だけの戦略AIを作るときのヒントがあります。さらにずっと下のほうまでスクロールすると、Pythonスクリプトの実行部分があらわれます。コード左上の[ ]部分にマウスオーバーすると三角形のプレイアイコンが現れるので、それをクリック。表示されたダイアログで「このまま実行」を選ぶとスクリプトの実行が始まります。

 

それにしてもブラウザだけでPythonを動かせるGoogle Colaboratoryはすごく便利ですね。次のURLにはColabの基本的な使い方がまとまっていますので、興味のあるかたはぜひどうぞ。

https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

 

ガイスタープログラムの使い方

このガイスターのプログラムは、次の写真のように(物理的に存在する)ガイスターのボードをはさんで相手と向き合い、交互に手を打つという想定で作っています。AI(プログラム)が考えた指し手は人間がボードに反映し、相手の指し手はキーボードから入力することで、ゲームを進行します。

https://morikatron.ai/wp-content/uploads/2019/06/DSCF0794_1000-1000x564.jpg

(モリカトロンAIラボに掲載の写真)

このような想定で作っていますので、プログラムvs自分といった楽しみ方はできないのです。そう、一人ぼっちでは遊べないのです。ごめんね(誰とはなく)。

ガイスタープログラムを使ったワークショップ(2019年5月)

そもそもこのプログラムは「一人遊び」のために作ったわけではなく、ボードゲームAIワークショップのために作りました。ボードゲームAIワークショップはNPO法人国際ゲーム開発者協会日本(IGDA日本)のSIG-AI(https://www.igda.jp/category/igdajapan/sig-ai/)さんが主催の勉強会で、昨年2019年5月22日に開催されました。そのときのレポートを2本、以下に紹介いたします。ゲームAIに興味がおありの方はぜひ読んでみてください。

 

あとがき

ということで、現在弊社が公開しているボードゲーム「ガイスター」のプログラムについて紹介しました。ガイスターの必勝法をプログラムしてみたい方はトライしてください。でもせっかく作っても一人では遊べないので、私のところまで挑戦状を送ってください。受けて立ちます(たぶん)。

IGDA日本SIG-AIの世話人の(ゲームAIの第一人者のあの)三宅陽一郎さんからは、「次のワークショップはバトルラインをやりたいので、またご協力ください」と依頼されておりまして「名誉!でもめんどくさい!でも面白そう!」といった感じです。バトルラインは不確定&不完全情報のカードゲーム。なのでプレイヤー自作のアルゴリズム同士で対戦しようとすると、お互い手持ちのカードは見えない上、山の中のカードの並びも引いてみるまではわからない、みたいな状態で進行しなけりゃなりません。となるとディーラー機能を独立したサーバーとし、各プレイヤーの思考ルーチンをクライアントとしたサーバークライアントシステムを作る必要が。それは面倒だなあと思う反面、通信プロトコルだけ決めちゃえば、サーバープログラムはPythonでちゃちゃっと作っておいて、クライアントはPythonでもC++でもjavaでも良くて好きな言語でコアのロジックをかけそうだから、それはそれでワークショップとしてはとても良さそうだなー、と思ったりしています。

ということで、次回ボードゲームAIワークショップの開催日程がきまったら、このブログで紹介したいと思います。お楽しみにー!