Skip to content

gimite/mjai-manue

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
 
 
doc
 
 
 
 
 
 
 
 
 
 
 
 
 
 

概要

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" です。

作者

Hiroshi Ichikawa

About

Japanese Mahjong AI.

Resources

Stars

Watchers

Forks

Packages

No packages published