*All archives* |  *Admin*

<<05  2017/06  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  07>>
AI開発その25・ダブリーのテストと自分鳴き処理はじめ
今日はダブリー判断について、題材をいただいたので、AIのテストがてらにやってみます。

牌姿は
2m3m4m5m2p4p5p6p7p3s3s3s4s5s ドラ東
2m3m4m5m4p5p6p7p9p3s3s3s4s5s ドラ東

聴牌外しても4連形2つくっつきなので、張り返すのは容易ですが、ダブリーを打つかどうかというものです。
上はすでにタンヤオがついてる、下は聴牌外せばほぼ一方的にタンヤオがつきそう。
170627-01.png
上のタンヤオつく方ならダブリー有利、下のタンヤオつかない方なら聴牌外し有利と出ました。
まぁ、当初の期待通りで満足。


それで、今日あたりから再帰パートで自分の鳴き処理の部分を作り始めています。
前の四麻計算機から構造はほぼそのまま持ってきていますが、変数の型とか使い方が異なるので、そこの部分を現在の仕様にうまく対応させて作っていきます。
まだコードを書いてる段階で、テストできるにはもうちょいかかりますが、
バグがまた発生するだろうし、計算時間がどの程度増えるかも未知数なので怖いですね。
まぁシャンテン数が下がる鳴きしか考慮しないので、そこまで膨大に計算時間が増えることはないと信じてますが。
まずはまともに動くことを祈るのみですね。
スポンサーサイト
聴牌待ち選択・亜両面VS字牌単騎
17年6月22日出題の問題に関連して。
https://twitter.com/nisi5028/status/878234216722341888

↑の問題については6巡目6枚残りノベタンVS3枚残り字牌ドラ単騎の比較でしたが、
そもそもドラが関係ない亜両面と字牌単騎ってどっちが有利なんでしたっけ?

前にやったかどうか忘れましたが、まぁ今思いついたのでやってみます。

↓和了率
170626-04.png
上がり率的には6巡目で場に0枚どうしならほぼ互角と出ました。
ただ、字牌単騎については生牌より1枚切れの方がいいので、全体的には字牌の方が数値が上のところが多いです。
ふむふむなるほど。

↓ドラ1の局収支
170626-05.png
同じ打点(平和無し)だと字牌単騎はツモ割合が低い(面前ツモがつきにくい)ので上がり率よりもやや下方修正気味です。
1枚切れ字牌単騎と場に0枚亜両面がほぼ同じです。

これで打点が違う(平和ありの亜両面)ならなおさら亜両面寄りですね。
今日もまた一つかしこくなりました。
チートイ待ち牌ランキング
今日はかなり面白い感じのネタです。
先制チートイ聴牌の待ち牌の強さをランキングにしてみようと。

条件は
・自分南家で先制チートイ聴牌でリーチする。
・ドラ単騎、赤単騎、タンヤオチートイ以外の複合役はないものとする。
・巡目は5巡目、9巡目、14巡目のそれぞれで取る。
・ランキングの基準は局収支。
・数牌単騎はすべて生牌(1枚見え)とする。
です。

まずは序盤(5巡目)のチートイ待ち牌ランキングから
170626-01b.png

上位はドラ単騎とか字牌単騎とか両筋待ちとかがずらーっと並んでいます。


面白いところで言うとタンヤオチートイの筋28単騎が第3位とか、両筋赤5単騎が第8位とか。

上位の一つの基準は2枚見え字牌単騎や筋19単騎ですかね。
そこと比べていいドラ単騎と悪いドラ単騎があると。いい方は両筋、悪い方は無筋ときれいに分かれている感じです。

そこより一回り下位になるいい基準が無筋19単騎あたりでしょうか。
タンヤオチートイ無筋37単騎とか両筋28単騎がそこより上で、無筋赤5単騎とか両筋46単騎がそこより下であると。


続いて9巡目のランキングです。
170626-02b.png
5巡目と比べて大きく順位変動している待ちは…
・1枚見え字牌ドラ単騎(第7位→第11位)
・非ドラ2枚見え字牌単騎(第15位→第7位)
・非ドラ3枚見え字牌単騎(第31位→第26位)

全部字牌関連ですね。


最後に14巡目のランキング。
170626-03b.png
これもパッと見で字牌の順位変動が激しそうです。

しかし、こういうのを見るとわくわく感がものすごくするのは私だけでしょうか。
ワンチャンスと手持ち牌の危険度
今回の記事はワンチャンスについてです。

みーにんさんが取ったデータと北HAZさんの取ったデータがけっこう違う数値になってるらしいので、それの検証をしてみます。

↓元記事
http://meaningless777.blog.fc2.com/blog-entry-653.html
http://doraaka.exblog.jp/16179373/

○条件
・リーチ者が一人いる
・切る牌が無筋19・無筋28・無筋37である。
・一つ内側もしくは二つ内側が切る人から見て3枚見えである。
・そのとき、3枚見えの牌がリーチ者の現物ではない。
・3枚見えの牌の切る牌の手牌にある枚数で分類する。
・上記条件に当てはまったら分母にプラス1、そのとき、リーチ者の当たり牌であれば分子にプラス1

↓結果がこちら。
170623-04.png
「3枚見えの牌がリーチ者の現物ではない」の仮定が強めなので、母数がちょっと少なめでばらつきは出ています。

無筋19他力ワンチャンス(手0場3)以外はだいたいみーにんさんのデータに近い値が出ているようです。
麻雀AI開発その24・途中打ち切り処理導入
麻雀AIの続きです。

前回、再帰パートにおいて18巡目までツモれる前提はどうなのか?(それによって愚形役なしドラ3をダマにしてしまう)というのがありました。

なので、再帰パートにおいて一定確率(実測値からパラメータ取得)で他家和了が発生するという処理を新たに加えました。
分類は現在巡目・開始巡目・開始時点他家状態(0~4副露とリーチの5種類)・自分がリーチかどうか・ツモ和了or横移動の5次元です。
自分→他家の放銃については(切る牌に関係なく)ツモ和了率と同等とみなします。
また、他家和了時の失点はすべての和了の平均点(親子のみ分ける)とします。
かなり粗っぽいですが、再帰パートは最適打を求めるためだけにあって、シミュレーションパートでどうせ正確な計算はするので、そこらへんはラフに構えます。

というわけでできたので、テスト。
ペンチャンVSカンチャンの比較です。
170623-01b.png
赤丸が再帰パートの局収支で、黄色丸がシミュレーションパートの局収支です。

ちゃんとペンチャン落としが有利になってくれました。わっふるわっふる。
再帰パートとシミュレーションパートでかなり和了率とか局収支に差がありますが、再帰パートでは他家の攻撃の程度がかなりてきとーなのと、全ツする事前提とか、そのへんじゃないですかね。

次に3p1枚切れのケースにしてみます。
170623-02.png
打2pがいいと出ています。
打2pの後、なにか変化する牌を引くまでは浮いた4pを保持する前提なので、このような結果になっているのかと。ダイレクトペン3s4枚は残したまま、5p引き変化も逃さない、的な。

次に索子面子を788sに変えます。(2シャンテン)
2シャンテンについても変化を考えつつシミュレーションができるのは研究の進歩を感じますね。
170623-03.png
再帰パートでは似たり寄ったりだが、シミュレーションパートでは2p有利らしい。理由は不明。

さて、もうそろそろ自分鳴きを導入するお時間になりますかね。
一向聴塔子選択・1枚切れカンチャンVS0枚切れペンチャン
今回は塔子選択の話です。

塔子の強弱でカンチャン>ペンチャンというのは超初級クラスの知識ですが、
カンチャンが1枚切れになってる場合、その序列が覆るかという話です。

想定する牌姿は
4578889m24p12789s ドラ8m (3p1枚切れ、36mが残り7枚、以外は関連牌が切れてないものとする)
です。

○条件
・自分南家、他3人非リーチ面前
・24p残しの時、5p引き両面・6p引きリャンカン・45m24p縦引きの変化を考慮する。(2回変化(縦引き+両面変化等)は考慮しない。フリテン受けは考慮しない(そのまま切る)。)
・12s残しの時、45m12s縦引きの変化を考慮する。(2回変化(4s→5s引き等)は考慮しない。フリテン受けは考慮しない。打2pの直後に5pを引いて塔子を再び振り替えるのも考慮しない。)
・赤引き打点UPは考慮しない。(入れるの忘れてた。)
・どの聴牌になっても即リーチする。聴牌時切る牌はランダム。
・一向聴でも他家攻撃に全ツする。

↓シミュレーション結果がこちら。
170621-01.png
3枚ペンチャン・6巡目を基準にすると、
ダイレクトペン3sが1枚多いと+2.6%和了率UP、
ペンチャン→カンチャンで変化が2種類多いと、+1.1%和了率UP
というわけで、枚数差があるときはカンチャン>ペンチャンの序列は通用しない(見えてる枚数が正義)、ということになります。

ただ、和了率の増え方から見て、変化があることの影響が全くないということはないみたいで、もっと変化が多ければいい勝負になりそうです。
例えばピンズカンチャンが24567pの場合など。三面張変化1種と両面変化2種6枚とリャンカン変化1種と縦引き+1種類なので、単独カンチャンより変化の質は倍以上(このへんの表現はてきとうだが)なので、直接受けが1枚少なくてもピンズ残しという線はありだと思います。

または、2シャンテン以上の場合。いつものシミュレーションではできない(AIでは可能だが、今のところバグ直し中でできない。)ですが、
愚形残りの2シャンテンという時点で和了率そのものが低いので、1枚差で和了率が何%も動くとは考えにくく、
それなら上がりに近い段階の受け入れ優先でペンチャンを落とすということもありかと思います。
孤立字牌比較・1枚切れダブ東VS生牌三元牌
今日は序盤の孤立字牌の切り順についての話です。

東場の親で1枚切れのダブ東か、生牌の三元牌かどちらを先に切るべきかという問題です。

例のごとく牌譜解析によって各種数値を見ていきたいと思います。

○条件
・東場の親
・手牌に2枚見えダブ東が1枚と生牌三元牌が1枚ある(他の三元牌は持っていないものとする)。
・ダブ東を切った時と三元牌を切った場合で最終局結果(局収支・和了率・和了時平均点・和了時役牌刻子率)を見る。

↓結果がこちら。
170619-01.png
1巡目で該当するのはドラ表示牌が東(手持ち1枚と合わせて2枚見えになる)のケースなので、その部分は置いておいて、2巡目の数値で比較します。

明らかに差があるのは和了時役牌刻子率です。
ダブ東を残して刻子にして上がれる割合は3.0%なのに対し、
三元牌を残して刻子にして上がれる割合は4.6%となっています。
およそ1.5倍なので、役牌での和了重視なら三元牌を残した方がいいということでしょう。
それとも、打点重視なら役牌複合割合が3分の2になるが、その時の打点は2倍になるダブ東残しという使い分けだろうと思います。

その一方、局収支・和了率・和了時得点はあんまり芳しくない(そんなに差がない)です。
ふつうならダブ東残しの方が重なる確率低いのに和了率が上になっています。
おそらくこれは三元牌残しの方が相対的に悪い配牌である場合が多い(悪い配牌ほど、役牌の重なりを重視したい)ためだと思われます。
刻子にできてかつ上がれる確率は1%くらいしかないので、ダブ東か、三元牌かの選択という微々たる差はそういうサンプルの偏りとかそういうものの中に埋もれてしまうのであろうと。
麻雀AI開発その23・まだまだテストは続く
今日のAIのバグ情報。

(1)牌姿「1278889m12p12789s」を入力値として入れる
→どのペンチャン落としも似たようなもののはずなのに、なぜか打1mor打2mの和了率・局収支が他よりかなり悪い。

原因
再帰パートの処理の順番的にマンズの1mからのツモが先に処理される
→再帰処理の初っ端で4mのツモandツモ切りが連続してノーチャンス壁ができてペン3mの他家からの出上がり率が高いと勘違いしたものが記憶される
→それ以降ピンズソーズツモのときに同じペン3mの牌姿が出てきたときも不当に高いロン和了率の分がそのまま参照される。
というもの。

対処法
再帰パートではツモってきた牌を見えてる枚数+1カウントさせないよう変更。
→無事にどのペンチャン落としでもほぼ同じになってくれた。


(2)牌姿「1278889m24p12789s ドラ8m」を入力値として入れる
→なぜか打2p(カンチャン落としでペンチャン残し)が一番有利と言われる。

原因
残り手替わり回数1回でカン3pの聴牌のときにダマで手替わり待ちをしたがっているご様子。
殿、ご乱心なさいませぬよう。困ったちゃんですねぇ。

対処法?
再帰パートでは18巡目までツモれることが前提になっている。
なので、悠長に手替わりを待つようなダマテンの選択が有利になりやすくなっている。
今後、鳴き判断のことも考えると、途中の巡目で他家の和了が発生する事象まで考慮した方がいいか。
ただし、記憶情報を再利用するため(計算時間短縮のため)に途中の他家の状態変化までは考慮できない。
→何巡か前の状態だけ(現在巡目の状態は問わない)を参照して、現在巡目に他家和了が発生する確率というのをパラメータとして採取する必要がありそう。

これでダマテン病が治ればいいなぁ。
そして、なかなか次の段階に進めず、ストレスがたまる展開です。
愚形リーチVS1軒リーチと相手リーチの良形割合
今日はいつもと趣向を変えて、ふつうの追っかけリーチの話です。
自手が愚形聴牌に対して、シミュレーション等では相手良形割合は平均的な値(つまり60%くらい)ということを前提にしているわけなのですが、
面子によっては愚形のリーチをほとんどかけてこない相手というのもあり得る話です。

というわけで、相手の立直の良形割合が通常より上がると押し引きにどの程度の影響が出るのかを調べてみたいと思います。
そのためには、愚形立直VS良形立直と愚形立直VS愚形立直のそれぞれのデータが必要になるので、そこは牌譜解析から調べてみたいと思います。

○集計条件
・2軒目のリーチ者を自分として局結果を調べる。
・他二人は非リーチ面前
・1軒目のリーチが良形(三面張・両面・亜両面)か非良形(シャボ・カンペンチャン・単騎・その他)かで分類する。
・2軒目のリーチ(自分)はカンペンチャン待ち。(枚数・筋かどうかは問わない)
・2軒目のリーチは成立している(宣言牌がロンされなかった)

↓が牌譜解析結果
170620-02.png
対良形立直だと対愚形立直に比べて、9巡目で和了率5%減、放銃率7%増となります。
これを見て、相手の当たり牌の枚数が2倍弱は違う割には思ったよりは差が小さいなーと感じました。

では、具体的に自手が2600愚形聴牌(子VS子)だった場合、押し引きがどうなるかを見てみます。
初手切る牌の危険度は平均的な無筋2378の8%という数値を使います。
170620-03.png
降りた時の局収支が‐1400点あたりとするなら、たとえ相手リーチが100%良形だったとしてもまだ押しの方が有利ということになります。
他の降り有利になる要因が複数重なって最終的に降りることはあり得るかもしれませんが、少なくとも相手良形割合が高い、という1点だけなら降りる理由としては弱いのでしょう。
シャンテン数と一次有効牌枚数と局収支の関係
AI開発の課題の中で、4シャンテン以上だと枚数しか見てなくて、3シャンテンでも2択に絞り込むのに枚数だけを使っているという現状があって、
広さ(一次有効牌の多さ)と初手危険度の間を取り持つ指標が必要になるかと思ってこの2日くらい牌譜解析をやっていました。

他家の高打点仕掛けが入っているのに自手の都合(枚数)しかみないのはちょっと問題であろうと。
というわけで、シャンテン数と一次有効牌の枚数に対応する局収支を実測から取ってみて、そこから初手危険度指数(放銃率×放銃時失点の和)から差し引く…とかでなんとかうまいこといかないかなぁと。

それで牌譜解析をやったんですけど、毎順シャンテン計算と有効牌枚数計算をやるため、かなり時間がかかりました。
その結果がこちら。
左が巡目、上が一次有効牌枚数
集計条件は特になし(他家の挙動は無視)
170618-01.png
同じシャンテン数・巡目では一次有効牌枚数が多いほど局収支も高い傾向にあるようです。

ただ、取ってみたのはいいけれど、これを実際使えるかというとびみょうです。
この数値は何も条件を付けてないので、自手の手牌価値と等価になっていなくて、多くの場合は途中でベタオリに回ることが入っているためです。
ちょっと失敗でしたかね。(数値自体は無意味ではないかもしれませんが。)

そうすると4シャンテン以上と3シャンテンの手牌評価が手詰まり気味です。
初手危険度の評価と安牌(大体の場合、字牌)を手に残す場合の価値の評価とか。
うーん、どうしようか。

とりあえず今考えているのは、いったんこの問題は棚上げにして、前に進めて(再帰パート自分鳴き処理部分)、
AIを実際の牌譜にかけて、その結果をなにかしら頑張って分析して、打牌決定のアルゴリズムを決める、みたいな。
ものすごく行き当たりばったりでまるでできる気がしないなぁ。
分析するにしても方向性がないとどんな数値を出力すればいいのかわからないし。
牌譜の数も多いし、AIにかけるのも1試合当たりに時間が結構かかるから、無駄なことはできないし。

現状は少なくとも細かい押し引き判断(2シャンテン以下)についてはAIで実際の牌譜を計算させてディープラーニングっぽいことをやらせることは確定なので、それがうまいこといってからまた考えようか。(すごくてきとー。)
3シャンテン以上の押し引き、打牌候補選定だとディープラーニングっぽいのをやるのに再帰計算はかけないので、シャンテン計算と有効牌計算だけでまた2日くらい時間を食うんだろうけど、そこまででかいコストではないから試行錯誤でもなんとかならんかなぁ、と希望的観測。
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード