概要
Mjai 麻雀AI対戦サーバ 用の麻雀AIです。
仕組み
まず、それぞれの打牌をした場合について、以下の数値を算出します。これらのスコアは、上の牌譜のデバッグ出力で確認できます。
- horaProb / Hora probability / 和了率
- その打牌をした場合に、この局で自分が和了できる確率。
- モンテカルロで求める。終局までにNツモあるとすると、ランダムにN枚引いて、手牌13枚+N枚で和了を作れるかどうかをチェック。これを1000回繰り返す。
- 実際には高速化のために「今の手牌から和了するための必要牌」をあらかじめ求めておき、ランダムに引いたN枚に必要牌が含まれるかをチェックしている。
- avgHoraPt / Average hora points / 平均和了点
- 自分が和了した場合の平均和了点。
- horaProbと同時にモンテカルロで求める。手牌13枚+N枚で作れた和了の点数の平均。
- unsafeProb / Unsafe probability / 放銃率
- その打牌で誰かに放銃する確率。
- 今のところ、リーチしている人への放銃だけを考慮。
- 決定木学習を使って推定。特徴量は「字牌」「スジ」など。学習データは天鳳の牌譜。統計による麻雀危険牌分析参照。
- avgHojuPt / Average hoju points / 平均放銃点
- 放銃した場合に払う額の平均。
- 今のところは自己対戦のログから求めた固定値6265点。牌譜のデバッグ出力にはない。
以上の数値から、この局で自分が得る点数の期待値(expPt)を求めることができます。
- expPt = (1 - unsafeProb) * horaProb * avgHoraPt - unsafeProb * avgHojuPt
このexpPtが最大となる打牌を採用します。
「鳴くか、鳴かないか」「リーチか、ダマか」も同様の方法で判断します。
ライセンス
"New BSD Licence" です。