*All archives* |  *Admin*

<<10  2016/11  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  12>>
全ツ型四人麻雀計算機その15・副露者の挙動4
今日もいつも通りパラメータを貼っていきます。

1個目。他家不聴者がポンする確率です。
分類は牌の種別・自分から見えてる枚数手持ち枚数・副露数・仕掛けの種別・リーチ者の有無です。
条件は
・他家該当者がリーチしていない
・他家該当者が染め手模様でない
・他家該当者がポンする前聴牌していない
・該当牌でロンが発生していない
・他家該当者が該当牌を切っていない
です。
161127-01.png
例のごとく分量が多いですが、まとめると、
・初手、他家から切られた0見0持役牌がある特定1家に鳴かれる確率は3%、5巡目で7%、9巡目で10%
・19オタ風仕掛けの1副露に対して1巡目0見0持役牌が鳴かれる確率は11%、9巡目で34%
・タンヤオ牌仕掛け1副露に対して5巡目役牌が鳴かれる確率は14%、19牌ポンは2%、28牌・赤5牌ポンは6%、3~7牌ポンは4%くらい。
・1枚切れ役牌が鳴かれる確率は生牌よりかなり下がる。
・リーチ者がいるとポン発生率が低下する。

こんな感じでしょうか。

2個目。黒5牌がポンされたときに赤5牌入りで晒される確率です。
161127-02.png
赤が入る確率はだいたい4分の3くらいらしいです。
残り3枚中2枚の中に赤5が入っていればいいので、3分の2の確率かと思いきや、それよりも高いご様子。

3個目。同じくポン発生率(リーチ者あり)で、今度は切ってる無筋現物数ごとに分けます。
161127-03.png
左が素のポン発生率、右が各分類のポン発生率を全体で割った倍率です。

無筋が多く切られるほど、ポンされる確率も上がるという傾向です。

ただ、3副露者のポン(裸単騎になる)のはサンプル数が少なくてちょっとパラメータとして採用しづらいですねー。
倍率だから2副露の値をそのまま持ってきてもそんなに特段の影響はないと思います。

4個目。ポン発生時、聴牌化する確率です。
161127-04.png
これはだいたい初期聴牌率と似たような感じです。
スポンサーサイト
全ツ型四人麻雀計算機その14・副露者の挙動3
今日もいつも通りパラメータを貼っていきます。

1個目。他家副露者が切る牌分布で、リーチ者ありかつ副露不聴者の副露数別に分けます。
161126-01.png
副露数が少ないほど、聴牌に遠いことが多く、また降りやすいため、現物が切られる傾向が強く、
逆に副露数が多いと、聴牌が近いことが多く、また降りにくいため、無筋が切られる傾向が強いです。

2個目。他家副露者が切る牌分布で、リーチ者ありかつ副露不聴者が切っている無筋現物数別に分けます。
161126-02.png
無筋については、以前の巡目にも無筋を多く切ってるほどこれ以降の巡目でも無筋が切られる傾向が強いです。
一方、現物については、以前の巡目にも無筋を多く切ってるほど現物の切られる傾向が弱いとは言えますが、その逆、現物を多く切ってる時については必ずしも現物が切られる傾向が強くなるということはないみたいです。

おそらく、現物が多く切られているということは先制リーチから巡目がたっていて、現物の種類自体が増えるので、1種の現物が切られる確率としては影響が薄まって数値が小さくなる、ということだろうと思います。

3個目。他家副露者が切る牌分布で、リーチ者以外へのケア(自分や他家副露の現物がどの程度切られやすいか)です。
切った他家副露者が聴牌かどうかとリーチ者の有無で分けます。
161126-03.png
特に、他家副露者不聴かつ、リーチ者なしのケースにおいて、
副露数が多い他家(切った副露者から見て)の現物が切られやすく、無筋は切られにくいという風な結果になっています。
聴牌に近そうな他家についてはそれなりにケアされる、ということですね。

4個目。他家副露不聴者のツモ番のとき、聴牌化する確率です。
仕掛け種類と副露数とリーチ者の有無と切ってる無筋現物数ごとに分けます。
161126-04.png
リーチ者なしだと、1順当たり聴牌化率は中盤で10%~20%くらいです。(副露数が多いほど聴牌化率は増える)
初期聴牌率の時と同じで、役牌仕掛けのときが若干聴牌化率高めになってます。

