*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開発その26・自分鳴き処理、中身多分できた
麻雀AI開発の続きです。
再帰パートとシミュレーションパートで自分鳴き処理のところまでたぶんできました。

テスト風景はこんな感じ。
まずは2m3m4m6m7m5p5p6p7s8s9s白白北 ドラ東 1巡目
で、白のポンテンが効く完全一向聴でやります。
170628-01.png
一番左が巡目で、その次が鳴く前の手牌、手牌の次が他家から出て鳴く牌(牌番号1~37)、その右が鳴く対象の相手(自分が0、下家が1、対面が2、上家が3)、最後が鳴き方(100の位、100番台がポン、200番台が出た牌の下二つを晒すチー、300番台がカンチャンチー、400番台が出た牌の上二つを晒すチー、500~700番台が赤を含むチー)と鳴いたときに打つ牌(10の位1の位、牌番号1~37)

再帰パートで上のような鳴く牌リストを作って、シミュレーションパートではその表に載っている牌姿と他家から出た牌の組み合わせが来たら鳴く(載っていなかったらスルー)というような作りです。

この場合だと終盤は全部鳴く、8巡目くらいなら白(牌番号35)だけ鳴く、7巡目以前は白も鳴かないというような鳴く牌リストです。


続いて2m3m4m6m7m4p4p5p8p8p6s7s8s北
タンピンの完全一向聴。

170629-01.png
通常のポンテンチーテン取るのは10巡目くらいから、赤は2巡目とかでも鳴く、的な感じ。
まぁ、そんなところでしょうね。

途中でやっぱりバグが出たのを直しつつ、それっぽい結果が出てきました。

次は二向聴の手牌で、
170629-02.png
まずは手替わり0回の再帰計算。まぁこれはいいとします。
続いて手替わり1回の再帰計算。…、結果が出るのが遅い…。最後まで行くのに30秒とか1分とかかかりました。
ログを見てみて、15万7千行、なんじゃこりゃぁ、多すぎです。そりゃぁ時間かかるわけです。
これを実戦で配備するのは無理っ☆ですね。やっぱり当初の通り、手替わり1回再帰計算はどうしても精密に求めたいとき限定にとどめるのがよさそうです。

まぁ今のところは直すのがきつそうなバグは出なくて済んでいます。
次に手を付けるのは実際に他家から鳴ける牌が出た時にアクションを起こすための関数作りです。
(これは新規作成になるので、設計に少し時間かかるかもしれない。)
それができたらまた例のごとく実際の試合をAIに計算させてのチェック作業ですね。(他家からの鳴きが増えるのでチェックすべき量がえらいことになりそうな気はするが。)
スポンサーサイト
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点だけなら降りる理由としては弱いのでしょう。
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード