萌えハッカーニュースリーダー

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

出典: https://github.com/charliemeyer/yahtzeeql
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

(ため息)博士、ヤッツィーの前に、まずは自分の部屋の確率を最適化してください!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search