リーチ者ありも初期聴牌率の時と同じような傾向です。
無筋を押してる他家ほど聴牌化しやすいと。


すでにパラメータ表の行数が17000行強まで達していて、前の局収支シミュレーションより多くなってます。
これからもまだ必要なパラメータは多いので、最終的にどうなることやら。
全ツ型四人麻雀計算機その13・副露者の挙動2
今日もいつも通りパラメータを貼っていきます。

1個目。他家が上がった時に自分から見えてない赤ドラの枚数ごとに他家の手牌(晒されている部分を除く)に入っている赤ドラの枚数分布を調べます。
上がりの種別・副露数で分けます。
161125-01.png
副露手の中ではタンヤオ仕掛けだと赤ドラ含有率が高く、その他仕掛けだと手牌が端に寄ってるケースが多く、赤ドラ含有率が少ないという結果です。

2個目は他家副露者が切ってくる牌の分布です。
牌の種別・見えてる枚数・自分が持ってる枚数・リーチ者の有無とリーチ者に対する現物か筋か無筋かの別で分けます。
リーチ者なしの場合がこちら。
161125-02.png
タンヤオ仕掛けの時は端牌字牌が出やすく、その他仕掛けだとタンヤオ牌が出る確率がやや高くなる、といった具合です。

リーチ者ありについては容量が多すぎて全部貼り付けることができなくて、画像を分割するとか、一部抜粋で載せるとかが面倒だったので割愛。


次も他家副露者が切ってくる牌の分布で、副露者の状態(聴牌状態・聴牌から不聴に聴牌崩し・鳴き直後・不聴から聴牌化・不聴のまま、の5パターン)別で分けます。
取ったのはリーチ者ありの状態だけにしました。
161125-03.png
左が素のある牌が切られる確率、右が各状態の切られる率を全体の切られる率で割った倍率です。

大雑把には、
聴牌ならば現物が切られる傾向が弱く、無筋が切られる傾向が強い、
不聴ならば現物が切られる傾向が強く、無筋が切られる傾向が弱い、
という感じです。

けっこう他家副露者の切る牌分布については考えることが多くて難しいです。
今のところ見たのは、牌種・枚数・リーチ者の筋無筋・副露者状態で、
後見る予定で残ってるのが、リーチ者に対して切ってる無筋現物数・副露数・リーチ者以外へのケア(自分や他家副露の現物がどの程度切られやすいか)といったところです。

全部分類してしまうと場合分けが多すぎてサンプル数が足らなくなる(後は自分の処理能力が追い付かない)ので、
元の切られ率に対して、各分類の要素で切られやすさ倍率を掛けていく方式でいつも通りやっていきます。
これだと各要素が独立という仮定が前提になっていて本当はそれはびみょうなんですが、しょうがないです。
全ツ型四人麻雀計算機その12・副露者の挙動1
今日もいつも通りパラメータを貼っていきます。

1個目。副露者が最初の状態でテンパイしている確率です。
副露数・仕掛け種類・リーチ者有無(切ってる無筋現物数)で分類します。染め手模様は集計から除外しています。
161123-01.png
その他仕掛け・タンヤオ仕掛け・役牌仕掛けの中では役牌仕掛けの聴牌率がやや高めです。
おそらく、その他仕掛けやタンヤオ仕掛けの場合、手役をつけるために手牌の進行を遅らせることが多々あるためと思われます。


2個目。副露聴牌者が1順でツモ和了する確率です。
161123-02.png
ツモ和了率はその他仕掛け<タンヤオ仕掛け<役牌仕掛けの順です。
この順番に手牌の自由度が上がるので良形率が高まるためでしょう。


3個目。副露聴牌者にある牌で放銃する確率です。
分量が多いので一部抜粋で。
161123-03.png
・その他仕掛けには(生牌)役牌が極めて危険度が高く、真ん中牌はわりと通りやすい。
・タンヤオ仕掛けには19オタ風はほぼ通る。(生牌)役牌はまだまだ危険度が高い。
・役牌仕掛けは対リーチと似たようなものか。

今日はこんなところで。
全ツ型四人麻雀計算機その11・非リーチ面前者の挙動3
パラメータ取りの続きをしていきます。

1個目。リーチ発生率について、前巡にすでにダマで張ってた場合と前巡はノーテンだったケースで分けて集計してみます。
161122-01.png
基本的には前巡がダマ聴牌の方がリーチに移行する確率は高くなってます。聴牌の状態なら手替わりとかしたらいつでもリーチに行けますからね。
特に数値が高いのが、リーチ直後です。ダマ満貫とかをダマテンにしていて、他家からリーチがかけられたから、「じゃぁこっちもリーチで。」というのはよくある風景ですね。
ただ、それでもリーチ発生率は15%止まりなので、ダマ聴牌からリーチに移行することはそんなに多くないのかもしれません。

2個目と3個目。ダマ聴牌者が聴牌を崩す確率と、ダマ不聴からダマ聴牌の状態に移行する確率(リーチではない)を見てみます。
161122-02.png
聴牌崩し率の方はリーチ者がいるときに数値が高くなりますね。ダマにする理由の一つに、リーチを掛けられたら降りるため、というのがあると思うので、まぁ至極当然ですね。

ダマ聴牌化率の方は、リーチ発生率を一回り小さくしたような値になっています。リーチ発生率とダマ聴牌化率を合わせれば中盤で6%~7%くらいあって、それが3人分(全員非リーチ面前なら)あるので、1順回って聴牌者が増えるケースはそれなりに多いと言えるでしょう。


とりあえずダマ聴牌関連は大体取り終わったので、パラメータをシミュレーションに反映させてテストしてみます。
入力値はその8のときと同じものにします。その8のときの結果の下に新しくダマを反映させた分を追加してあります。

先制両面リーチの場合。
161122-03.png
前バージョンより局収支シミュレーションの結果にかなり近づきました。ダマテンを考慮した分がよい影響を与えているようです。

先制両面両面一向聴の場合。
161122-04.png
ちょっと和了率が低めに出てますが、被和了率はいい線いってます。
和了率についてはおそらく、今回の手牌と捨て牌の入力値的に多めに見えてる(7p1枚使いで1枚切れ、8s2枚切れ)なのが影響してるのかなーと。試しに789pの順子を789mに変えたらもうちょっと和了率が上に上がりました。

後手の両面両面一向聴の場合。
161122-05.png
まぁだいたい同じくらいですかね。

ちょこちょこテストをやってて思ったのが、同じ手牌でも捨て牌状況が変わると局収支が数百点レベルで動くことはけっこうあります。
となると、前に作った押し引き表とかは見えてる枚数とか場況とかの要素を全く無視してますが、そのあたりを適宜考慮して修正を加える、みたいな思想は必要かもしれないですね。

四麻計算機が完成すれば従前の局収支シミュレータの上位互換になるので、前のシミュレータは晴れてお役御免となります。まぁそこまで行くのが大変ですけどねぇ。

次にやる予定なのは他家副露についてです。
ざっと書き出してみるとこのくらいは必要になりそうです。
・副露初期聴牌率
・副露聴牌ツモ和了率
・対副露聴牌放銃率(放銃者自分と他家)
・副露者切る牌分布(聴牌状態、不聴から聴牌に移行時、鳴き直後、不聴)
・副露不聴者ツモで聴牌化率
・ポン発生率(牌種枚数別、リーチ者有無)
・チー発生率(牌種枚数別、リーチ者有無)
・鳴き発生時聴牌化率
・聴牌崩し率
・仕掛け種類と赤ドラ含有率

どうせやるなら仕掛けの種類ごと(染め(ドラ染め色or字)・染め(ドラ非染め色)・役牌仕掛け・タンヤオ仕掛け・その他仕掛け)にやりたいと思ったので、このへんのパラメータは使い回しはできそうにないですね。牌譜解析用のコードは大半を使い回してちょっと修正を入れるだけなので、まったく無駄ではないですが。
全ツ型四人麻雀計算機その10・非リーチ面前者の挙動2
今日はひたすらパラメータを貼っていくだけです。

1個目。切ってる無筋現物数別のリーチ発生率。先制リーチからの経過巡目ごとに分類します。
161121-01.png
左がリーチ発生率の素の値、右が各分類のリーチ発生率を全体のリーチ発生率で割った倍率です。

無筋を多く切ってる他家はリーチ発生率が高く、現物を多く切ってる他家はリーチ発生率が低いという傾向です。

2個目。ダマ聴牌者がある1順でツモ和了する確率です。牌の種類と枚数ごとに分けます。
161121-02.png
19牌でのツモ和了率は低めで、真ん中牌(特に37牌)のツモ和了率が高めです。

19が待ちになるのは両面になることが多く、その場合リーチされやすいので、相対的にダマにあたることが少なくなると。
一方、真ん中牌だとカンチャンペンチャンで即リーチできないケースがそこそこあって、ダマ聴牌という条件付きならあたりになりやすいということだと思います。

3個目。自分がダマ聴牌者に対してある牌で放銃する確率です。これも牌の種類と枚数ごとに分けます。
161121-03.png
続いて4個目。他家からダマ聴牌者への横移動する確率です。これも牌の種類と枚数ごとに分けます。
161121-04.png

ツモ和了率に比べてやや数値は低めになってます。

おそらく役なしで当たり牌をロンできないケースがあるためでしょう。
全ツ型四人麻雀計算機その9・非リーチ面前者の挙動1
また、パラメータ取りの作業に戻ります。これからはおもに非リーチ面前者の挙動(ダマの和了率とか)を追っていきます。

1個目。リーチ者がいて、ある他家が非リーチ面前の状態だった場合の切る牌についてです。
リーチに対してどの程度押してるかによって今後出てくる牌も変わってくるだろうという思想で、牌が切られる率を再度調べます。
分類は現物~両無筋の5種類が切られる確率を、リーチ後に切ってる無筋と現物の枚数ごとに分けます。
161119-01.png
左がそれぞれのカテゴリの牌が切られる確率、右が各分類ごとの切られる確率を無筋現物数関係なし全体の切られる確率で割ったものです。
右の牌の区分ごとの切られやすさ倍率を実際のシミュレーションでは使います。

簡単に言えば、無筋を多く切ってるほど危険牌が切られる傾向が強く、
現物を多く切ってるほど安牌が切られる傾向が強いということです。

このことを意識してしまったのでシミュレーションには反映させますが、また余計な処理が増えて計算時間が増えるんだろうなーと思うとちょっと微妙です。

2個目。切ってる無筋現物数ごとの非リーチ面前者の聴牌率。これはそのままですね。
161119-02.png
無筋を多く切ってるほど聴牌率は高い、現物を多く切ってるほど聴牌率は低いということです。

パラメータを取ったので、これからシミュレーションへの反映の作業をやっていきます。
全ツ型四人麻雀計算機その8・リーチまわりのテストと改善2
前回から引き続いてバグを潰しつつテストをやっていきます。

大きいところだと、
他家捨て牌処理のところで、見えてる枚数+1がカウントされないバグと、
リーチ後に通った牌をリーチ者の現物に入れ忘れてたのを修正。

後は計算時間圧縮のために他家リーチへのロン判定のところで、捨て牌情報を入れた変数から毎回37種類の牌すべてに対して現物か筋待ちか無筋待ちかを計算してたのを、
筋・現物かどうかを表した変数を新たに作って、1枚捨てられるごとに関連の牌(例えば5pが捨てられたなら2pと8pと5P)だけ計算して変数に結果を格納して、ロン判定の時は筋現物計算関数ではなく、ただの変数を参照するように変更。

その他こまごまとした計算時間の改善を試みて、1万回あたりのシミュレーションにかかる時間が前回の10秒から5秒まで減らすことができました。
今後、鳴きとかダマとかシミュレーション回数を10万回に増やすとかも考えれば、速度が速いに越したことはないです。

それで、再度今作ってる四麻計算機と従前の局収支シミュレーションを比較してみます。

先制両面リーチの場合。
161118-01.png
ツモ和了率が高めで被和了率が低め。副露を考慮してないことを考えればまぁこの結果はそこまでおかしくないです。


先制(という言い方が合ってるかは分からないが。)両面両面一向聴。
161118-02.png
和了率はほぼ同じ値。被和了率が低めに出てるのは副露を考えてないせいでしょう。

後手の両面両面一向聴。
161118-03.png
これはほぼ両者同等。割とよく再現できてると言えるでしょう。

おまけ。いつものウザク本Q032の牌姿。
161118-04.png
場況なしなら打3m有利の形ですが、先制リーチの現物に5p6pがあってここの塔子を落とせば安全に手が進められるときは打5pが有利になる、というのもうまく表現できています。

さらに再帰式の一人麻雀計算でも5p6pが多く見えてることによって打5pが打3mを逆転しています。

おまけ2
国士一向聴だが、先制リーチを受けて無筋2枚が余ってる状況。1sと9sはともに場に2枚切れ。
161118-05.png
全ツすると、和了率は5%~6%あるが、放銃率37%。局収支的は約-1100点。
国士なので降りればほぼ放銃はないとすれば、押すかどうか極めて微妙なところになってますね。
天鳳ルールなら役満になってもうまみがあまりないので降り、
雀荘ルールならトップの価値が高くて、役満にチップがつく分、押し寄り、というところでしょうか。

それにしても、現状は面前リーチ限定とはいえ、自由に牌姿と捨て牌を入力すれば、和了率とか局収支を計算できるところまで行きましたねぇ。いい時代になったものです。
全ツ型四人麻雀計算機その7・リーチまわりのテストと改善
パラメータを載せ続けてそれについてコメントするのも飽きてきたので、今日は手抜き。
パラメータの採取と計算機への反映の作業自体はまじめにやってます。

前回から採取したパラメータのラインナップはこちら。
・他家→他家リーチ者への放銃率
・他家リーチ者のツモ和了率
・ドラの切られにくさ倍率
・ドラの放銃率
・ドラなし赤一発裏なしハン数符数分布
・他家晒してない手牌にあるドラの枚数

このうち打点関連については1点コメントしておきます。
従前までは表ドラは含めた打点分布を使っていたのですが、今後副露手を考えるにあたってドラの種類と見え方は重要になってくると思われるので、表ドラを本体打点分布から分離して、後から表ドラの枚数だけハン数を足すということをしています。

それで、自手他家とも面前のみを前提にした場合のパラメータをだいたい取り終わったので、いったんテストしてみます。

まずは自手両面先制リーチの場合。(捨て牌はランダム生成したもの。)
161117-01.png
上が今回やってる計算機で、下が従前の局収支シミュレーションの結果です。
和了率はだいたい合っていて、放銃率・被ツモ率は低めに出ています。
おそらくは他家副露を考慮してない部分が出ているんだろうなーとは思いますが、そこは今後の課題ということで。

次が両面両面一向聴の場合。
161117-02.png
各値がどれも低めになってて、流局率が上がってます。他家副露やダマ和了がないから和了率は高くなると思ったのですが、欠陥ですかねー。

他家リーチがある場合。
161117-04.png
和了率が低くて、横移動率がえらく高めに出てます。
これは追加で調査がいりそうですね。

次は計算時間の調査です。どの部分で時間を食ってるか分かればその部分をを中心に改善を計ればいいので。
161117-03.png
初回。第二段階でかかってる56.4秒のうち、大半を初期処理のところで使っていました。

実際にその部分のコードを調べてると、毎回シミュレーションの先頭で入力した文字列から手牌情報の読み取りとか記憶を格納してる配列のリセットをしているのが無駄な作業だったようです。10000回も繰り返すので、できるだけ省力化したい。
というわけで入力値保存用の変数群を新たに作って、シミュレーションの先頭の初期化処理では配列のコピーだけで済ませる方法を取ってみました。

すると、43秒も食っていた初期処理が1~2秒まで短縮できました。
全行程から計算しても約4分の1の計算時間圧縮になりました。前に比べると、大分早く感じますね。

残りの部分で次に時間を食ってるのがツモ率と切られる率の算出のところです。
これについては毎巡ごとに牌の見えてる枚数とかが変わるので、毎回ツモ率・切られる率を算出しなければいけないのはやむを得ない作業だと思います。さすがに捨て牌のパターンごとにテーブル化して検索するとかいうのは量が膨大すぎて現実的ではないでしょう。


というわけで今日はこの辺にしておいて、テストの続きをやっていきます。
全ツ型四人麻雀計算機その6・自分→他家リーチへの放銃率、ドラツモりにくさ
まずは昨日の残務処理から。

自手リーチに対して他家が当たり牌を切ってくる確率のパラメータについて、
量が多くなるのはあまりやりたくないので、巡目と牌区分の分類を取っ払って全部合算したものを使おうと思いました。
161115-02.png
自手リーチの上がり牌が切られる率は↑の表の倍率だけ補正することにします。

後は昨日修正したもののデバッグをやりました。

再帰計算に他家ロンを考慮させたのを動かしてみたら、第一段階の計算時間が2~3倍くらいになりました。当初は4倍まで増えるかなーとは思っていたので、思ったよりはなんとかなるレベルかなーとは思います。
今のところは他家ターンの処理は、自手が聴牌かつ上がり牌が出た時のみ、記憶呼び出しor記憶がなければ再帰計算して、
そうでないときはスルーして下家のターンに回すだけなので、
自分のターンよりは単純な機構ということで2~3倍の時間で済んだのかなーとは思います。

これから自手鳴きも考慮しようとすると、より複雑になってさらに計算時間は増えそうですが、
牌譜検討用に使うソフトだと割り切れば多少時間がかかるのはやむなしということで我慢できる範疇だとは思います。

どちらかと言えば第二段階のシミュレーションの計算時間の重さの方がちょっとしんどい感じです。
フリテンチェックの機構を入れたせいか前より遅くなったような気がします。
今日、1個計算速度の改善(有効牌の格納について、第一段階で計算で使用した記憶情報を活用する)を入れたので、それでちょっとは早くなるといいなぁ。


それで今日取ったパラメータはこちら。

まずは自分が牌を切った時の他家リーチ者への放銃率です。
自分(放銃者)からみて見えてる枚数と手牌にある枚数が分かっているという前提で当たりの回数÷牌を切る機会がある回数を毎順37種類の牌についてカウントしていきます。(全部の牌を走査しているけど、実際に切った牌の当たり率か、手元にある14枚の牌だけ調べるとかの方がよかったかもしれない。やり直すのが面倒なので、このままでいきます。)
161115-01.png
同時に他家から他家への放銃率(放銃者でも和了者でもない人から見た、見えてる枚数と手持ち枚数別の放銃率)も調べてたのですが、全部の牌を走査する方式がなんとなくしっくりこなかったので、没にして実際に切った牌の放銃率で取り直しを今やってるところです。

次がドラのツモ率について。ドラをツモってくる確率を取ってきて、それをすでにある全部の牌のツモ率で割った倍率を使う予定です。
161115-03.png
同じ見えてる枚数・手持ち枚数で比べると、ツモ率はおよそ8割~9割に減るという感じでしょうか。

後はプログラムの修正。
・東が捨て牌にあるとき、捨て牌にある枚数だけ自手に紛れ込むという超特大バグを発見。リーチツモドラ1の手のはずなのに和了時平均点が跳満の点数になってる時があったからおかしいと思ったら、東が捨て牌に3枚あるときにダブ東の役がくっついてたという。たまたまプログラムの初期値が東1局東家で、コードのミスがあったのがたまたま東だったから、今回露見してよかったものの。
コピー&ペーストを多用してた中で集中力が落ちてましたね。こわいこわい。
・和了時ツモ割合を出力値に追加。(再帰計算で他家ロンも考慮するので。)
・シミュレーション時の有効牌のチェックを第一段階の記憶から呼び出す方式に変更。
・自手リーチに対して他家が当たり牌を切ってくる確率を他家切る率計算に織り込む。

こんなところか。
パラメータ採取の合間に計算機のデバッグをちょっとずつやってるので、あんまり集中ができてないのかもしれません。
コードの修正から時間がたって、何をテストしたらよいのかわからなくなっちゃうこともありますし。
備忘録的な意味でブログの更新は重要ですね。
取るべきパラメータはと大量にあって完成まではまだかなり時間がかかりそうなので、気長にやりましょうか。
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード