0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに聞いた「ソリティアの勝率」と手動検討

0
Posted at

要約

「ソリティアで勝つ確率は?」という曖昧な問いから始め、ChatGPTを使ってクロンダイクのシミュレーターを作成しました。
過去に自分がプレイした記録と比較検討しつつ、実際にどのくらい勝てるのかを検証しました。

最終的に、勝てる配札の割合を十分な精度で推定するところまでは到達できませんでした。それでも、課題の難しさは短時間で見えてきました。この記事では、その過程を通じて、AIに任せる作業と、人間が妥当性を判断する仕事について考えます。

ソリティアで勝つ確率は?

こんなプロンプトを、おもむろにChatGPTに投げてみました。

ソリティアで勝つ確率は?

返ってきたのは、次のような回答です。

ChatGPTの回答

一般的な「ソリティア」=クロンダイクのことなら、ルールによってかなり変わります。

2026年に発表された大規模なコンピュータ解析では、伏せ札の中身まで分かっている「完全情報」で最善手を選べる条件だと、標準的な**3枚めくりは約81.95%**の配札が勝てると推定されています。(University of St Andrews Research Portal)

一方で、

  • 1枚めくり・何度でも山札を回せる:約 90.5% が理論上勝てる
  • 3枚めくり・何度でも回せる:約 81.9%
  • 実際の人間プレイ:伏せ札が見えず、判断ミスもあるのでかなり下がる

という感じです。実際のオンライン対戦データでは、1枚めくりでも勝率30〜40%前後という例があります。(TrySolitaire)

なので、「どうやっても勝てない配札」が普通に存在します。1枚めくりでもざっくり10回に1回、3枚めくりなら5回に1回弱は、完璧にプレイしても勝てない計算です。

もしWindowsのソリティアについて聞いてるなら、**「1枚めくり・3枚めくり・Microsoft Solitaire Collectionのどれか」**で、実際の勝率の目安も出せます。

さて、この出力に、皆さんはどのような印象を持つでしょうか。

私としては、最初はこれだけではあまり価値を感じませんでした。「AIに投げて、返ってきた結果をそのまま持ってきた」だけの、見飽きた体裁だったからです。

この回答を学校の課題や業務の成果物につなげるなら、ここから自分の調べたい条件を決め、引用元が何を示しているのかを確認する作業が残ります。このまま後の作業を放棄してしまってはいけません。

そもそも曖昧な問いを投げたのは私です。まずは課題を整理する必要があります。

課題の曖昧さを整理する

「ソリティアで勝つ確率は?」という課題は、そもそも範囲が広すぎます。少なくとも、報告書としてまとめるには、もう少し対象を絞りたいところです。

ソリティアは、カードを使う一人遊びの総称です。ChatGPTの回答に「クロンダイクのことなら」とあったように、クロンダイクはその一つにすぎません。

さらに、クロンダイクに絞っても、1枚めくりと3枚めくりなど、ルールの違いがあります。「勝つ確率」についても、実際に人間がプレイしたときの勝率を知りたいのか、最善の手を選べば勝てる配札の割合を知りたいのかで、調べる内容が変わります。

元の課題に対しては、たとえば次のような方針が考えられます。

  • ソリティアのさまざまな遊び方について、勝率を調べる
  • クロンダイクに絞り、条件を決めて勝つ確率を評価する

こうした方針を決めないまま進めると、作業量が膨大になります。作業する人も、それを評価する人も不幸になりそうです。

自分の得意分野に寄せて、課題の方針を決める

では、どちらを選ぶべきでしょうか。

依頼された仕事であれば、まず依頼者にヒアリングするべきです。一方、自分で方針を選べるなら、得意分野に寄せたほうが成果物の価値を高めやすそうです。

私は数学とプログラミングがなんとなくわかるので後者を選びます。

前者なら、いろいろな遊び方を浅く広く調べることになりそうです。あるいは、一つ良い評価方法が見つかれば、それをほかの遊び方にも適用していく作業になるでしょう。

後者なら、対象を絞って、数学やコンピューターサイエンスの話に持っていけそうです。

クロンダイクをエンジニア目線で掘り下げる

以降は、ソリティアの中でもクロンダイクを扱います。

クロンダイクは、52枚のトランプを使う遊びです。勝ち筋があるかどうかは、シャッフル後のカードの並びに依存します。つまり、有限な並べ替えの世界です。

小規模な並べ替えや確率の問題なら、中学校でも習います。頑張れば数学的に答えが出そうな気もします。

ただし、52枚の並べ方は膨大です。しかも、それぞれの配札について、勝ち筋が存在するかどうかを判定しなければなりません。簡単な数え上げでは済みそうにありません。

調べてみると、条件を絞って計算しやすくしたり、コンピューターで探索したりと、いろいろな取り組みがあります。最初の回答が引用していた研究も、コンピューター解析による推定でした。論文の概要

私は数学が特別得意というわけではないので、コンピューターシミュレーションのほうが性に合っていそうです。プログラムを作ってみましょう。

自分で確かめられる範囲では、存分にAIに頼る

まずは、自分で遊べるものを作る

勝率をシミュレーションするといっても、クロンダイクのルールを実装できていなければ話は進みません。手作りするには、そこそこ手間がかかりそうです。

そこでAIを頼ります。

  • クロンダイクの実装例は、インターネット上にたくさんありそう
  • GUIがあれば、まず自分でプレイして挙動を確かめられそう

そんな期待で、Codex(GPT-6 Astra)に次のように依頼しました。

クロンダイクをjsで実装してブラウザで遊べるようにして3枚めくりで(1枚めくりとスイッチできた方が良い)、カードの絵はフリー素材でも文字でも大丈夫

できあがったものを実際にプレイしたところ、特におかしな挙動は見つかりませんでした。もちろん、これだけで実装の正しさを証明できるわけではありません。それでも、自分が知っているゲームなので、目の前の挙動をルールに照らして確認できます。おかしなところがあれば、そこを直せます。

AIは間違えることがあるので、それまでの工程が妥当かどうかを、人間が判断する必要があります。

こういうのが1発で出てきたすごい。
image.png

次に、Auto Playと集計を追加する

手動プレイで確認した範囲ではルールの実装に問題は見つからなかったので、続けて次のように指示しました。

Auto Play実装して、undoは使えるか設定で決められるように、
めくり枚数、undo有り無しで集計して成功確率が出るように。
クリアするか詰んだら自動的に次のゲームへ、
アニメーションスピードは目に見えるレベルから、確率的なシミュレータとして機能するようにアニメーションせず確率の数字だけ動いていくようなものまで

アニメーションは、人間が動きを見てデバッグするためです。数字だけを更新するモードは、大量に試行して勝率の目安を得るために使います。

この指示から、探索した局面数に上限を設け、上限に達したら打ち切るという条件付きの実装ができました。

今回のAuto Playは、合法手に決められた優先順位を付けて進めるプログラムです。たとえば、場札の伏せ札を開ける手などを優先します。Undoありの場合は、行き詰まると以前の局面に戻り、別の手を試す「深さ優先探索」を行います。

探索上限は、1ゲームで訪問する重複しない局面の数です。初期状態を1局面と数え、山札をめくる操作なども含め、新しい局面に進むたびに増えます。Undoで戻るだけでは増減しません。

集計もなんかおしゃれ
image.png

自分の3,000回のプレイ結果と比べる

まず、次の条件で1,000ゲームを試しました。

  • 3枚めくり
  • Undoあり
  • 山札の再利用回数:無制限
  • 組札から場札への移動:許可
  • 探索上限:1ゲームあたり1,000局面

今回の実装では、組札から場札への移動を通常の移動として扱っています。ここでいうUndoは、操作前の局面を復元してやり直す機能を指します。

結果は、勝率26.4% でした。

ここで、過去に自分が、同じく3枚めくり・Undoありで3,000回プレイした成績と比べてみます。手動プレイでは3,000回中781回クリアし、勝率は26.03% でした。
https://playingcards.jp/solitaire/klondike/

過去の手動プレイ成績。プレイ回数3,000回、成功回数781回、成功率26.03%

プレイ方法 試行回数 クリア回数 勝率
手動プレイ 3,000回 781回 26.03%
Auto Play(探索上限1,000局面) 1,000回 264回 26.4%

体感はかなり近いです。とはいえ数値が近いだけで、違うプログラムを使って遊んだ結果です。あくまで参考程度の数字でしょう。

私の手動プレイも、「なんとなく手詰まりになった」と感じたら諦めていました。試せる手段を厳密に尽くしたわけではありません。

ここで、自分の経験と照らし合わせることは、大きな違和感を見つける手掛かりになると考えています。信じられないような結果が出ていたら、プログラムの不具合や集計条件を疑い、それまでの工程を振り返れます。

ただし、自分の経験と一致した結果ほど安心してしまいやすいものです。期待どおりの数字が出た場合にも、その数字とは独立した方法で確かめる必要があります。 今回は手抜きをしました。

ここまで来て、ようやく「では、十分に探索したらどのくらい勝てるのか」という問題に、少し近づきました。

問題の本質へ

次に、3枚めくり・Undoありの条件はそのままに、探索上限を50,000局面まで引き上げました。

すると、277ゲーム中126ゲームをクリアし、実測勝率は45.49% になりました。先ほどの結果を大きく上回りましたが、それでも多くのゲームは探索上限に達して打ち切られていました。探索量を増やせば、さらに勝てるゲームが見つかりそうです。

ここで、最初のChatGPTの回答にあった「約81.95%の配札が勝てる」という推定値の見え方が変わりました。自分の経験では26%程度でも、もっと探索すれば勝てる配札が相当数ありそうだ、と実感できたからです。

ただし、今回の結果で81.95%という値を検証できたわけではありません。引用先の研究が報告しているのは、すべてのカードの数字とスートが分かる「完全情報」の条件での、勝てる配札の割合です。3枚めくりの報告値は81.945% ± 0.084%で、95%信頼区間を伴う推定値です。研究概要

私は、もっと早い段階で数値が収束すると考えて進めていましたが、そう簡単ではなかったようです。今も研究が続いているテーマは手ごわいですね。

最初にChatGPTが引用した論文を丁寧に読み、探索方法を理解したうえで追試するほうがよいかもしれません。

まだまだ終わりは見えそうにありません。

まとめ

元の問いは「ソリティアで勝つ確率は?」でした。今回は、条件を決めたAuto Playの実測勝率までは出せましたが、十分に探索したときに勝てる配札の割合を、手元で推定するところまでは到達できませんでした。

本当は、もう少し結論に近い成果が欲しかったところです。これは課題の設定ミスというか、難易度の見誤りでした。それでも、課題の難しさが比較的短時間で見えてきたことは、大きな収穫です。

今回、AIに実装を任せることで、試せるものを用意するまでの作業時間を大きく短縮できました。ルールを実装してもらい、自分で遊んで確かめ、Auto Playの動きを見て、過去の成績と比べる。そうやって自分が確認できる形に作業を分けたことで、検討を前に進められました。

一方で、何を調べるのかを決めること、結果が妥当かを判断すること、うまくいかなかった理由を考えることは、今回も人間の仕事として残りました。

この記事のような検討が、プロンプト一発で出てくるとうれしいのですが、まだまだ人間の出番はありそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?