*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>>
floodgate for mahjong へ参戦その14・計算時間短縮その3
今日も引き続き処理速度向上の話です。

今回やったのは捨て牌と現物筋をLong型(のペア)で表すことを主にやりました。
だんだんビット演算も慣れてきました。
とにかく配列やListを嫌って、ビット演算で計算できるLong型(及びその派生構造体)に置き換えまくります。
どうしても配列で処理しないといけないところ(出る率・ツモ率・局収支や和了率等結果の仮置き変数)以外は全部置き換えが終わりました。

最終的に2233556678p5667sの手牌(1巡目)に対してかかった時間が6秒まで縮めることができました。
これでも今後のことを考えると不安ですけど、もう改善のネタが尽きました。
現状はこのあたりで許してもらうことにしましょう。
実際は巡目が深くなればループの段数が下がるし、今回みたいな複雑な牌姿(まず初手の候補手自体が多い)はそんなにないと思うので、これよりは計算時間が短いケースが多いでしょう。

もうそろそろ次の段階に移ろうかと思います。
次は鳴き考慮かシミュレーションパートの構築かどちらを先にやろうかと考えてましたが、
実戦投入(いつもツイッターの出題)をできるだけ早くやりたいので、シミュレーションパートの構築からやることにします。
鳴ける手牌は後回しになるけど、それよりかは他家の挙動とかを正確に反映したものとついでに点棒状況判断も考慮したものをしっかり土台を作っておいた方がいいかなーと。

シミュレーションパートのロジックはだいたい前に作った四麻計算機(バグが残ってるままお蔵入りになってるやつ)を参考にしながら頑張って作っていきます。
ひとつ問題があるのが、他家の攻撃に対してどの程度押すか、というパラメータは事前に何らかの形で決定しておく必要があるということです。
とりあえず勝手がいまいちわからんので、最初はてきとうにしておくか。(例えば他家無視局収支と瞬間の危険度だけを見るmanue
方式局収支が一定以上なら押すとか。)
できてからfloodgate for mahjongに流してみて押し引きの一定値をどこに置いたらよさげかを測ってみる、みたいなのが必要になるでしょうか。
ただ、明らかな差がつくような多数試合ができるようなプログラムと時間ができるのかどうかはけっこうあやしいですが。
それか鳳凰卓の実戦譜をAIに計算させて、実際のプレイヤーが押し引きのラインをどこに置いてるのかを見て学習する、みたいなプチディープラーニング的なことをやった方が可能性はあるかもしれない。

まぁ、御託を述べる前にそれっぽいシミュレーションパートを作る(もう最悪全ツでもいい)ことから始めましょう。
スポンサーサイト

コメントの投稿

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

コメント

プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード