副露に対する押し引き
相手が副落で仕掛けているときの押し引き判断処理部分を作成していますが、こいつがなかなか面倒です。
例えば、他家が鳴いて仕掛けているときに、自分がある牌を捨てた時の危険度を期待値として計算するならば、式としては「その牌がロンになる確率×その牌を捨ててロンになったときの平均点数」となりますが、「その牌を捨ててロンになったときの平均点数」を算出するだけでもかなり大変です。
天鳳や東風荘などで、牌譜を集めて、そこから平均点数を集計すればいいじゃないかと思えるのですが、そんなに単純な方法では余り精度がよくならないようです。
天鳳の鳳凰卓や東風荘のデータを提供してくれるような上級者は、振ったとしても和了点数が低くなるように考慮して打牌することが多く、牌譜から副落して和了したときの点数を単純に集計して計算すると、危険度を本来の値よりもかなり低い値に算出してしまいます。
なので、和了できなかったケースや低目を和了したケースなど、結果に現れていない和了点まで考慮にいれて集計をしないといけないのですが、100万以上ある牌譜で、実際に結果に現れていないケースまで含めてすべての場合の点数計算をするのはむちゃくちゃ処理時間がかかります。
また、2副落のとき、客風ポン->役牌ポンと鳴いたときと役牌ポン->客牌ポンと鳴いたときとでは平均和了点数がかなり違いますので、分けて考える必要があります。ドラの種類、残りドラの枚数、場に見えてない役牌や、成立しうる可能性のある役などによる条件分けも考慮に入れた方がよいでしょう。
そして、それらの複数の要因が多すぎると100万のデータがあっても全然足りません。ならばと評価関数を作るにしても、麻雀の場合、各要因に重み付けした線形的な関数ではよい評価関数にならないのが難しいところです。
どこかで妥協せざるを得ないと思うのですが悩みどころです。
| 固定リンク
この記事へのコメントは終了しました。
コメント