じゃんけんの必勝法を検索すると、たいてい同じ答えが出てきます。「完全にランダムに出せば、誰にも読まれない」。
これは数学的に正しい。ただし、この答えには続きがあります。
人間には、ランダムに出すことができません。
この記事では、相手の癖を機械学習で読むAIを相手に、いろいろな「打ち方」で27万ラウンド戦わせた実測データを出します。癖のない打ち方なら勝率はきっちり50%。ですが、人間がやりがちな打ち方をすると、勝率がどこまで落ちるかが数字ではっきり出ました。
✊ 癖を学習するAIと対戦してみる(登録不要・ブラウザで完結)まず前提の確認です。癖のない打ち方をすれば、相手がどんなに賢くても勝率は50%になります。
3種類の強さのAIに対して、「残っている手札に比例して、それ以外は完全に運任せで出す」という癖のない打ち方をぶつけた結果です。
| 相手のAI | 癖のない打ち方の勝率 |
|---|---|
| 手の頻度を数えるだけのAI | 50.8% |
| 試合中に癖を学習するAI | 49.9% |
| 全対戦を記憶して学習し続けるAI | 50.4% |
どれも50%です。読むべき癖がなければ、機械学習をどれだけ積んでも意味がありません。ここが出発点になります。
逆に言えば、じゃんけんで負け越しているなら、それは運ではなく、読まれる何かを出しているということです。
ここからが本題です。同じAIに対して、人間がやりがちな打ち方を4種類ぶつけました。それぞれ18,000ラウンドずつ、あいこを除いた勝率です。
| 打ち方 | 頻度を数えるAI | 学習AI | 記憶するAI |
|---|---|---|---|
| 癖なし(基準) | 50.8% | 49.9% | 50.4% |
| 負けたら、相手がさっき出した手に勝つ手を出す | 47.3% | 50.1% | 43.0% |
| 勝ったら、同じ手をもう一度出す | 37.9% | 41.2% | 39.1% |
| 好きな手がある(6割そればかり) | 36.5% | 33.0% | 31.3% |
| グー→チョキ→パーと順番に出す | 86.8% | 34.0% | 0.0% |
数字を見ていきます。
「勝ったら同じ手をもう一度」だけで、勝率は37.9%まで落ちます。これはたった1つの癖です。他は全部運任せで打っていて、勝った直後の1手だけが読める。それだけで、五分だったものが3勝5敗のペースになります。
「好きな手がある」は、さらに悪い。6割の頻度でパーを出すだけで31.3%です。頻度の偏りは、いちばん見つけやすい癖だからです。相手は数を数えるだけでいい。
表の最後の行を見てください。グー→チョキ→パーと順番に出す打ち方は、記憶するAI相手に勝率0.0%でした。
これは丸め誤差ではありません。1,500試合(18,000ラウンド)の合計で、5勝17,135敗です。あいこ以外はほぼ全部負けています。
順番に出すのは、一見すると「偏りがない」打ち方です。グーもチョキもパーも同じ回数出るので、頻度を数えるだけの相手には通用します——実際、頻度を数えるだけのAIには86.8%で勝ちました。
ですが、「次に何が来るか」は完全に決まっています。手の順番まで見る相手には、これほど組みやすい相手はいません。
ここで補足しておきます。この0.0%は、AIが1,500試合ぶん学習し切った後の数字です。 では、実際に人が遊ぶくらいの試合数だとどうなるのか。累計の勝率を追いかけました。
| 累計の試合数 | その時点までの勝率 |
|---|---|
| 1試合目 | 50.0% |
| 5試合目 | 9.6% |
| 10試合目 | 4.5% |
| 25試合目 | 1.7% |
| 100試合目 | 0.4% |
| 1,500試合目 | 0.0% |
5試合で9.6%です。最初の1試合こそ五分ですが、そこからは坂を転げ落ちます。 「1,500試合も打たないから関係ない」という話ではなく、数試合で読み切られているということです。
ここに重要な事実があります。
同じ打ち方が、相手によって86.8%にも 0.0%にもなる。
「必勝法」を探すときに見落とされがちなのがここです。じゃんけんに、相手を問わず通用する打ち方はありません。あるのは「この相手には効く/効かない」だけです。唯一の例外が、どの相手にも50%を保証する「完全にランダム」なのです。
「じゃあランダムに出せばいい」——そう思いますが、これが本当に難しい。
人間がランダムのつもりで出すとき、無意識に次のようなことをしています。
上の表の2行目(負けたら相手の前の手に勝つ手を出す)と3行目(勝ったら同じ手)は、この2番目の性質をそのまま打ち方にしたものです。それだけで43.0%と37.9%まで落ちました。
実測から言えることは3つです。
1. 自分の癖を消すより、相手の癖を探すほうが早い。
自分の無意識を制御するのは非常に難しい。一方、相手の癖は外から観察できます。特に「勝った直後」「負けた直後」に何を出すかは、多くの人にはっきりした傾向があります。数回観察するだけで見えてきます。
2. どうしても自分でランダムにしたいなら、外部の乱数を使う。
頭の中で乱数を作るのは諦めて、その場にあるものを使います。時計の秒針の下1桁を3で割った余り、直前に見た数字、手のひらの中で決めておいた対応。自分の判断を介在させないことが大事です。
3. 「規則的に見えないパターン」を事前に決めても意味がない。
グーチョキパーの順番が0.0%だったのは極端な例ですが、「グーグーパー」のような自作のパターンも、繰り返せば同じことです。長さが違うだけで、いずれ読まれます。
癖は自分では見えない、と書きました。だったら見えるようにすればいい、と思って作ったのがこれです。
対戦相手のAIは、あなたの直近の手・勝ち負けへの反応・残っている手札をニューラルネットに入れて、試合中にその場で学習します。そして毎ラウンド終わりに、「何を根拠にあなたの手を読んだか」をあなた自身の統計で開示します。
「あなたは負けた直後、7割の確率でこの手を出しています」——こういう形で、自分の癖が目の前に出てきます。
後出しをしていない証明も付けました。AIの手は、あなたが選ぶ前にハッシュ値として画面に固定されます。対戦後に元の文字列が開示されるので、疑うなら自分でハッシュを計算して照合できます。
✊ 自分の癖を見てみる(3分・登録不要)※数値は、公開しているゲームと同じAIのコードを使い、5種類の打ち方 × 3種類のAI で 各18,000ラウンド(合計27万ラウンド)試行した実測値です。乱数の種を固定して再現可能な形で計算しています。 勝率はあいこを除いた勝敗のみで計算しました。なお、このゲームは手札12枚を使い切る「限定じゃんけん」形式で、 残り札という追加情報がある点が普通のじゃんけんと異なります。ただし 「癖があると読まれる/なければ読まれない」という結論は、その違いに依存しません。