2010年03月19日

立直者に対する各種捨て牌の放銃率(待ち形別)

前回の調査を立直者の待ち形別にして集計してみました。
愚形:数牌待ちの(単騎、シャボ)、嵌張、辺張
良形:字牌待ちの(単騎、シャボ)、その他の2面待ち以上

WS000164.jpgWS000165.jpg
元データ

字牌待ちの単騎を良形にしたのは、やり過ぎでした。
私が持っている牌譜では(鳳凰卓の牌譜が多いからか?)
シャボ待ちの立直は両面待ち並の和了率ですので
きちんと集計した訳ではありませんが、
字牌待ちがあればシャボでも良形でもいいと思います。
でも、単騎は思ったよりいいと言うレベルで両面待ちほどではない
って、集計終わった後に気がつきました。
まぁ、2時間もあれば集計し直せるのでまた後で直したくなったら直します。


他にも、ぱっと目につくだけで2順目の片筋456とか
誤差というより何かの間違いだと思いますが
何を間違えたのかは分かりません…

でもまー、大筋ではこんなもんじゃないでしょうか?
良かったら何かの参考にして下さい。



おまけで、赤アリルールと赤ナシルールでも分けて見ました。
WS000167.jpgWS000168.jpg
この記事へのコメント
今回の集計に使ったSQLです。
もっと細かくもできたんですが、データが多くなりすぎるので適当な所でまとめました。
もし、細かいデータを見たい人がいたらSQL弄ってみて下さい。
まぁ、こんな呪文のようなBIT情報だらけのSQL弄る人はいないと思いますがw

/* 捨て牌の放銃率 20100317 */
SELECT
((s.sute_turn&0xFC)>>2) as "順目",
count(distinct g.game_id) as "試合数",
sum(case when 0x1=(s.category&0x3) then 1 else 0 end) as "非現物放銃",
sum(case when 0x0=(s.category&0x2) then 1 else 0 end) as "非現物全数",
sum(case when 0x3=(s.category&0x3) then 1 else 0 end) as "現物放銃",
sum(case when 0x2=(s.category&0x2) then 1 else 0 end) as "現物全数",

sum(case when (s.category&0xF) in(5,9) and (s.sutehai&0xF) in(0,8) then 1 else 0 end) as "筋19放銃",
sum(case when (s.category&0xE) in(4,8) and (s.sutehai&0xF) in(0,8) then 1 else 0 end) as "筋19全数",
sum(case when (s.category&0xF) in(5,9) and (s.sutehai&0xF) in(1,2,6,7) then 1 else 0 end) as "筋2378放銃",
sum(case when (s.category&0xE) in(4,8) and (s.sutehai&0xF) in(1,2,6,7) then 1 else 0 end) as "筋2378全数",
sum(case when (s.category&0xF) in(5,9) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "片筋456放銃",
sum(case when (s.category&0xE) in(4,8) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "片筋456全数",
sum(case when 0xD=(s.category&0xF) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "両筋456放銃",
sum(case when 0xC=(s.category&0xE) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "両筋456全数",

sum(case when 0x1=(s.category&0xF) and (s.sutehai&0xF) in(0,8) then 1 else 0 end) as "無筋19放銃",
sum(case when 0x0=(s.category&0xE) and (s.sutehai&0xF) in(0,8) then 1 else 0 end) as "無筋19全数",
sum(case when 0x1=(s.category&0xF) and (s.sutehai&0xF) in(1,2,6,7) then 1 else 0 end) as "無筋2378放銃",
sum(case when 0x0=(s.category&0xE) and (s.sutehai&0xF) in(1,2,6,7) then 1 else 0 end) as "無筋2378全数",
sum(case when 0x1=(s.category&0xF) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "無筋456放銃",
sum(case when 0x0=(s.category&0xE) and (s.sutehai&0xF) in(3,4,5) then 1 else 0 end) as "無筋456全数",

sum(case when 0x01=(s.category&0x33) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "1枚見え字牌放銃",
sum(case when 0x00=(s.category&0x32) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "1枚見え字牌全数",
sum(case when 0x11=(s.category&0x33) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "2枚見え字牌放銃",
sum(case when 0x10=(s.category&0x32) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "2枚見え字牌全数",
sum(case when 0x21=(s.category&0x33) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "3枚見え字牌放銃",
sum(case when 0x20=(s.category&0x32) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "3枚見え字牌全数",
sum(case when 0x31=(s.category&0x33) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "4枚見え字牌放銃",
sum(case when 0x30=(s.category&0x32) and (s.sutehai&0xF) in (9,10,11,12,13,14,15) then 1 else 0 end) as "4枚見え字牌全数"

,sum(case when 0xD=(s.category&0xF) and (s.sutehai&0xF) in(4) then 1 else 0 end) as "両筋5放銃",
sum(case when 0xC=(s.category&0xE) and (s.sutehai&0xF) in(4) then 1 else 0 end) as "両筋5全数",
sum(case when 0xD=(s.category&0xF) and (s.sutehai&0xF) in(3,5) then 1 else 0 end) as "両筋46放銃",
sum(case when 0xC=(s.category&0xE) and (s.sutehai&0xF) in(3,5) then 1 else 0 end) as "両筋46全数"

FROM
tenhou_reach_sute s
,tenhou_game_info g

WHERE
s.game_id=g.game_id
and g.game_disc=0
and g.game_sanma=0
/*and g.game_tonnan=1*/

/* 0一般 1上卓 2特上 3鳳凰 */
/*and g.game_taku=3*/

/* 0無 1喰 2喰赤 3喰赤速 */
/*and g.game_rule in(2,3)*/

/* 良形か愚形か */
/*and 0x40=(s.category&0x40)*/

GROUP BY
((s.sute_turn&0xFC)>>2)
;

/*
(sutehai&0x0F)=捨て牌の数字
(sutehai&0x30)=捨て牌の種類(0=m,p,s,z)
(category&0x01)=放銃したか
(category&0x02)=現物か
(category&0x04)=右側の筋か
(category&0x08)=左側の筋か
(category&0x30)=見えている枚数
(category&0x40)=立直者が良形か愚形か
*/
Posted by idaten! at 2010年03月19日 13:39
ありがとうございます。
今は諸事情で研究できる状況にないですが、また研究を再開するときにこのデータを使わせていただきます。

>他にも、ぱっと目につくだけで2順目の片筋456とか

元データを見ると当たった回数が一桁なんで確実に偶然でしょう。
実際使うときは適度に補正して使います。
Posted by nisi at 2010年03月19日 21:50
>偶然
そういってもらえると、とっても安心します。

>今は諸事情で研究できる状況にないですが
そういう事は、ままありますよね。
私もそんな感じで、気ままにぼちぼちやってます。
でも、このデータがどう発展するのか少し期待しちゃったり…応援してます。

Posted by idaten! at 2010年03月20日 00:53
たしかに呪文だらけですねwww
Posted by 我打麻将 at 2010年03月20日 13:17
今回の場合BITはとても便利だったんで
どうせ自分しか使わないものだからって、好き放題やったらこんな事にw

プログラムではひらがなレベルの単純な書き方しかしないんですんがね
Posted by idaten! at 2010年03月23日 09:41
研究再開しました。

そのために立直者の1順あたりのツモ率をきちんと調べたいと思っています。
そこでそれに関連して、立直順目別、待ち形別(両面以上待ち、字牌含み待ち、悪形待ち)、
立直者から見て見えてない当たり牌の枚数別の
(立直時点での)山に残っている当たり牌の平均枚数から1順当たりのツモ率を出したいと思っているのですが、調べることは可能ですか?
もしよろしければ考えていただけたらと思います。
Posted by nisi at 2010年05月06日 23:01
返事が遅くなってすみません。
今更回答しても遅いと思いますが、ちょうど同じ頃、こちらは活動停止に陥りました(汗
すみませんが、ご依頼の調査はできそうもありません。


折角、依頼して貰ったのに私としても残念ですが、
nisiさんの研究の発展を影ながら応援&楽しみにしてますね。
Posted by idaten! at 2010年07月01日 09:13
了解です。

テンパイ判定が自分でもできるようになったので
データ数が少ないことを除けば何とかなるメドがついています。
Posted by nisi at 2010年07月02日 21:34
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/36512755
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック