2017-05-29(Mon)
前回に引き続き、麻雀AIの話です。シミュレーションパートをうまい具合に作っていきます。
○やったこと
・他家鳴き(不聴からのポンとチー)の導入(乱数とパラメータ表に従う。)
・自分降りの導入
他家鳴きについては従前の局収支シミュレーションだと通常副露と染め副露とドラポンの3択しかなかったところ、
通常副露の中に役牌仕掛けとタンヤオ仕掛けとその他仕掛けの3パターンでわかれるようにしているので、例えばタンヤオ仕掛けに19牌は鳴かれづらい・ロンされにくいとか、その他仕掛けに456牌は鳴かれづらい・ロンされにくいみたいなのも考慮できるようにしています。
(染め副露とドラポンについてはまだ未対応。)
自分降りについてはとりあえず今のところはてきとうな条件(立直者ありの状況のみで、聴牌からは全ツ・一向聴からは総放銃率(3人それぞれに対する危険度の和)が10%以上なら降り、2シャンテン以上は総放銃率3%以上なら降り)で仮置きしておきます。
この後、シミュレーションパートの速度改善と、再帰パートの自分鳴きの部分を考慮できた段階で、再帰パート局収支がn点のときに(放銃平均点も込みでの)危険度m点にあたる牌(最適打かそれに近い牌)を押したか、降りたかを鳳凰卓の牌譜から学習させて、(n,m)の組み合わせに対応する押す確率pを回帰式みたいな感じで求めるようなイメージです。
学習させるのはいいのですが、もとになるのがビッグデータなので、たぶんエクセルで分析するの無理なんじゃない?的疑惑があります。回帰分析に対してはエクセルのソルバーを使った分析を愛用していたのですが、どないしようかなー。回帰係数だから数学的な計算でなんとかなるのかもしれませんが、nとmで最低でも2次元は確定(あとはシャンテン数の分でも1次元増やさなきゃいけないかもしれない)なので、いまいちきっちり処理できるのかどうか自分の中であやしいです。
あれかな、AccessとかSQL?みたいなデータベースソフトがあれば適任なんだろうけど、今は持ってないんですよね~。(ついでにやり方も忘れた。)まぁなんとか気合で(?)乗り切りましょう。
あとは毎ツモごとに再帰計算をさせなきゃいけないので、牌譜の読み込みに時間が非常にかかることが予測されます。途中で計算を中断して、後で再開できるようなプログラムの設計も必要そうな感じです。
まぁ課題は山積ですが、今流行りのディープラーニングのさわりみたいなのができると思えば、気分はちょっと盛り上がるところです。
現状の見た目はこんな感じです。

まずは再帰パートで最適打を計算して、その直後に最適打テーブルに基づいてシミュレーションパートをやると。
放銃率・被ツモ率・横移動率についてはまぁこんなものじゃない?的になってる気がします。なんとなくまともそうに見えます。
他家鳴きと自分降りの分が増えた分、また計算時間が増量しましたので、しょぼーんと。ここからがんばってスリム化しないといけないです。
後は点棒状況部分がまだできていない(パラメータとか関数はだいたい出そろってるのでたぶんそんなに難しくない)ので、忘れないうちにやっとかないといけないです。
○やったこと
・他家鳴き(不聴からのポンとチー)の導入(乱数とパラメータ表に従う。)
・自分降りの導入
他家鳴きについては従前の局収支シミュレーションだと通常副露と染め副露とドラポンの3択しかなかったところ、
通常副露の中に役牌仕掛けとタンヤオ仕掛けとその他仕掛けの3パターンでわかれるようにしているので、例えばタンヤオ仕掛けに19牌は鳴かれづらい・ロンされにくいとか、その他仕掛けに456牌は鳴かれづらい・ロンされにくいみたいなのも考慮できるようにしています。
(染め副露とドラポンについてはまだ未対応。)
自分降りについてはとりあえず今のところはてきとうな条件(立直者ありの状況のみで、聴牌からは全ツ・一向聴からは総放銃率(3人それぞれに対する危険度の和)が10%以上なら降り、2シャンテン以上は総放銃率3%以上なら降り)で仮置きしておきます。
この後、シミュレーションパートの速度改善と、再帰パートの自分鳴きの部分を考慮できた段階で、再帰パート局収支がn点のときに(放銃平均点も込みでの)危険度m点にあたる牌(最適打かそれに近い牌)を押したか、降りたかを鳳凰卓の牌譜から学習させて、(n,m)の組み合わせに対応する押す確率pを回帰式みたいな感じで求めるようなイメージです。
学習させるのはいいのですが、もとになるのがビッグデータなので、たぶんエクセルで分析するの無理なんじゃない?的疑惑があります。回帰分析に対してはエクセルのソルバーを使った分析を愛用していたのですが、どないしようかなー。回帰係数だから数学的な計算でなんとかなるのかもしれませんが、nとmで最低でも2次元は確定(あとはシャンテン数の分でも1次元増やさなきゃいけないかもしれない)なので、いまいちきっちり処理できるのかどうか自分の中であやしいです。
あれかな、AccessとかSQL?みたいなデータベースソフトがあれば適任なんだろうけど、今は持ってないんですよね~。(ついでにやり方も忘れた。)まぁなんとか気合で(?)乗り切りましょう。
あとは毎ツモごとに再帰計算をさせなきゃいけないので、牌譜の読み込みに時間が非常にかかることが予測されます。途中で計算を中断して、後で再開できるようなプログラムの設計も必要そうな感じです。
まぁ課題は山積ですが、今流行りのディープラーニングのさわりみたいなのができると思えば、気分はちょっと盛り上がるところです。
現状の見た目はこんな感じです。

まずは再帰パートで最適打を計算して、その直後に最適打テーブルに基づいてシミュレーションパートをやると。
放銃率・被ツモ率・横移動率についてはまぁこんなものじゃない?的になってる気がします。なんとなくまともそうに見えます。
他家鳴きと自分降りの分が増えた分、また計算時間が増量しましたので、しょぼーんと。ここからがんばってスリム化しないといけないです。
後は点棒状況部分がまだできていない(パラメータとか関数はだいたい出そろってるのでたぶんそんなに難しくない)ので、忘れないうちにやっとかないといけないです。
スポンサーサイト