FC2ブログ

*All archives* |  *Admin*

<<09  2017/10  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  11>>
麻雀AI開発その79・自己対戦途中経過
麻雀AIの続きです。
AIどうしの自己対戦をやっている最中です。
やっぱりどうがんばっても現状のままだと1日150試合くらいしか消化できません。人間的には鬼打ちでもAI的にはすごくスピードが遅いです。

現在651試合まで打ち終わったので、いったん和了率とか局収支とかの基本的なデータを牌譜解析で出してみることにします。
なにか致命的なミスがあったときに、早めにやり直しできるように。

AIの思考については前回(麻雀AI開発その78・AIどうしの自己対戦プログラム)で述べたように、
平均順位の多寡で打牌選択するAI(COM1)、局収支の多寡で打牌選択するAI(COM2)、自分和了得点に1.1倍の重みをつけた局収支ベースAI(COM3)、自分放銃失点に1.1倍の重みを付けた局収支ベースAI(COM4)の4体です。

二向聴以上の手についてはニューラルネットの計算なので、どのAIも思考は同じです。一向聴と聴牌の打牌選択・鳴き判断のみ思考が変わってきます。
171028-01.png

鳳凰卓の実測値と大きく違っていそうなところは、

・リーチ和了が多い。(和了時リーチ割合・対リーチ放銃割合・対リーチ被ツモ割合)
・副露和了が少ない。(和了時副露割合・対副露放銃割合・対副露被ツモ割合)
・ダマ和了が少ない。(和了時ダマ割合・対ダマ放銃割合・対ダマ被ツモ割合)
COM2・3・4は局収支しか見てないので、副露・ダマ和了が少ないのはまぁわかる気がします。

・流局率が低い。
・流局時聴牌割合が高い。
・流局時得失点が低い。
・リーチ和了が多い。
・和了時ツモ割合はほぼ同じ。
AIはみんな聴牌・上がりを目指す傾向が人間よりも強いためか、流局になりにくく、流局になった時聴牌の割合も多いと。
和了時ツモ割合はほぼ同じですが、リーチ和了割合が多い(→ツモ割合が高くなりがちな和了が多い)ことから考えれば、
実質では人間同士より出上がりが多くて、全員参加型に近い場になっているように思います。
(人間だと段位戦でラス回避を重視する、ということも関係しているかも。)

・リーチ率が高い。
特に局収支型のCOM2や局収支攻め型のCOM3のリーチ率はかなり高いです。

・リーチ時先制割合がやや低い。
全員参加型になることが多い、ということで。

・リーチ時良形割合(ここでの定義は字牌待ちor待ち牌が5枚以上(捨て牌は関係なしで。))が低い。
人間の方が手作りがうまい(?)、というか良形を目指したがる、ということでしょうか。

・副露成功率(副露したという条件の下での和了率)が低い。
人間の方が仕掛けの精度が高い、とか守備のために遠いところからは仕掛けない、ということかと思います。

今のところはこんなところですね。
まぁ、あまりにも致命的なものはなさそうなので、このまま継続で試合数を重ねていきます。

今のところは試合数が少なくて標準偏差(σ)が大き目で結論が出しにくいところが多いですが、
10000試合とかまでがんばって積み重ねられたら各AIごとの特徴とかがはっきりして面白くなったりするような気がします。
牌譜さえ先に取れれば、後は牌譜解析で好きなデータを引っ張ってこれるので、わくわくしますね。
スポンサーサイト
麻雀AI開発その78・AIどうしの自己対戦プログラム
麻雀AIの続きです。

前回、染め手パラメータを取って、これから染め手も含めたシミュレーションの設計をやろう!…と思ったのですが、
とある事情により、そっちはいったんほったらかして、AIどうしの自己対戦のプログラムを作ることにします。

人間一人VSAI三体のプログラムはすでにできてるので、それをちょっと改造すればすぐできます。

バグを収拾させつつ1試合分打たせたのがこんな感じ↓。
haifufile.txt

とりあえず自然な感じにはなっているっぽいです。

問題は計算時間ですね。東風戦1試合で10分~15分かかりました。
10000試合しようとすると1試合10分なら1時間6試合、1日150試合、ということは66日かかる、と。うむー。

ボトルネックになってるのは一向聴・聴牌の再帰計算+シミュレーションです。
二向聴以上の手みたいに全部機械学習で置き換えた方がよろしいのかしら。
一向聴以下だと上がりに直結する分、最終の待ち受けとか役判定打点関連とかをもっと精密に作らないといけなさそうな気がします。
機械学習でやると、中身がブラックボックス的になって分析がやりにくいですし、一番は今までシミュレーションで培ってきた知見が活かしづらいということがあるので、あんまり乗り気ではないです。

