じゃんけんプログラム

じゃんけんといえば、2人でやる場合、
「勝ち」「負け」「あいこ」がそれぞれ確率3分の1になる、 というのが相場である。
そこを、相手の出す手の傾向をつかむことで、
ちょっとだけでも勝率を良くしようというプログラムを作ってみました。

プログラムの内容を簡単に説明するとこんな感じ。
  1. あらかじめ、「グー」「チョキ」「パー」の書かれたたくさんのカードを用意する。
  2. じゃんけんをする前、無作為にひとつのカードを選ぶ。
  3. 勝負時、そのカードの手を相手が出してくると予定し、それに勝つ手を出す。
  4. カードを相手の出した手に書き換える。
こんな感じで勝負を繰り返していくうち、手持ちのカードは自動的に、
相手の出してくる手の傾向に書き換わっていき、
自分の手もそれに合わせたものに自動的に変わっていくという手はず。

このチャレンジャーに対抗する今回の対戦相手は、
  • 「グーしか出さない」
  • 「それぞれ1/3で出す」
  • 「(グ,チ,パ)を(1/6,2/6,3/6)で出す」
のお3方。
勝負は1000回勝負。あいこも1回とカウントする。
チャレンジャーのカードは100枚、
初期状態は「グー:33枚、チョキ:33枚、パー:34枚」に設定しました。

では、試合開始。

勝敗数
対「グーしか出さない」9333433
対「それぞれ1/3で出す」323326351
対「(グ,チ,パ)を(1/6,2/6,3/6)で出す」365303332

まあこんなもんだ。
癖のないやつとはほぼ5分5分で。癖のあるやつにはちょっと強い。

カードの内容がどう変わってるかはグラフで。
赤がグー、緑がチョキ、青がパーの枚数です。

対「グーしか出さない」


対「それぞれ1/3で出す」


対「(グ,チ,パ)を(1/6,2/6,3/6)で出す」


なんとなく傾向をつかんでる感じがしませんか?
でも思ったよりぶれが激しいなあ。
カード枚数をもっと増やしてもよかったかも。

人工知能を専門に扱ってる人から見たら、
「ただ履歴をとってるだけじゃないか」と言われそうですが、
ほとんど同じことなんですよね。
履歴の深さを気にしてないってだけなんですよ。

なんか、もうひとひねりしたいですね。