麻雀の打牌選択アルゴリズム(3) - koba::blog、麻雀の副露判断アルゴリズム(4) - koba::blog までである程度の手作りはできるようになったが、和了打点を意識した手作りができていない。例えば
ドラ
でテンパイした場合、
- 打 : 待ち(両面8枚)の平和 (30符1翻)
- 打 : 待ち(嵌張4枚)の三色、ドラ1 (40符3翻)
となり、打 が有利だが、現在のアルゴリズムは待ちの多さで評価するため を打ってしまう。
この問題を解決するために、テンパイ時に和了打点と待ち枚数から打牌を決定するようにする。和了打点は簡単のために
で計算することとすると、上記の例は
- 打
→ 合計 24,100 点
→ 合計 32,000 点
となり、打 が選択できる。
これを「牌姿の評価値」*1として以下に一般化する。
2. 牌姿が打牌後の場合 (手牌が13枚、テンパイもこの形)
向聴数の進む牌をツモった場合の評価値 x その牌の枚数 の総和をその牌姿の評価値とする。
の聴牌形の場合、待ちは 4枚、ツモった場合の打点は8000点なので、評価値は 8000 x 4 = 32,000 となる。
3. 牌姿が打牌可能な状態(ツモの後、副露の後)の場合 (手牌が14枚)
向聴数が戻らない打牌を行った後の牌姿の評価値のうち最大のものを、その牌姿の評価値とする。
の場合、打 は 24,100点、打 は 32,000点なので、最大値の32,000点がこの牌姿の評価値となる。
これを再帰的に繰り返せば任意の牌姿の評価値を計算できる。*2
例えば以下の牌姿*3の場合
ドラ
と が打牌の候補となるが、その場合の聴牌形は以下のいずれかになる。
No | 聴牌形 | 待ち | 枚数 | 打点 | 評価値 |
---|---|---|---|---|---|
1 | 3 | 4000 | 28,000 | ||
4 | 4000 | ||||
2 | 3 | 4000 | 28,000 | ||
4 | 4000 | ||||
3 | 3 | 4000 | 28,000 | ||
4 | 4000 | ||||
4 | 3 | 5200 | 36,400 | ||
4 | 5200 | ||||
5 | 3 | 8000 | 55,600 | ||
4 | 7900 |
No.4 は幺九牌が暗刻になっているためテンパネし、No.3 と比べ打点が高い。No.5 で をツモしたパターンも嵌張待ちにとれるためテンパネする。
打 、 からそれぞれの上記テンパイに至る枚数は、
打牌 | 各聴牌形への待ち牌 | 評価値 | ||||
---|---|---|---|---|---|---|
No.1 | No.2 | No.3 | No.4 | No.5 | ||
7枚 | 7枚 | 2枚 | 2枚 | 559,200 | ||
7枚 | 7枚 | 2枚 | 2枚 | 576,000 |
となるため、No.4 のテンパイがとれる打 が最高の評価値となる。