AIでじゃんけんゲームを作ってみた!〜Pythonと機械学習で勝ちパターンを学習〜
1. はじめに:なぜ「じゃんけん」なのか?
皆さん、「じゃんけん(グー・チョキ・パー)」でAIを作るって聞くと、「それって運ゲーじゃないの?」と思うかもしれません。でも、実は人間がやるじゃんけんには クセ や 傾向 があることが研究でも知られています。
今回のテーマはそんな人間のじゃんけん傾向をAIに学ばせて、勝ちにいくAIじゃんけんプレイヤーを作るというものです。
本記事では、以下のような実践的な要素を交えて、AIじゃんけんの作り方を解説していきます:
- 過去の手を学習して次の手を予測する
- 機械学習モデル(決定木)による分類
- 簡単なUIで対戦可能なCLIアプリ化
2. 技術概要:じゃんけんAIはどう学ぶ?
✨今回使う技術要素
項目 | 内容 |
---|---|
使用言語 | Python 3 |
ライブラリ |
scikit-learn , pandas , joblib
|
モデル | 決定木(DecisionTreeClassifier) |
学習対象 | プレイヤーの手の履歴から次の手を予測 |
「前回と前々回の手が何だったか」を特徴量(Feature)として、次の手(Label)を予測するという形で学習させます。
3. 実装:じゃんけんAIをPythonで作ってみよう!
3.1 必要なライブラリをインストール
pip install pandas scikit-learn joblib
3.2 データ構造と学習ロジック
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from joblib import dump, load
# じゃんけんの手を数値に変換(グー:0, チョキ:1, パー:2)
def convert_hand(hand):
return {"グー": 0, "チョキ": 1, "パー": 2}[hand]
# 学習用データの準備
data = [
{"prev1": 0, "prev2": 1, "next": 2},
{"prev1": 1, "prev2": 2, "next": 0},
{"prev1": 2, "prev2": 0, "next": 1},
# ... 実際はもっと大量の履歴を保存する
]
df = pd.DataFrame(data)
X = df[["prev1", "prev2"]]
y = df["next"]
# 決定木モデルで学習
model = DecisionTreeClassifier()
model.fit(X, y)
# モデルを保存
dump(model, "janken_model.joblib")
3.3 推論してみよう!
# モデル読み込み
model = load("janken_model.joblib")
# 前の2手を与える
prev1 = convert_hand("グー")
prev2 = convert_hand("チョキ")
pred = model.predict([[prev1, prev2]])[0]
# 結果を表示
reverse_map = {0: "グー", 1: "チョキ", 2: "パー"}
print(f"AIの予測: {reverse_map[pred]}")
3.4 対戦アプリのミニCLI版
history = [0, 1] # 仮の初期値:グー, チョキ
while True:
player_input = input("あなたの手(グー・チョキ・パー)> ")
if player_input not in ["グー", "チョキ", "パー"]:
print("無効な入力です")
continue
player_hand = convert_hand(player_input)
ai_hand = model.predict([history[-2:]])[0]
print(f"AIの手: {reverse_map[ai_hand]}")
# 勝敗判定(省略可能)
result = (player_hand - ai_hand) % 3
if result == 0:
print("あいこ!")
elif result == 1:
print("あなたの勝ち!")
else:
print("AIの勝ち!")
history.append(player_hand)
4. 現場Tips:AIじゃんけんでハマったポイント
✅ よくある落とし穴
- データが偏っていると、「グーばかり出すAI」になる
- 人間のクセは人それぞれ:個人別のモデルが有効な場合も
- モデルに過学習が発生しやすい → データ量を増やすかモデルの深さを制限
🛠実務的な活用アイデア
- ユーザーの操作ログを使ったパターン予測
- ゲームAIの学習基礎に
- スマートなおもちゃへの組み込み
5. 発展:もっと強いAIにするには?
- RNNやLSTMを使って「長期的な傾向」を学習(次回記事候補!)
- 強化学習で報酬(勝ち)を最大化するような戦略を学ばせる
- マルチプレイヤー対応で各プレイヤーごとのモデル切り替え
6. まとめ:じゃんけんでもAIは使える!
✅ 本記事の要点まとめ
- じゃんけんは運だけではない、人間には傾向がある
- シンプルな特徴量でも予測モデルは作れる
- 実務にもつながる「予測ロジック」の基礎が学べる
📝おまけ:全コードはGitHubにて公開予定(近日中)
この記事が役に立ったら、いいね&フォローお願いします!
質問や改善提案などもぜひコメントで教えてください🙌