奥能登の伝承娯楽『ごいた』のコンピュータ対戦プログラム書いてみた

デザスプにて、『ごいた』という石川県能登町宇出津に由来した伝承娯楽を教えてもらいました。シンプルなルールながら中毒性があり、Japanese orientedなローカルさが快いとともに、コレならプログラム書けばコンピュータ対戦でできるんじゃね?と思ってしました。伝統的な遊戯を電子化してしまうことは良し悪しあるとは思いますが、さっそく書いてみたので(保存会の許可は得ずに..)ソースを公開します。

ごいたのルール

このあたりのウェブサイトを参照してください。

ダウンロードと更新履歴

人間との対局ももちろんできますが、設計思想としてAPI化を意識したコーディングをしています。目標はAPIを共通化した上で、s-Ake apps projectさんのAndroidアプリのような他のコンピュータプログラムにに勝ち、将来的には人間の番付上位者にも勝利することです。

つかい方

現状はコマンドラインで実行するようになっています。Rubyで書いていますので、Macユーザさんはファイルをダウンロードして解凍してから、ターミナルを起動して、cdして、

$ ruby goita.rb

で対戦ゲームが実行できるはずです。MacでなくてもRubyの実行環境があればOK。なお、持ち駒に出せる駒がない場合には自動的に"なし"となりますので、始まった途端にゲームが終了していることもしばしばです。


ルールとの違い

  • 「駒を配るときに裏返して盤上に丸く輪を書くように並べて、親が上を向いて..」というのはできないため、駒は最初からランダムで配っています。
  • 親は必ずあなたから始まります。ランダムです。
  • 合計150点を取得したチームが勝利なのですが、現在は1回勝負です。
  • 自分の番に出す駒がない場合は、時間短縮のため自動的になしになります。

「全自動ごいた」プログラム同士の戦い

勝率の改善のための工夫として、コードを修正したら1万回程度プログラム同士で対戦させ、勝率が良くなったときのみコミットしています。これを利用して「どの順が最も勝率が良いか?」を調べるために、コンピュータ同士で対戦させてみました。

条件
  • 5歩,6歩,7歩,8歩が発生した場合はノーカウント
結果(2015-01-17のコードを利用)
  第1順(親) 第2順 第3順 第4順
勝った回数 345,516回 217,840回 215,885回 220,759回
勝率 34.5% 21.8% 21.6% 22.1%
平均得点 33.4点 34.4点 34.8点 34.4点


結果(2015-01-25のコードを利用)
  第1順(親) 第2順 第3順 第4順
勝った回数 46,185回 17,972回 16,089回 19,754回
勝率 46.19% 17.97% 16.09% 19.75%
平均得点 27.70点 30.27点 29.96点 29.96点


結果(2015-02-07のコードを利用)
  第1順(親) 第2順 第3順 第4順
勝った回数 37,120回 19,787回 21,192回 21,901回
勝率 37.12% 19.79% 21.19% 21.90%
平均得点 30.11点 29.13点 30.41点 30.35点
わかったこ
  • 親の勝率がよい。1/3以上は親が勝つ。初手で任意の駒を出せるのは有利。
  • 第2順〜第4順の勝率はほとんど同じだが、第4順の方がやや高い。
  • 平均得点はほとんど差がないが、親が若干低い傾向がある。ただし親は勝率が高いため、実戦ではこの数値の差は考慮不要の認識。
  • 実戦は150点勝負。平均約30点なので、先に5回勝つつもりで挑むこと。

個人的な感覚

  • ちなみに作成者の私は対人戦はたったの1日だけしかしたことないです。
  • これそのうちCTFのネタになりそうな気がする。
  • Ver.1.4の時点で、条件分岐によるプログラミングは限界に達した認識。これ以上の改善を図るには、データ収集と学習をする必要がある。