さて、どうしようか。
とりあえず1000試合・7日くらいでお茶を濁しておきましょうか。

後は対戦するAIですが、全部同じものを対戦させるのも芸がないので、別個のものを4体用意しようかと思っています。
今考えているのは、平均順位ベースAI・局収支ベースAI・局収支ベース(攻め型)・局収支ベース(守り型)

平均順位ベースは打牌選択基準(一向聴以下手牌のみ)を平均順位の良し悪しで判断する。
攻め型は自手上がり時得点に関して局収支を1.1倍換算したものを判断基準にする。
守り型は放銃時失点に関して局収支を1.1倍換算したものを判断基準にする。
という感じの予定。


普段使いのPCとは別に、自己対戦とかfloodgateでの大量対戦用のPCを買おうかなーと本気で検討中です。
もし、今のPC(3年選手)がつぶれてもスペアがあれば安心ですしね。
ハードディスクをSSDというのにすれば動作が早いらしいですし。
麻雀AI開発その77・染めパラメータの取り込み
前回までで染め手関連のパラメータを取り終わったので、さっきまでパラメータの数値の羅列をAI(シミュレーション)に取り込むところまでできました。
171014-01.png
パラメータの種類35種類、エクセルで約12000行消費。
つかれましたねー。

無事パラメータの取り込みまでは終わったので、次はこのパラメータを使って染め手者がいるときのシミュレーションの設計をやります。ここからもまた大変です。
麻雀AI開発その76・染めパラメータ(染め者への対応・染め率推移)
染め手パラメータ取りの続きです。

↓他家の予測染め率ごとの別の他家が非染め色・染め色・字牌を切る確率(下家・対面)
171011-01.png
↓他家の予測染め率ごとの別の他家が非染め色・染め色・字牌を切る確率(上家)
171011-02.png

基本的に、予測染め率が高いほど、別の他家が非染め色が切られる確率が上がり、染め色・字牌が切られる確率が下がる、という期待通りの結果になっています。

聴牌率が低い0副露・1副露余りなしだと下家・対面より上家の方がより染め色を絞る傾向が強いのも↑の表からわかります。
一方、聴牌率が高い2副露以上だと下家・対面と上家の差はそこまで大きくないです。

↓染め模様者が牌を切った時・鳴いたときの予測染め率の変動
171011-03.png
数値がプラス(マイナス)になっているところがその行動がとられたときに予測染め率が増加(減少)する、ということを表しています。
基本的に非染め色真ん中牌が切られたら予測染め率が増加、染め色が切られたら予測染め率が減少、
染め手が否定されない鳴き(非染め色数牌の鳴き)が入ったら予測染め率が大幅増加(ただし、役牌ポンは増加が控えめ)
という感じです。


これでとりあえずパラメータ取りはいったん終了です。新規追加になるパラメータが20~30種類もあるので、これからの作業量の多さで泡吹きそうですが、こつこつ設計を頑張ってやっていきます。
麻雀AI開発その75・染めパラメータ(ポン発生率・チー発生率)
染め手パラメータ取りの続きです。

↓染め不聴者がポンする確率(リーチ者なし)
171009-01.png
↓染め不聴者がチーする確率(リーチ者なし)
171009-02.png
171009-03.png

リーチ者ありとか聴牌化率とか鳴き時切る牌分布とかのパラメータも取ってあるけど、載せるのがめんどうなので省略ということで。

例えば、
・6巡目1副露染め不聴
・該当牌とその周辺は全生き
・リーチ者なし
の条件で鳴かれる確率を今回のデータから概算してみます。

下家・対面
19牌 19%
28牌 12%
37牌 8%
46牌 9%
黒5牌 9%
赤5牌 12%
字牌 21%

ポンの可能性しかない下家・対面とはいえ、19牌・字牌のポン発生率はやたら高いですね。
逆に37牌はポンさせれば12(89)をシュンツで使える可能性を潰せるので打つ牌としてはねらい目かもしれません。

上家
19牌 39%
28牌 49%
37牌 67%
46牌 57%
黒5牌 57%
赤5牌 78%
字牌 21%

チーもできる上家の場合。
赤5牌は別格とするとしても、下家対面とは逆に37牌の鳴かれる率のえげつなさが半端ないですね。
28より内側なら鳴かれる率は半分はあるので、手が遠いところからはうかつに切れない感じがします。
6巡目1副露余りなしの聴牌率が5%、仮に6巡目に切って鳴かれたら聴牌率17%(余りなし)~36%(余りあり)。
大雑把には鳴かれたら聴牌率が20%くらい上がりそうなので、下家染め者に染め色中張牌を切る行為は相手聴牌率を10%も上げさせる行為になるととらえればいいかもです。


これで、染め者の挙動についてはだいたいパラメータを取り終わりました。

次は染め者がいるときのそれ以外の他家の対応(だいたい染め色と字牌の絞られ具合のこと)のパラメータを取る必要があるのですが、これは意外と難しいです。

染め者以外から見た場合、実際に染めに向かっているかどうかは鳴き方と捨て牌から見た予測染め手率でしか分からないので、
対応に濃淡があるためです。この問題については予測染め手率で適当に輪切りして分類を1個分けようかと思っています。

また、シミュレーション上の問題として、1万回の繰り返し中で毎順鳴き方と捨て牌情報を収集して予測染め手率を計算し直すのは計算時間的なコストがやや高めなので、できれば避けたいという問題もあります。
この問題については予測染め手率の推移について、染め手模様者が牌を切ったときと鳴いたときに、予測染め手率をある固定%加算減算させて対応しようかと思います。都度計算より正確性は落ちると思いますが、計算時間上のボトルネックになることは避けたいのでそのようにします。
麻雀AI開発その74・染めパラメータ(聴牌化率・打点関連)
染め手パラメータ取りの続きです。

↓染め不聴者の聴牌化率(リーチ者あり)
171006-02.png

↓染め聴牌者の聴牌維持率(リーチ者あり)
171006-03.png

↓染め者和了時打点分布(染め色ドラ・染め色赤なし・確定で2役目以降の役牌ポンを上がりハン数から減算)
171006-04.png

↓染め者和了時、副露以外手牌に含まれるドラ・赤枚数分布(染め色に限る)
171006-05.png

Next牌譜解析
染め不聴者ポンする確率
黒5ポン時赤含み割合
染め不聴者チーする確率
鳴き時切る牌分布
鳴き時聴牌化率

ここまでできたら一応最低限必要なパラメータ取りはひと段落なので、これらのパラメータを頑張ってシミュレーションに織り込む作業に入るような感じですね。
これだけでも分量多くてあわあわーってなりそうですけど。
麻雀AI開発その73・染めパラメータ(染め者切る牌分布・聴牌化率)
染め手パラメータ取りの続きです。

↓染め者が切る牌分布(リーチ者なし)
171005-01.png

↓染め不聴者が切る牌分布(リーチ者あり)
171005-02a.png

↓染め聴牌者が切る牌分布(リーチ者あり)
171005-02b.png

↓染め不聴者の1順当たり聴牌化率(リーチ者なし)
171005-03.png

Next牌譜解析
染め不聴者の聴牌化率(リーチ者あり)
染め聴牌者の聴牌崩し率(リーチ者あり)
染め者和了時打点分布(染め色ドラ・染め色赤なし)
染め者和了時染め色ドラ保有枚数分布
染め者和了時染め色赤保有枚数分布

早くもパラメータ取りの作業に飽きてきました。
まだまだ取るべきパラメータはいっぱいあるのに困ったものですね。(なぜか他人事風に。)
麻雀AI開発その72・染めパラメータ(カベ効果放銃率・ツモ和了率)
染め手パラメータ取りの続きです。

↓染め聴牌者へのカベ効果放銃倍率(染め色数牌のみ)
171004-01.png

↓染め聴牌者の1順当たりツモ和了率
171004-02.png
愚形聴牌が多いためか、リーチや通常副露とかよりはツモ和了率控えめですね。

Next牌譜解析
染め者が切る牌分布(リーチ者なし・リーチ者あり)
麻雀AI開発その71・染めパラメータ(聴牌率・放銃率)
前回の続きです。

前回までで、他家の染め手割合の見積もり関数ができたので、今回からは実際に染めに向かった者(非染め色の枚数が1枚以下になった瞬間があったという条件)での、各種パラメータを取っていきます。

とりあえず必要そうなものはかたっぱしから牌譜解析で調べてみます。

まずは、実際に染めに向かった者の初期聴牌率です。
カテゴリ分けはだいたい従前局収支シミュレーションと同じです。(巡目・副露数・染め色余りありなし・リーチ者有無と切ってる無筋現物枚数)
最初は初期聴牌率も機械学習の手法でやろうと思ったけど、なんかうまいこといかなかった(染め色が切られたのに聴牌率が下がった)ので、いつもの雑いやり方(各分類ごとの相互作用はないものとして、単純に掛け算補正するやり方)にします。
171003-01.png

次に染め聴牌者に対してある牌を切って当たる確率です。
従前では副露数と余りあるなしで分けていましたが、今回は染め手模様の条件でなく、実際に(ほぼ)染め手に向かった者なので、
副露数による放銃率の違いはそんなに大きくなかったので、全部一緒くたにまとめちゃいました。
171003-02.png

Next牌譜解析予定
数牌放銃率カベ効果倍率
染め聴牌者ツモ和了率
プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード