Yahtzeeql:一个主要用 SQL 实现的 Yahtzee 求解器
该项目是一个用 SQL 实现的 Yahtzee 求解器,提供了多种策略,包括随机、贪婪、追求 Yahtzee、概率计算等。用户可以通过命令行运行,指定策略、模拟次数等参数,并可选择交互模式和显示得分分布图表。项目使用 `build_prob_db.py` 生成包含掷骰结果、转换概率、得分等信息的 SQLite 数据库。最终结果显示了不同策略的平均得分,其中 `prob_with_difficulty` 策略表现最佳。
charliemeyer/yahtzeeql
Yahtzee 求解器,主要使用 SQL 实现。
安装
python3 -m venv yahtzee-venv
source yahtzee-venv/bin/activate
pip install -r requirements.txt
./test.sh
你应该能看到每种策略的输出,按优劣程度升序排列。
用法
python3 yahtzee.py --strategy <strategy> --runs <runs> [--interactive] [--show-plot]
其中 strategy
可以是以下之一:
random
- 简单地保留给你的骰子,然后随机选择一个类别。random_greedy
- 简单地保留给你的骰子,然后选择得分最高的类别。all_yahtzee
- 每回合都竭尽全力获得一个 Yahtzee。prob
- 使用概率表来最大化你获得的分数比例。prob_with_difficulty
- 使用概率表来最大化你获得的分数比例,同时考虑每个类别的难度。
--runs
是要模拟的游戏次数。
--interactive
会显示骰子,并要求你为每一回合选择一个类别。
--show-plot
会显示得分分布的图表。
概率表
build_prob_db.py
生成一个包含几个表的 sqlite 数据库:
all_rolls
- 所有 5 个骰子的掷法,骰子按升序排列。roll_transitions
- 从一种掷法转换到另一种掷法的概率,同时保留第一种掷法的某些子集。level0
- 对于每种掷法,它在每个类别中的得分,表示为该类别中最大可能得分的比例,以及原始得分。level1
- 对于每种掷法,基于level1
表中每个可能的下一个掷法的期望值的总和,每种掷法/保留/策略组合的期望值。
结果
random
- 84.5random_greedy
- 86.5all_yahtzee
- 87.5prob
- 88.5prob_with_difficulty
- 89.5
关于
Yahtzee 求解器,主要使用 SQL 实现。