デジタル麻雀の理論

牌の安全度を決めるアルゴリズム

話を単純化するため、リーチをかけている他家一人に対する牌の安全性について考えてみます。通常、私たち人間が打つ場合には見えている牌や河牌などから役を推定したり筋を頼ったりして安全牌・危険牌を考えています。

しかし、コンピュータプログラムの場合には牌の捨て方などから特定の役を推定する、というロジックを高精度に実現することはかなり難しいです。 特定の一色の牌や飜牌の出方が悪くても、混一色でないような牌姿はたくさんあります。 また、河が七対子のような捨て方になっていても七対子ではないような牌姿も十分考えられます。

したがって、河の状態から混一色や七対子を推測する場合でも、あくまでも確率的な割合で捉える方が良いでしょう。 コンピュータプログラムで評価する場合、単純なロジックで一通りの 結論を出すよりも、何度もシミュレートを行った結果を蓄積するやり方が合理的になります。 一例として以下のような方法が考えられます。

  1. 見えている牌から残り牌の分布状況を推定します。
  2. 残り牌から和了形をランダムに作成します。このとき残り牌の分布状況に依存するように作成します。
  3. 和了形からアガリ牌をランダム(または一定の確率分布にしたがって)に決めます。
    このとき、河牌の状態から見てありえない形、フリテンとなるような形は除いて考えます。
  4. アガリ牌でロンアガリされた場合の得点を計算し、記録します。
    このとき裏ドラについては残り牌の分布状況からランダムに決めます。
  5. 2~4をある程度十分な回数繰り返します。

このような形でデータを取ることにより、各牌が当たり牌となる相対的な頻度およびその牌で和了された場合の平均失点値を知ることができますので、手牌の中でその値がもっとも低いものがもっとも安全な捨て牌の候補となります。

なお、2および3の和了形を作成する部分およびアガリ牌を決める部分については河牌の読みを行うことで、ある程度の補正を行うことも考えられます。 なお、上記の方法はとつげき東北氏のHPにある「2:他家必要牌のモデル化理論と実装(MJ-1)」を参考としたものです。

ページトップボタン