2017-06-29(Thu)
麻雀AI開発の続きです。
再帰パートとシミュレーションパートで自分鳴き処理のところまでたぶんできました。
テスト風景はこんな感じ。
まずは2m3m4m6m7m5p5p6p7s8s9s白白北 ドラ東 1巡目
で、白のポンテンが効く完全一向聴でやります。

一番左が巡目で、その次が鳴く前の手牌、手牌の次が他家から出て鳴く牌(牌番号1~37)、その右が鳴く対象の相手(自分が0、下家が1、対面が2、上家が3)、最後が鳴き方(100の位、100番台がポン、200番台が出た牌の下二つを晒すチー、300番台がカンチャンチー、400番台が出た牌の上二つを晒すチー、500~700番台が赤を含むチー)と鳴いたときに打つ牌(10の位1の位、牌番号1~37)
再帰パートで上のような鳴く牌リストを作って、シミュレーションパートではその表に載っている牌姿と他家から出た牌の組み合わせが来たら鳴く(載っていなかったらスルー)というような作りです。
この場合だと終盤は全部鳴く、8巡目くらいなら白(牌番号35)だけ鳴く、7巡目以前は白も鳴かないというような鳴く牌リストです。
続いて2m3m4m6m7m4p4p5p8p8p6s7s8s北
タンピンの完全一向聴。

通常のポンテンチーテン取るのは10巡目くらいから、赤は2巡目とかでも鳴く、的な感じ。
まぁ、そんなところでしょうね。
途中でやっぱりバグが出たのを直しつつ、それっぽい結果が出てきました。
次は二向聴の手牌で、

まずは手替わり0回の再帰計算。まぁこれはいいとします。
続いて手替わり1回の再帰計算。…、結果が出るのが遅い…。最後まで行くのに30秒とか1分とかかかりました。
ログを見てみて、15万7千行、なんじゃこりゃぁ、多すぎです。そりゃぁ時間かかるわけです。
これを実戦で配備するのは無理っ☆ですね。やっぱり当初の通り、手替わり1回再帰計算はどうしても精密に求めたいとき限定にとどめるのがよさそうです。
まぁ今のところは直すのがきつそうなバグは出なくて済んでいます。
次に手を付けるのは実際に他家から鳴ける牌が出た時にアクションを起こすための関数作りです。
(これは新規作成になるので、設計に少し時間かかるかもしれない。)
それができたらまた例のごとく実際の試合をAIに計算させてのチェック作業ですね。(他家からの鳴きが増えるのでチェックすべき量がえらいことになりそうな気はするが。)
再帰パートとシミュレーションパートで自分鳴き処理のところまでたぶんできました。
テスト風景はこんな感じ。
まずは2m3m4m6m7m5p5p6p7s8s9s白白北 ドラ東 1巡目
で、白のポンテンが効く完全一向聴でやります。

一番左が巡目で、その次が鳴く前の手牌、手牌の次が他家から出て鳴く牌(牌番号1~37)、その右が鳴く対象の相手(自分が0、下家が1、対面が2、上家が3)、最後が鳴き方(100の位、100番台がポン、200番台が出た牌の下二つを晒すチー、300番台がカンチャンチー、400番台が出た牌の上二つを晒すチー、500~700番台が赤を含むチー)と鳴いたときに打つ牌(10の位1の位、牌番号1~37)
再帰パートで上のような鳴く牌リストを作って、シミュレーションパートではその表に載っている牌姿と他家から出た牌の組み合わせが来たら鳴く(載っていなかったらスルー)というような作りです。
この場合だと終盤は全部鳴く、8巡目くらいなら白(牌番号35)だけ鳴く、7巡目以前は白も鳴かないというような鳴く牌リストです。
続いて2m3m4m6m7m4p4p5p8p8p6s7s8s北
タンピンの完全一向聴。

通常のポンテンチーテン取るのは10巡目くらいから、赤は2巡目とかでも鳴く、的な感じ。
まぁ、そんなところでしょうね。
途中でやっぱりバグが出たのを直しつつ、それっぽい結果が出てきました。
次は二向聴の手牌で、

まずは手替わり0回の再帰計算。まぁこれはいいとします。
続いて手替わり1回の再帰計算。…、結果が出るのが遅い…。最後まで行くのに30秒とか1分とかかかりました。
ログを見てみて、15万7千行、なんじゃこりゃぁ、多すぎです。そりゃぁ時間かかるわけです。
これを実戦で配備するのは無理っ☆ですね。やっぱり当初の通り、手替わり1回再帰計算はどうしても精密に求めたいとき限定にとどめるのがよさそうです。
まぁ今のところは直すのがきつそうなバグは出なくて済んでいます。
次に手を付けるのは実際に他家から鳴ける牌が出た時にアクションを起こすための関数作りです。
(これは新規作成になるので、設計に少し時間かかるかもしれない。)
それができたらまた例のごとく実際の試合をAIに計算させてのチェック作業ですね。(他家からの鳴きが増えるのでチェックすべき量がえらいことになりそうな気はするが。)
スポンサーサイト