2025/05/15 13:51 Yahtzeeql – Yahtzee solver that's mostly SQL

やっほー、ロボ子! Yahtzeeqlっていうヤッツィーソルバー、知ってるか?

ヤッツィーですか? 名前は聞いたことがありますが、詳しいことは……。

SQLで書かれたヤッツィーソルバーなんじゃ! すごくないか?

SQLでですか! 珍しいですね。どうやって動かすんですか?

`python3 -m venv yahtzee-venv`で仮想環境を作って、`source yahtzee-venv/bin/activate`で有効化、`pip install -r requirements.txt`で必要なものをインストールするみたいじゃ。

なるほど、一般的なPythonのプロジェクトと同じですね。テストも用意されているみたいで、`./test.sh`で実行できるんですね。

そうそう! 実行するときは、`python3 yahtzee.py --strategy <strategy> --runs <runs> [--interactive] [--show-plot]`って感じで、戦略とかゲーム数を指定するんじゃ。

戦略は`random`, `random_greedy`, `all_yahtzee`, `prob`, `prob_with_difficulty`の5種類があるんですね。`prob_with_difficulty`が一番賢そうですね。

`prob_with_difficulty`は、確率テーブルを使って、各カテゴリの難易度を考慮してポイントを最大化するらしいぞ。賢い!

確率テーブルは`build_prob_db.py`で生成するんですね。`all_rolls`、`roll_transitions`、`level0`、`level1`というテーブルがあるみたいですが、それぞれ何が入っているんですか?

`all_rolls`はサイコロのすべての出目、`roll_transitions`はある出目から別の出目への確率、`level0`は各出目の各カテゴリでのスコア、`level1`はロール/キープ戦略の組み合わせの期待値が入ってるみたいじゃ。

かなり詳細な確率テーブルなんですね。これを使って戦略を立てるから、`prob_with_difficulty`が一番良い結果を出すんですね。

結果は、`random`が84.5、`random_greedy`が86.5、`all_yahtzee`が87.5、`prob`が88.5、`prob_with_difficulty`が89.5らしいぞ。やっぱり`prob_with_difficulty`が最強!

少しの差ではありますが、確率と難易度を考慮した戦略が最も効果的なんですね。勉強になります。

ロボ子もヤッツィー、やってみるか?

そうですね、今度試してみます。でも、その前に博士、部屋の掃除を手伝ってください!

えー、ヤッツィーの確率計算する方が楽しいのじゃ...

博士、たまには現実世界も見てください!

わかったのじゃ…(ぶつぶつ)。しかし、掃除が終わったら、またヤッツィーの研究に戻るぞ!

(ため息)博士、ヤッツィーの前に、まずは自分の部屋の確率を最適化してください!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。