*All archives* |  *Admin*

<<06  2017/07  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  08>>
ドラ待ち両面リーチと放銃時失点その2
前回(ドラ待ち両面リーチと放銃時失点)の続き。
前回は条件をそろえてなくて失敗したので、同等の条件になるようにして牌譜解析やり直しました。

加えた条件は
・ドラが数牌である。
・リーチ時点の手持ちドラ枚数0枚である。
です。

結果がこちら。
170704-04.png
なんかよくわからんけど、条件そろえてもドラ待ちの方が放銃失点が高く出ていますね…。

もっと深く調べることはできなくはないけど、もともと息抜き程度でやったものが深みにはまってもめんどくさいので、この件はこういうことでいいことにしておきましょう。
スポンサーサイト
麻雀AI開発その27・他家打牌に対するアクション関数
今日は麻雀AI開発の続きです。
牌譜の再生をするときに、他家打牌に対して実際にアクションを起こす(ロン・ポン・チー)関数を作りました。

プログラムの大まかな流れ的には、
他家打牌が発生→他家打牌へのアクション関数が呼び出される→AIの内部計算で鳴くかスルーするか、鳴いた場合は何を打つかを計算して返す。
→(3人分に対して行う)
→次の行動(ツモとか鳴きとか上がりとか)に移る
という感じです。

ツモに対する打牌選択の時と同様、現在シャンテン数(面子手・チートイ手・国士手)ごとに場合分けをします。

自手聴牌で、出た牌が上がり牌→手役とフリテンチェック、ロンできないなら下の手順に移る。
出た牌が上がり牌でなく、ポンorチーが可能(現物食い替え・筋食い替えを考慮、以下同様。)
 国士シャンテン数が最小
  国士2シャンテン以下→スルー
  他家リーチ者あり→スルー
  国士3シャンテン→鳴いて2シャンテンなら鳴き考慮
  国士4シャンテン以上→役牌ポンで3シャンテンなら鳴く
 チートイシャンテン数が最小
  チートイ1シャンテン以下面子手2シャンテン以下→鳴いて1シャンテン以下なら鳴き考慮
  チートイ1シャンテン以下面子手3シャンテン以上→スルー
  チートイ2シャンテン
   面子手2シャンテン→鳴いて2シャンテン以下なら鳴き考慮
   面子手3シャンテン以上他家リーチあり→スルー
   面子手3シャンテン→鳴いて2シャンテンなら鳴き考慮
   面子手4シャンテン以上→スルー
  他家リーチ者あり→スルー
  チートイ3シャンテン
   面子手3シャンテン→鳴いて2シャンテンなら鳴き考慮
   面子手4シャンテン→役牌ポンで3シャンテンなら鳴く
   面子手5シャンテン以上→スルー
  チートイ4シャンテン以上→役牌ポンで3シャンテンなら鳴く
 面子手がシャンテン数最小
  面子手1シャンテン以下→鳴いて1シャンテン以下なら鳴き考慮
  面子手2シャンテン→鳴いて2シャンテン以下なら鳴き考慮
  他家リーチ者あり→スルー
  面子手3シャンテン→鳴いて2シャンテンなら鳴き考慮
  面子手4シャンテン以上→役牌ポンで3シャンテンなら鳴く

「鳴き考慮」となっているところは鳴いた場合に(シャンテンを維持できる)各打牌候補ごとに再帰パートを計算し、上位2候補による決選投票方式でシミュレーションパートを行う、
その後、スルーの場合の再帰パートとシミュレーションパートを行う、
→局収支が最大となる行動を返す
という計算をしています。

例のごとく場合分けが多すぎで大変です。
大雑把に言うと、
・2シャンテン以下はシャンテン変わらず仕掛けも含めて鳴きを考慮する。
・3シャンテンはシャンテンが進む仕掛けのみ考慮する。
・4シャンテンは役牌ポンで3シャンテンのときのみ仕掛ける。
です。

まずは特定の牌姿を指定して簡単なテストを。
170704-01.png
白を鳴いたら両面のみ手聴牌で、スルーでも完全一向聴。
赤丸が再帰パートの結果、黄色丸がシミュレーションパートの結果。
その下エクセルのやつが、同条件で既存の局収支シミュレーションをかけてみた結果。

とりあえず正常に動いたっぽくてよかったよかった。
従前のシミュレータともそこまで大きく食い違ってるわけではなさそう。
170704-02.png
打牌候補が複数のケースのテスト。
なんとかできてる。

170704-03.png
鳴き方が複数ある場合のテスト。
ペン3mでチーして打8m(147m69m待ち)がよいと。
うん、まぁよいでしょう。

次は実際の牌譜1試合分をまるごと計算させて、結果がおかしくないかのチェックの作業ですね。
ここまでも新規作成でがりがりコードを書くの大変だったけど、次はまた違う能力(忍耐力と集中力)が試される地味な作業です。
プロフィール

nisi5028

Author:nisi5028
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード