*All archives* |  *Admin*

<<07  2017/08  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 31  09>>
一人麻雀計算機その7・一向聴以上の計算
今日は一向聴以上の一人麻雀の計算をやります。

最初から一向聴以上でやることを想定していて、一向聴とかの受け入れについては手替わり判断を8割がた使い回しで割と簡単にできました。
骨組みは割とあっさりとできたのですが、なにせプログラミングのスキルが下手で、ちょっと小突けばすぐにバグが出るようなオンボロプログラムです。
一応、ver1.00で一人麻雀計算機としてはいったん完成なのですが、どうせまたバグが潜んでるんだろうなぁ…と思うとげんなり。しばらくは試用期間ですね。


出来上がったのはこんな感じです。
局収支と上がり率に加え、聴牌率と上がり時平均打点も出せるように改良しておきました。
161102-01.png
牌姿はベタに完全一向聴で。

手替わり0回については割とすぐに計算し終えてますが、
手替わり1回の時点で、計算時間14秒とけっこうやばいです。15巡目からのスタートで流局間近なのに…。これではつらいです。
このケースだと手替わり1回にしても0回とそんなに結果に違いはないです。労多くして益少なし。

一向聴だと聴牌より有効牌の種類が増える→それだけ計算回数が増える、という構図だろうなぁと思います。なんとか省力化を考えてみます。

ログをたどってみると好形一向聴をわざわざ崩して愚形にしてるケースがけっこう散見されます。
シャンテン数が維持できる限り、すべての手替わりについて計算をやっていて、愚形にしていて明らかに局収支が落ちるものまで計算しているのが無駄なのではないかと思いました。

というわけで、以下のケースが当てはまった場合、再帰関数の呼び出し(局収支等の計算)をスキップする処理を入れてみます。
・手替わり1以上でシャンテンが進まなかったときに、手替わりによって現在よりシャンテンの進む有効牌の枚数が減る場合。
・手替わり1以上でシャンテンが進まなかったときに、打牌候補が赤5のときで同じ色の黒5が手牌にある場合。

基本的に簡易計算(スキップ処理)をした方が処理時間は短くなると思いますが、有効牌の枚数をカウントする処理を入れなければいけない関係で、処理が増えるところもあります。

これでいろいろと動かしてみます。良形はさっきと同じ牌姿で、愚形は1m1m2m3m4m1p3p5p5s7s西;南南南 ドラ南です。
161102-02.png
良形については手替わり1で処理時間が半減くらいになっています。処理時間はそのときのPCの機嫌によって変わったりしますが、まぁ簡易計算は効果があるとみていいでしょう。局の結果も全探索の場合とほぼ同一になってるので、信頼性についてはあまり問題ではなさそうです。わざわざ待ちを狭くすることを考慮しなくてもまぁだいたい同じ結果が出てるということなので。

それにしても10巡目の計算だと手替わり0ですら5秒、手替わり1に至っては1分半とものすごく時間を食います。
仮にこれをAIに載せて天鳳で打つということになるとすでに一人麻雀・手替わり0の時点で残り時間のかなりの部分を消費してしまってます。手替わり1は無理ですね。タイムオーバー。
なにかもっといい省力化の案はあるのだろうか…。

一回計算し終えた牌姿は記憶しておけるので、最初のうちは単純に有効牌の多いものから選んでいって、1~2シャンテンになったところで、この一人麻雀計算機で手替わり0で計算し、他家の番の間とかに手替わり1を計算させればそのうち精度いい打牌ができる、みたいなイメージですかねぇ。

次に愚形の場合ですが、簡易計算にすることで多少は計算時間は減っていますが、半減まではいかないようです。最初の受け入れが狭いのでスキップ処理に該当するような変化が少ないためでしょう。

また、手替わり0と1の間の局結果が良形の時とは違って、そこそこ差があります。(もちろん手替わりを考慮する方が局収支が高い。)
愚形含みなら良形への手替わりも考慮したいということだと思います。時間は食いますが手替わり1で計算する価値は十分ありそうです。

一向聴の時点でこれなんで、二向聴はまぁ察してください。初めから手替わり0でやってみましたが、十数秒くらいかかるというかなり厳しい結果に。手替わり1はもうできないですね。

課題はあるけれど、ひとまず完成してよかったよかった。すぐに四人麻雀への拡張はせず、しばらくはテストして品質の向上に努めることにしましょう。
スポンサーサイト

コメントの投稿

Secret
(非公開コメント受付中)

コメント

No title
あらさんのサイトでシャンテン数計算の高速化方法が公開されていますがこちらは実装されておりますでしょうか。
http://mahjong.ara.black/etc/shanten/shanten8.htm
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード