tomohxxの日記

麻雀プログラミング

麻雀AI開発DL編(2)

今回は麻雀AI開発の進捗について書きます。前回の記事で書いた課題は以下の2つです。

  • 鳴き判断モデルの取り込む
  • 放銃率を下げる

1つ目は解決できたのですが、今は2つ目で苦戦している状況です。詳細な説明の前に、まずは最新のモデルを使ったManueとの対戦成績について見てみます。

項目 データ
試合数 1000
局数 1000
和了 0.25
放銃率 0.14
リーチ率 0.22
副露率 0.41
平均得点 6435
平均失点 6199
平均順位 2.40
1位率 34.3
2位率 19.8
3位率 17.2
4位率 28.7

鳴き判断モデルを取り込んだことで副露率が下がり平均得点が6000点を超えるようになりました。しかし放銃率を下げることができませんでした。放銃率は11%以下にしたいと思っています。またリーチ者への放銃が多いせいか平均失点が6000点を超えています。これを6000点未満にしたいです。和了率、リーチ率は問題なさそうです。よって放銃率(とそれに付随する平均失点、平均順位)が現状の課題です。次に牌譜を見てみます。

始めにいいと思った場面から見てみます。

f:id:tomohxx:20210526224105p:plain
牌譜1

打9mとした場面です。9mと発どちらも1枚見えですが発で待つ方が上がれそうです。

f:id:tomohxx:20210526224612p:plain
牌譜2

打北とした場面です。ここまで安牌として北と中を抱えているだけも素晴らしいです。中は全員に対しての安牌なので北から切ったのはいい判断です。

f:id:tomohxx:20210526225528p:plain
牌譜3

打中リーチとした場面です。七対子なので字牌切りリーチはいいと思います。1枚見えの中で待ったほうがいい気もします。

f:id:tomohxx:20210526230004p:plain
牌譜4

打4mとした場面です。三色同順を狙っています。

続いて悪いと思った場面を見てみます。ほぼ押し引き絡みです。

f:id:tomohxx:20210526230345p:plain
牌譜5

打1mとした場面です。打5sではだめなんですか?愚形含み2シャンテンなのでおそらく降りることになります。打5sの後3s, 2s, 1sの順に切っていけばいいと思います。

f:id:tomohxx:20210526231039p:plain
牌譜6

打9pとした場面です。この場面はなかなか苦しいです。南を切ると押し返せなくなるので仕方がないですね。

f:id:tomohxx:20210526231907p:plain
牌譜7

打3pとした場面です。なぜ4mを切らないのでしょうか?

f:id:tomohxx:20210526232358p:plain
牌譜8

打9pとした場面です。一般的に端の牌は当たりにくく、この場合は9pを2枚持っているのでここで9pを通せば次巡でも9pを切れるというメリットがあります。しかし、この手は良形になるかもわからない2シャンテンなので今通りそうな筋3mで降りた方がいいと思います。あるいは打8mですかね。

以上、いくつか牌譜を見てきました。押し引き判断と降り手順がいまいちです。それ以外の場面ではいい感じなのですが押し引きと降りが他の良いところを台無しにしています。正直なところこの問題の解決策がわかっていません。例えば牌の危険度をディープラーニングで予測するということは簡単にできて、一定の危険度以上の牌を切らせないようにするといったことはできそうです。ただ、ディープラーニングを使う目的が押し引きである以上、押し引き判断に介入したくありません。ディープラーニングを使ったとしても押し引きは難しい問題なのでしょうか?ここまで読んでくれた方、もし改善案があったらぜひ教えてください。

あと余談ですが最新の打牌選択モデルの牌譜一致率は74.1%です。Suphxが76.7%なのでもう少しで届きそうですね。まあ、牌譜一致率ではどのような打ち方をするのかわからないのと、データを増やしたり計算資源を増やしたりすることで牌譜一致率を上げられるので、牌譜一致率に対する興味は薄れつつあります。今はデータと計算資源の両方を増やす余力があるので、本気を出せばSuphxを超えらるのかなと期待しています(お金がかかるのでやりたくはないですが)。