2016-11-09(Wed)
細かいバグ取りをしつつテスト90問やって、大きな問題はなさそうなので、ひとまず一人麻雀計算機つくりはミッションコンプリートということにします。
最新版をアップロードしておきました。適宜ご利用ください。
http://fast-uploader.com/file/7034237748995/
次は四人麻雀への拡張を考えます。
まずは簡単なところからで、場に出てる枚数のカウントからです。
場に切られてる牌と自分の手牌と他家仕掛け牌とドラ表示牌で見えてる枚数と自分の手牌にある枚数別のツモ率はすでにパラメータとして取ってあります。
見えてる枚数別手持ち枚数別ツモ率
こちらのリンクです。
このパラメータを使ってツモ率の数字を置き換えます。
今回は簡単のため、
・ドラのツモ率は通常と同じとする。(これは要検証。)
・現在の巡目以降、他家は牌を捨てることはない。
・特に山読み的なことはしていない。
2個目の仮定はあまり好ましくはないのですが、現状、他家がどの牌を切るかのパラメータがない(今晩調べる予定。)ことと、
他家の現在の巡目以降の捨て牌情報を反映させようとすると、記憶すべき情報が爆発的に増えてしまって(というか捨て牌まで同一の状況はおそらく二度とこない)、処理速度的にもたないのであきらめました。
まぁ、現在の巡目以降は平均的に切られていって、そんなに大きくどちらかに偏って数値が大きく動くとかはないとは思うので、そこまで大きな問題にはならないとは思います。
捨て牌情報なしの従前のままのがこちら。

それでてきとうに6巡目までの全員の捨て牌を設定して(端牌字牌が多い想定。)、見えてる枚数別手持ち枚数別ツモ率を適用したのがこちら。

全体的に局収支と和了率が下がってますね。
関連牌で言うと2m8p9p8sが1枚ずつ切れている状況です。24枚の捨て牌のうち4枚が関連牌というのは通常よりも多くて、それでツモ率が従前のものより低くなってるとかそんな感じでしょうか。
7巡目時点のツモ率を比較したものがこちらです。

左が捨て牌情報なしの従前のもの、真ん中が捨て牌情報ありの場合、右が両者の差(左-右)を取ったものです。
プラスならこの捨て牌状況において通常よりツモりにくい、マイナスならツモりやすいということを表しています。
1枚場に出てる2m8p8sあたりはツモりにくくなってて、1枚しか出ていない端牌(1mとか9mとか)と中はツモりやすいという風に出ています。おそらく通常なら今回の設定よりもっと端牌字牌の割合が多いんでしょうね。
関連牌はプラス(ツモりにくい)ところが多くて、その分局収支や和了率に響いているのでしょう。たぶん。
今後の方針について。
四人の挙動を再帰式で計算するのはおそらく無理(単純に再帰式を使う回数だけで4倍に増えるし、記憶すべき情報が膨れ上がってしまうので、再帰式1回あたりの計算量も今より多くなってしまう。)ので、次のようなことを考えています。
第一段階。(手替わり1回とか0回を上限として)今後取り得るすべての(14枚)手牌と巡目ごとに一人麻雀計算で最適打を決定させておく。
第二段階。前の局収支シミュレーションと同様、100000回シミュレーションを行う。自分の挙動は第一段階で求めた最適打テーブルから検索して淡々と摸打して、面前聴牌したらリーチする。他家の挙動はだいたい局収支シミュレーションと同様の予定。
問題点。
・第一段階の最適打決定のところは現在巡目以降の捨て牌を記憶できないので、第二段階で他家から切られて薄くなった受け入れがあるから最適打を変えるみたいなのはできそうにない。
・他家のリーチが入ってもお構いなしに自分の手が最もよくなる「最適打」しか打てない。放銃の危険性が高いから打牌を変えるみたいなのは実装できるかどうかわからない。
・別途、他家がどの牌を切るか(自手リーチのときの打牌分布も含む)などのパラメータを大量に取る必要がある。
道のりは長いですなぁ。
ま、気長にやっていきますか。
最新版をアップロードしておきました。適宜ご利用ください。
http://fast-uploader.com/file/7034237748995/
次は四人麻雀への拡張を考えます。
まずは簡単なところからで、場に出てる枚数のカウントからです。
場に切られてる牌と自分の手牌と他家仕掛け牌とドラ表示牌で見えてる枚数と自分の手牌にある枚数別のツモ率はすでにパラメータとして取ってあります。
見えてる枚数別手持ち枚数別ツモ率
こちらのリンクです。
このパラメータを使ってツモ率の数字を置き換えます。
今回は簡単のため、
・ドラのツモ率は通常と同じとする。(これは要検証。)
・現在の巡目以降、他家は牌を捨てることはない。
・特に山読み的なことはしていない。
2個目の仮定はあまり好ましくはないのですが、現状、他家がどの牌を切るかのパラメータがない(今晩調べる予定。)ことと、
他家の現在の巡目以降の捨て牌情報を反映させようとすると、記憶すべき情報が爆発的に増えてしまって(というか捨て牌まで同一の状況はおそらく二度とこない)、処理速度的にもたないのであきらめました。
まぁ、現在の巡目以降は平均的に切られていって、そんなに大きくどちらかに偏って数値が大きく動くとかはないとは思うので、そこまで大きな問題にはならないとは思います。
捨て牌情報なしの従前のままのがこちら。

それでてきとうに6巡目までの全員の捨て牌を設定して(端牌字牌が多い想定。)、見えてる枚数別手持ち枚数別ツモ率を適用したのがこちら。

全体的に局収支と和了率が下がってますね。
関連牌で言うと2m8p9p8sが1枚ずつ切れている状況です。24枚の捨て牌のうち4枚が関連牌というのは通常よりも多くて、それでツモ率が従前のものより低くなってるとかそんな感じでしょうか。
7巡目時点のツモ率を比較したものがこちらです。

左が捨て牌情報なしの従前のもの、真ん中が捨て牌情報ありの場合、右が両者の差(左-右)を取ったものです。
プラスならこの捨て牌状況において通常よりツモりにくい、マイナスならツモりやすいということを表しています。
1枚場に出てる2m8p8sあたりはツモりにくくなってて、1枚しか出ていない端牌(1mとか9mとか)と中はツモりやすいという風に出ています。おそらく通常なら今回の設定よりもっと端牌字牌の割合が多いんでしょうね。
関連牌はプラス(ツモりにくい)ところが多くて、その分局収支や和了率に響いているのでしょう。たぶん。
今後の方針について。
四人の挙動を再帰式で計算するのはおそらく無理(単純に再帰式を使う回数だけで4倍に増えるし、記憶すべき情報が膨れ上がってしまうので、再帰式1回あたりの計算量も今より多くなってしまう。)ので、次のようなことを考えています。
第一段階。(手替わり1回とか0回を上限として)今後取り得るすべての(14枚)手牌と巡目ごとに一人麻雀計算で最適打を決定させておく。
第二段階。前の局収支シミュレーションと同様、100000回シミュレーションを行う。自分の挙動は第一段階で求めた最適打テーブルから検索して淡々と摸打して、面前聴牌したらリーチする。他家の挙動はだいたい局収支シミュレーションと同様の予定。
問題点。
・第一段階の最適打決定のところは現在巡目以降の捨て牌を記憶できないので、第二段階で他家から切られて薄くなった受け入れがあるから最適打を変えるみたいなのはできそうにない。
・他家のリーチが入ってもお構いなしに自分の手が最もよくなる「最適打」しか打てない。放銃の危険性が高いから打牌を変えるみたいなのは実装できるかどうかわからない。
・別途、他家がどの牌を切るか(自手リーチのときの打牌分布も含む)などのパラメータを大量に取る必要がある。
道のりは長いですなぁ。
ま、気長にやっていきますか。
スポンサーサイト