麻雀AI開発DL編(6)
はじめに
これまでmjai環境で自作のAIの評価を行ってきました。以前も言及しましたが、この評価方法ではAIの強さを(mjaiを知らない)第三者に説明しにくいという問題があります。そこで開発を次の段階に進める前に天鳳自動打ちによってAIの評価を行うことにしました。なお、このために天鳳自動打ちのプログラムを一から作成しました。
結果
"Mar1422"というIDで一般卓東南戦を200戦行ったところ二段R1809という結果になりました。安定段位は二段のようです。
天鳳IDログ検索サイトへのリンクはこちら。https://nodocchi.moe/tenhoulog/#!&name=Mar1422
牌譜(クリックすると確認できます)
- https://tenhou.net/3/?log=2022031416gm-0009-0000-9358e848&tw=2
- https://tenhou.net/3/?log=2022031417gm-0009-0000-5ddc9ca4&tw=2
- https://tenhou.net/3/?log=2022031417gm-0009-0000-7a95c75e&tw=0
- https://tenhou.net/3/?log=2022031417gm-0009-0000-4d4bd58e&tw=1
- https://tenhou.net/3/?log=2022031418gm-0009-0000-3bd49751&tw=1
- https://tenhou.net/3/?log=2022031418gm-0009-0000-e0a5cf27&tw=1
- https://tenhou.net/3/?log=2022031419gm-0009-0000-090bd659&tw=3
- https://tenhou.net/3/?log=2022031419gm-0009-0000-b753f8c0&tw=0
- https://tenhou.net/3/?log=2022031419gm-0009-0000-47d7598b&tw=0
- https://tenhou.net/3/?log=2022031421gm-0009-0000-70c7501b&tw=3
- https://tenhou.net/3/?log=2022031421gm-0009-0000-8936c0b2&tw=0
- https://tenhou.net/3/?log=2022031422gm-0009-0000-2d2e149d&tw=3
- https://tenhou.net/3/?log=2022031422gm-0009-0000-14f627f2&tw=2
- https://tenhou.net/3/?log=2022031423gm-0009-0000-d1009b8f&tw=2
- https://tenhou.net/3/?log=2022031423gm-0009-0000-ae2236d6&tw=0
- https://tenhou.net/3/?log=2022031500gm-0009-0000-95bd4701&tw=0
- https://tenhou.net/3/?log=2022031500gm-0009-0000-6455daa8&tw=3
- https://tenhou.net/3/?log=2022031501gm-0009-0000-99c5139a&tw=1
- https://tenhou.net/3/?log=2022031501gm-0009-0000-e0c161e5&tw=1
- https://tenhou.net/3/?log=2022031501gm-0009-0000-a698a934&tw=1
- https://tenhou.net/3/?log=2022031502gm-0009-0000-b4ef1e10&tw=2
- https://tenhou.net/3/?log=2022031503gm-0009-0000-b3dc9e0b&tw=1
- https://tenhou.net/3/?log=2022031503gm-0009-0000-ca777780&tw=2
- https://tenhou.net/3/?log=2022031503gm-0009-0000-80b552e8&tw=1
- https://tenhou.net/3/?log=2022031504gm-0009-0000-1bdc128b&tw=3
- https://tenhou.net/3/?log=2022031504gm-0009-0000-810f8a97&tw=2
- https://tenhou.net/3/?log=2022031505gm-0009-0000-853b2332&tw=2
- https://tenhou.net/3/?log=2022031505gm-0009-0000-fa6fab97&tw=0
- https://tenhou.net/3/?log=2022031505gm-0009-0000-babe3098&tw=3
- https://tenhou.net/3/?log=2022031506gm-0009-0000-b8b1d800&tw=1
- https://tenhou.net/3/?log=2022031506gm-0009-0000-9ecd0c30&tw=0
- https://tenhou.net/3/?log=2022031507gm-0009-0000-03a09c28&tw=1
- https://tenhou.net/3/?log=2022031507gm-0009-0000-9924836a&tw=0
- https://tenhou.net/3/?log=2022031508gm-0009-0000-8cc815e7&tw=2
- https://tenhou.net/3/?log=2022031508gm-0009-0000-daceb8e3&tw=3
- https://tenhou.net/3/?log=2022031508gm-0009-0000-2e5297d0&tw=2
- https://tenhou.net/3/?log=2022031509gm-0009-0000-41f87648&tw=0
- https://tenhou.net/3/?log=2022031509gm-0009-0000-088a4aff&tw=0
- https://tenhou.net/3/?log=2022031509gm-0009-0000-72b1d881&tw=2
- https://tenhou.net/3/?log=2022031511gm-0009-0000-49877045&tw=1
- https://tenhou.net/3/?log=2022031512gm-0009-0000-09a4ca56&tw=3
- https://tenhou.net/3/?log=2022031512gm-0009-0000-29f85665&tw=3
- https://tenhou.net/3/?log=2022031513gm-0009-0000-934ac084&tw=2
- https://tenhou.net/3/?log=2022031513gm-0009-0000-eabfc986&tw=1
- https://tenhou.net/3/?log=2022031514gm-0009-0000-c14a0724&tw=0
- https://tenhou.net/3/?log=2022031514gm-0009-0000-888aca39&tw=3
- https://tenhou.net/3/?log=2022031515gm-0009-0000-c9b0442c&tw=2
- https://tenhou.net/3/?log=2022031515gm-0009-0000-3c1a1d38&tw=1
- https://tenhou.net/3/?log=2022031516gm-0009-0000-ed5119ae&tw=3
- https://tenhou.net/3/?log=2022031516gm-0009-0000-f166f162&tw=1
- https://tenhou.net/3/?log=2022031516gm-0009-0000-e4767209&tw=3
- https://tenhou.net/3/?log=2022031517gm-0009-0000-b372b9ad&tw=1
- https://tenhou.net/3/?log=2022031517gm-0009-0000-ea613f86&tw=1
- https://tenhou.net/3/?log=2022031518gm-0009-0000-e6e616c2&tw=3
- https://tenhou.net/3/?log=2022031518gm-0009-0000-9e5f4cb4&tw=3
- https://tenhou.net/3/?log=2022031519gm-0009-0000-96532a37&tw=3
- https://tenhou.net/3/?log=2022031519gm-0009-0000-6eeeda23&tw=0
- https://tenhou.net/3/?log=2022031520gm-0009-0000-c7e51285&tw=2
- https://tenhou.net/3/?log=2022031520gm-0009-0000-335b5ba8&tw=3
- https://tenhou.net/3/?log=2022031520gm-0009-0000-0590397d&tw=0
- https://tenhou.net/3/?log=2022031521gm-0009-0000-75a60217&tw=2
- https://tenhou.net/3/?log=2022031521gm-0009-0000-0c4f8445&tw=0
- https://tenhou.net/3/?log=2022031522gm-0009-0000-6c0faa23&tw=0
- https://tenhou.net/3/?log=2022031522gm-0009-0000-36c8dedd&tw=0
- https://tenhou.net/3/?log=2022031523gm-0009-0000-38838db3&tw=0
- https://tenhou.net/3/?log=2022031523gm-0009-0000-1b7b9e76&tw=1
- https://tenhou.net/3/?log=2022031600gm-0009-0000-4784dcb6&tw=0
- https://tenhou.net/3/?log=2022031600gm-0009-0000-1e38e2c3&tw=2
- https://tenhou.net/3/?log=2022031601gm-0009-0000-d870d9e4&tw=3
- https://tenhou.net/3/?log=2022031601gm-0009-0000-70498abc&tw=1
- https://tenhou.net/3/?log=2022031602gm-0009-0000-6ad0c2ba&tw=2
- https://tenhou.net/3/?log=2022031602gm-0009-0000-048a880a&tw=3
- https://tenhou.net/3/?log=2022031602gm-0009-0000-563c4d9f&tw=0
- https://tenhou.net/3/?log=2022031603gm-0009-0000-5d3ed8b0&tw=2
- https://tenhou.net/3/?log=2022031604gm-0009-0000-0930fb3e&tw=3
- https://tenhou.net/3/?log=2022031604gm-0009-0000-cb77c0e8&tw=3
- https://tenhou.net/3/?log=2022031605gm-0009-0000-7a6b4a31&tw=1
- https://tenhou.net/3/?log=2022031605gm-0009-0000-5de0835b&tw=3
- https://tenhou.net/3/?log=2022031606gm-0009-0000-c35ee92c&tw=2
- https://tenhou.net/3/?log=2022031606gm-0009-0000-28a7c1f5&tw=1
- https://tenhou.net/3/?log=2022031607gm-0009-0000-2c54d451&tw=0
- https://tenhou.net/3/?log=2022031607gm-0009-0000-057d6f26&tw=2
- https://tenhou.net/3/?log=2022031608gm-0009-0000-2c286dec&tw=3
- https://tenhou.net/3/?log=2022031608gm-0009-0000-c558a67f&tw=1
- https://tenhou.net/3/?log=2022031609gm-0009-0000-6581417b&tw=0
- https://tenhou.net/3/?log=2022031609gm-0009-0000-f9bcb620&tw=2
- https://tenhou.net/3/?log=2022031610gm-0009-0000-2c5c92f2&tw=1
- https://tenhou.net/3/?log=2022031610gm-0009-0000-19c49458&tw=1
- https://tenhou.net/3/?log=2022031611gm-0009-0000-e90386c9&tw=2
- https://tenhou.net/3/?log=2022031612gm-0009-0000-f7a96210&tw=1
- https://tenhou.net/3/?log=2022031612gm-0009-0000-0aa4b51e&tw=1
- https://tenhou.net/3/?log=2022031612gm-0009-0000-32387370&tw=1
- https://tenhou.net/3/?log=2022031613gm-0009-0000-6535dea0&tw=0
- https://tenhou.net/3/?log=2022031613gm-0009-0000-ef7fd74b&tw=0
- https://tenhou.net/3/?log=2022031614gm-0009-0000-763cf1a0&tw=3
- https://tenhou.net/3/?log=2022031615gm-0009-0000-e5da6f43&tw=1
- https://tenhou.net/3/?log=2022031615gm-0009-0000-2de9b54c&tw=3
- https://tenhou.net/3/?log=2022031615gm-0009-0000-d6af768d&tw=3
- https://tenhou.net/3/?log=2022031616gm-0009-0000-b4eea570&tw=1
- https://tenhou.net/3/?log=2022031616gm-0009-0000-10814297&tw=1
- https://tenhou.net/3/?log=2022031617gm-0009-0000-10041d54&tw=2
- https://tenhou.net/3/?log=2022031617gm-0009-0000-4f3e43ad&tw=3
- https://tenhou.net/3/?log=2022031618gm-0009-0000-fa151221&tw=2
- https://tenhou.net/3/?log=2022031618gm-0009-0000-572a7395&tw=1
- https://tenhou.net/3/?log=2022031618gm-0009-0000-4f5f1136&tw=2
- https://tenhou.net/3/?log=2022031619gm-0009-0000-2fdd6b35&tw=2
- https://tenhou.net/3/?log=2022031620gm-0009-0000-bdad6d01&tw=0
- https://tenhou.net/3/?log=2022031620gm-0009-0000-65ede1af&tw=0
- https://tenhou.net/3/?log=2022031620gm-0009-0000-83327038&tw=2
- https://tenhou.net/3/?log=2022031621gm-0009-0000-4119afcb&tw=3
- https://tenhou.net/3/?log=2022031622gm-0009-0000-2b60a35a&tw=3
- https://tenhou.net/3/?log=2022031622gm-0009-0000-4805477b&tw=1
- https://tenhou.net/3/?log=2022031622gm-0009-0000-c6f6bfcb&tw=0
- https://tenhou.net/3/?log=2022031623gm-0009-0000-fb586146&tw=2
- https://tenhou.net/3/?log=2022031623gm-0009-0000-a28ae8ce&tw=3
- https://tenhou.net/3/?log=2022031700gm-0009-0000-a81483a6&tw=1
- https://tenhou.net/3/?log=2022031700gm-0009-0000-c411d319&tw=2
- https://tenhou.net/3/?log=2022031701gm-0009-0000-454ffe34&tw=3
- https://tenhou.net/3/?log=2022031701gm-0009-0000-7f0e196c&tw=1
- https://tenhou.net/3/?log=2022031702gm-0009-0000-a80d22d0&tw=2
- https://tenhou.net/3/?log=2022031702gm-0009-0000-4f53de8f&tw=0
- https://tenhou.net/3/?log=2022031703gm-0009-0000-5c4c5006&tw=3
- https://tenhou.net/3/?log=2022031703gm-0009-0000-ece01a6d&tw=1
- https://tenhou.net/3/?log=2022031704gm-0009-0000-aebd15e5&tw=3
- https://tenhou.net/3/?log=2022031704gm-0009-0000-95db02d1&tw=1
- https://tenhou.net/3/?log=2022031704gm-0009-0000-b8335477&tw=3
- https://tenhou.net/3/?log=2022031704gm-0009-0000-2bc9c5d8&tw=3
- https://tenhou.net/3/?log=2022031705gm-0009-0000-d4a0bc51&tw=1
- https://tenhou.net/3/?log=2022031705gm-0009-0000-dc10726e&tw=3
- https://tenhou.net/3/?log=2022031706gm-0009-0000-4fdc56d8&tw=1
- https://tenhou.net/3/?log=2022031706gm-0009-0000-bf907225&tw=2
- https://tenhou.net/3/?log=2022031707gm-0009-0000-ad4fb5c5&tw=2
- https://tenhou.net/3/?log=2022031707gm-0009-0000-ab069a11&tw=3
- https://tenhou.net/3/?log=2022031708gm-0009-0000-ae5097c0&tw=2
- https://tenhou.net/3/?log=2022031708gm-0009-0000-869765f9&tw=1
- https://tenhou.net/3/?log=2022031708gm-0009-0000-b4fb8b5a&tw=2
- https://tenhou.net/3/?log=2022031709gm-0009-0000-082a5602&tw=3
- https://tenhou.net/3/?log=2022031709gm-0009-0000-056c04b9&tw=3
- https://tenhou.net/3/?log=2022031710gm-0009-0000-1828d263&tw=0
- https://tenhou.net/3/?log=2022031710gm-0009-0000-a10263e7&tw=2
- https://tenhou.net/3/?log=2022031710gm-0009-0000-fbbb665a&tw=0
- https://tenhou.net/3/?log=2022031711gm-0009-0000-7893a0f5&tw=2
- https://tenhou.net/3/?log=2022031711gm-0009-0000-bf473a6b&tw=2
- https://tenhou.net/3/?log=2022031712gm-0009-0000-f51f2608&tw=1
- https://tenhou.net/3/?log=2022031713gm-0009-0000-9f11a78f&tw=0
- https://tenhou.net/3/?log=2022031713gm-0009-0000-34301313&tw=3
- https://tenhou.net/3/?log=2022031713gm-0009-0000-789bb191&tw=3
- https://tenhou.net/3/?log=2022031714gm-0009-0000-b440c205&tw=2
- https://tenhou.net/3/?log=2022031714gm-0009-0000-b149e5e1&tw=0
- https://tenhou.net/3/?log=2022031714gm-0009-0000-47c5ba62&tw=2
- https://tenhou.net/3/?log=2022031715gm-0009-0000-affc24fc&tw=0
- https://tenhou.net/3/?log=2022031715gm-0009-0000-87e9194a&tw=3
- https://tenhou.net/3/?log=2022031716gm-0009-0000-4f8df4ad&tw=3
- https://tenhou.net/3/?log=2022031716gm-0009-0000-602d2c57&tw=0
- https://tenhou.net/3/?log=2022031717gm-0009-0000-ded71104&tw=2
- https://tenhou.net/3/?log=2022031717gm-0009-0000-904e03af&tw=2
- https://tenhou.net/3/?log=2022031718gm-0009-0000-e2420c54&tw=0
- https://tenhou.net/3/?log=2022031718gm-0009-0000-a3fbd606&tw=3
- https://tenhou.net/3/?log=2022031718gm-0009-0000-626b2aa5&tw=3
- https://tenhou.net/3/?log=2022031721gm-0009-0000-4c734847&tw=0
- https://tenhou.net/3/?log=2022031722gm-0009-0000-57c8b16c&tw=2
- https://tenhou.net/3/?log=2022031722gm-0009-0000-118a49c0&tw=0
- https://tenhou.net/3/?log=2022031722gm-0009-0000-daea8c1a&tw=2
- https://tenhou.net/3/?log=2022031723gm-0009-0000-4fb2d057&tw=3
- https://tenhou.net/3/?log=2022031723gm-0009-0000-490c9293&tw=2
- https://tenhou.net/3/?log=2022031800gm-0009-0000-5dda5881&tw=1
- https://tenhou.net/3/?log=2022031800gm-0009-0000-1606ccab&tw=3
- https://tenhou.net/3/?log=2022031801gm-0009-0000-2774efc5&tw=2
- https://tenhou.net/3/?log=2022031801gm-0009-0000-0e2b8936&tw=1
- https://tenhou.net/3/?log=2022031802gm-0009-0000-e8899c61&tw=1
- https://tenhou.net/3/?log=2022031802gm-0009-0000-0c3cc606&tw=1
- https://tenhou.net/3/?log=2022031803gm-0009-0000-7e46b2b1&tw=2
- https://tenhou.net/3/?log=2022031803gm-0009-0000-eed5a19d&tw=2
- https://tenhou.net/3/?log=2022031804gm-0009-0000-5ee9bc2d&tw=1
- https://tenhou.net/3/?log=2022031804gm-0009-0000-d3ecd804&tw=0
- https://tenhou.net/3/?log=2022031805gm-0009-0000-060e8cf1&tw=0
- https://tenhou.net/3/?log=2022031805gm-0009-0000-ccddff21&tw=0
- https://tenhou.net/3/?log=2022031806gm-0009-0000-13d284f9&tw=1
- https://tenhou.net/3/?log=2022031807gm-0009-0000-76b190f5&tw=1
- https://tenhou.net/3/?log=2022031807gm-0009-0000-214a5054&tw=0
- https://tenhou.net/3/?log=2022031807gm-0009-0000-442fb760&tw=2
- https://tenhou.net/3/?log=2022031808gm-0009-0000-45e9da01&tw=0
- https://tenhou.net/3/?log=2022031808gm-0009-0000-5988e369&tw=2
- https://tenhou.net/3/?log=2022031808gm-0009-0000-304ee771&tw=3
- https://tenhou.net/3/?log=2022031809gm-0009-0000-eae0a7fd&tw=1
- https://tenhou.net/3/?log=2022031810gm-0009-0000-d29253cf&tw=3
- https://tenhou.net/3/?log=2022031810gm-0009-0000-e1666f13&tw=2
- https://tenhou.net/3/?log=2022031811gm-0009-0000-e2678857&tw=0
- https://tenhou.net/3/?log=2022031811gm-0009-0000-c9b75306&tw=1
- https://tenhou.net/3/?log=2022031811gm-0009-0000-57b9f490&tw=1
- https://tenhou.net/3/?log=2022031812gm-0009-0000-d75e6ba1&tw=3
- https://tenhou.net/3/?log=2022031812gm-0009-0000-2b42e4ed&tw=0
- https://tenhou.net/3/?log=2022031812gm-0009-0000-fb9efba5&tw=3
- https://tenhou.net/3/?log=2022031813gm-0009-0000-890b0791&tw=1
- https://tenhou.net/3/?log=2022031814gm-0009-0000-846fb33b&tw=3
- https://tenhou.net/3/?log=2022031814gm-0009-0000-bd1d75e0&tw=0
- https://tenhou.net/3/?log=2022031815gm-0009-0000-710e116c&tw=0
- https://tenhou.net/3/?log=2022031815gm-0009-0000-2e945097&tw=1
- https://tenhou.net/3/?log=2022031816gm-0009-0000-9e0f1f8c&tw=1
- https://tenhou.net/3/?log=2022031816gm-0009-0000-afa71cb3&tw=0
所感
一般卓東南戦での二段のポイント配分は30p, 15p, 0p, -60pです。1戦あたりに獲得できるポイント期待値が2.78と低いことから、三段へ昇段するには4位率を下げる必要があります。やはり押し引きが課題と言えそうです。
おわりに
同卓していただいた皆様ありがとうございました。今後は強化学習を用いて麻雀AIを開発しようと考えています。
一人麻雀における和了確率を書き下す(4)
はじめに
今回はついに非復元抽出を想定して一人麻雀における和了確率を書き下します。これが本当の意味での一人麻雀です。非復元抽出を想定するとこれまで扱ってきた復元抽出よりも問題の難易度が上がります。当初は前回の解法を踏襲しようと試みたのですが私の計算能力不足のためそれが無理だったので、前回の「おわりに」で触れた手順少な目のルートを使って和了確率を導きます。
問題
向聴の手があってこのときの有効牌の枚数を枚、向聴のときの有効牌の枚数を枚、以降同様に定め聴牌のときの有効牌の枚数を枚とする。はじめ()に枚の牌があるとして巡目に和了している確率を求めよ。ただし一度捨てた牌は再び山に戻さないという非復元抽出を想定する。
解法
巡目に向聴である確率を、巡目に向聴である確率を、以降同様に定め巡目に和了している確率をとする。これらは以下の連立確率漸化式に従う。
(1)式を行列を使って書き直す。なお以降とする。
とすると
となる。(4)式を解くと
となる。ここでは下三角行列であるからも下三角行列でありその対角成分はの対角成分の積である。また下三角行列の固有値は対角成分であるがはすべて異なるからは対角化可能である。よって適当な対角行列と正則行列が存在して
のように書ける。(6)式より適当な係数を定めればは
と表せる。この係数を初期条件
によって定める。これは
と表せる。(9)式の行列をと表すことにする。はヴァンデルモンド行列式のように計算できて
である。これとクラメルの公式を使って係数は
と表せる。は余因子展開を使えば
と書ける。よって(11)式は
となる。ここで(7)式を整理する(に注意)。
また
なので、これを(14)式に代入して整理すると
となり解を得る。
補足
復元抽出との関係
最大値
はでとなる。
一人麻雀における和了確率を書き下す(3)
はじめに
これまで2回にわたって一人麻雀における和了確率を求めてきましたが、そこで扱ったのはそれぞれ一向聴と二向聴の手でした。今回は前回記事の最後で触れた一般の向聴の手を扱います。前回も述べたように行列を使った解法が見通しがよいので今回もそれを踏襲します。
問題
向聴の手があってこのときの有効牌の枚数を枚、向聴のときの有効牌の枚数を枚、以降同様に定め聴牌のときの有効牌の枚数を枚とする。はじめ()に枚の牌があるとして巡目に和了している確率を求めよ。ただし一度捨てた牌は再び山に戻すという復元抽出を想定する。
解法
巡目に向聴である確率を、巡目に向聴である確率を、以降同様に定め巡目に和了している確率をとする。また表記を簡単にするため有効牌を引かない確率としてを導入する。これらは以下の連立確率漸化式に従う。
(1)式を形式的に解くと
が得られるからを求めることにする。を除いた(1)式を行列を使って書き直す。
とすると
となる。(5)式を解くと
となるからを求めればよい。ここでの固有値はすべて異なるからは対角化可能である。のように対角化できるとするとである。よって適当な係数を定めればは
と表せる。この係数を初期条件
によって定める。これは
と表せる。(9)式の行列はヴァンデルモンド行列でありと表すことにする。ヴァンデルモンド行列式は
である。これとクラメルの公式を使って係数は
と表せる。は余因子展開を使えば
と書ける。よって(11)式は
となる。(8)式(13)式を(7)式に代入して整理すると
(14)式を(2)式に代入して計算するとは
となり解を得る。なお(15)式においてとなるため(2)式のの範囲の制限を削除した。
補足
対称性
任意のの置換に対して(14)式(15)式は不変である。
証明
と表すことにすると以下より成り立つ。
麻雀AI開発DL編(5)
はじめに
再び麻雀AIの評価を行います。これまでに私の開発したAI(以下、自AI)の一局戦vs Manueと東風戦vs Akochanによる評価を行ってきました。一局戦vs Manueでは平均順位においてManueよりも強いことを示せましたが、東風戦vs AkochanではAkochanの平均順位を下回りました。今回は東南戦に変更してvs Manueとvs Akochanの評価を行いました。結論から述べると、東南戦では平均順位においてManueとAkochan両方に勝ち越すことができました。
結果
東南戦vs Manue
- 自AI 1体 vs Manue 3体による東南戦500戦
- 自AIの平均順位: 2.092±0.096*1
成績詳細(自AI)
************************************************************* * Mjai Recoder Report (Mon 06 Sep 2021 12:30:01 PM UTC) * Player ************************************************************* Default footer is off. 試合数 -------- 500 局数 ------ 5339 和了率 -------- 0.257 自摸率 -------- 0.399 平均得点 ---------- 6597 平均失点 ---------- 6629 放銃率 -------- 0.097 立直率 -------- 0.167 副露率 -------- 0.395 順位 | 回数 ------+------ 1 | 201 2 | 126 3 | 99 4 | 74 平均順位 ---------- 2.092 流局率 -------- 0.240 流局時聴牌率 -------------- 0.413 平均最終持点 -------------- 30063 起家 | 回数 ------+------ 0 | 118 1 | 142 2 | 111 3 | 129
東南戦vs Akochan (1)
- 自AI 1体 vs Akochan 1体 vs Manue 2体による東南戦500戦
- Akochanのポイント配分: 90, 60, -60, -90 (デフォルト値)
- 自AIの平均順位: 2.254±0.094
- Akochanの平均順位: 2.316±0.098
成績詳細(自AI)
************************************************************* * Mjai Recoder Report (Wed 08 Sep 2021 11:41:47 PM UTC) * Player ************************************************************* Default footer is off. 試合数 -------- 500 局数 ------ 5300 和了率 -------- 0.253 自摸率 -------- 0.403 平均得点 ---------- 6382 平均失点 ---------- 6390 放銃率 -------- 0.110 立直率 -------- 0.174 副露率 -------- 0.378 順位 | 回数 ------+------ 1 | 152 2 | 153 3 | 111 4 | 84 平均順位 ---------- 2.254 流局率 -------- 0.190 流局時聴牌率 -------------- 0.424 平均最終持点 -------------- 28280 起家 | 回数 ------+------ 0 | 127 1 | 115 2 | 140 3 | 118
成績詳細(Akochan)
************************************************************* * Mjai Recoder Report (Wed 08 Sep 2021 11:40:24 PM UTC) * Akochan ************************************************************* Default footer is off. 試合数 -------- 500 局数 ------ 5300 和了率 -------- 0.207 自摸率 -------- 0.413 平均得点 ---------- 6878 平均失点 ---------- 6323 放銃率 -------- 0.128 立直率 -------- 0.187 副露率 -------- 0.353 順位 | 回数 ------+------ 1 | 156 2 | 132 3 | 110 4 | 102 平均順位 ---------- 2.316 流局率 -------- 0.190 流局時聴牌率 -------------- 0.368 平均最終持点 -------------- 24838 起家 | 回数 ------+------ 0 | 129 1 | 128 2 | 119 3 | 124
東南戦vs Akochan (2)
- 自AI 3体 vs Akochan 1体による東南戦500戦
- Akochanのポイント配分: 90, 45, 0, -135 (天鳳七段配分)
- Akochanの平均順位: 2.552±0.096
- Akochanの平均ポイント: -2.340
成績詳細(Akochan)
************************************************************* * Mjai Recoder Report (Sat 04 Sep 2021 09:15:57 PM UTC) * Akochan ************************************************************* Default footer is off. 試合数 -------- 500 局数 ------ 5409 和了率 -------- 0.180 自摸率 -------- 0.398 平均得点 ---------- 6805 平均失点 ---------- 5701 放銃率 -------- 0.129 立直率 -------- 0.173 副露率 -------- 0.351 順位 | 回数 ------+------ 1 | 109 2 | 131 3 | 135 4 | 125 平均順位 ---------- 2.552 流局率 -------- 0.148 流局時聴牌率 -------------- 0.331 平均最終持点 -------------- 22933 起家 | 回数 ------+------ 0 | 124 1 | 126 2 | 125 3 | 125
考察
- 東南戦vs Manueでの平均順位の信頼区間の上限値が2.5を下回っているため、自AIがManueより強いことが明らかになりました。
- 東南戦vs Akochan (1)の形式では自AIの平均順位はAkochanを下回っているものの、信頼区間が重なっているためAkochanより強いとは言えません。
- 東南戦vs Akochan (2)の形式ではAkochanの平均順位は2.5を上回っているものの、信頼区間の下限値が2.5を下回っているため自AIがAkochanより強いとは言えません。
- Akochanの成績詳細を見ると和了率と平均最終持点の割には平均順位が良いので持点ベースの押し引きが自AIより優れていると思います。
- 牌譜を見るとAkochanは対立直と対副露の押し引きが微妙なので自AIはその2点でAkochanより優れていると思います。
おわりに
Manueとの評価はもう十分でしょう。Akochanとの評価ではどちらが強いかの結論が出ていませんが、すでに自AIの持ち点ベースの押し引きが弱いという課題が見つかっているのでこれを放置して評価を続けようとは思っていません。また、どちらが強いのか結論するには4000戦近く必要なこともあって評価は当分しないつもりです。それで持ち点ベースの押し引きですが、打牌選択モデルの入力に各プレイヤの持ち点をすでに取り入れているので特徴量エンジニアリングによる改善は難しそうです。改善案は現在検討中です。以前の記事でも触れましたが強化学習を使えば改善できるのでしょうか。あとAkochanは東南戦より東風戦のほうが強い可能性があります。今までのところ東風戦でAkochanに勝ち越すことはできていません。東風戦でAkochanに勝ち越すには東風用のモデルを作成することが必要不可欠で、その上で持ち点ベースの押し引きの改善が必要になるのかもしれません。手間を考えると東風戦での評価をやらずに次の段階の強化学習へ進みそうです。今回で麻雀AIの開発と評価に一区切りつけることにします。
一人麻雀における和了確率を書き下す(2)
はじめに
前回の記事で一人麻雀の和了確率を扱いました。当初2回目を書く予定はなかったのですが、行列を使った解き方のほうが見通しが良さそうなのでこの記事を書くことにしました。また前回は一向聴の手だったので今回は二向聴の手を扱うことにします。
二向聴形の和了確率
二向聴の手があって一向聴になるのに必要な牌の枚数を枚、そこから聴牌するのに必要な牌の枚数を枚、そこから和了するのに必要な牌の枚数を枚とします。枚の牌があるとして、巡目に二向聴である確率を、一向聴である確率を、聴牌である確率を、和了である確率をとするとこれらは以下の連立確率漸化式で表せます。なお前回と同様に捨てた牌を再び引けるという復元抽出を想定しています。
ここで
とすると、
となります。(8)式を形式的に解くと
となるのでを求めればよいです。(5)式から(7)式を以下のように行列で表します。
(10)式よりとなります。ここではそれぞれ異なるので行列は対角化可能であり固有値はです。正則行列と対角行列が存在してが成り立つのでとなります。よってが得られます。は
なので
のように表せます。初期条件より各係数を決めると、
となります。よっては
これを(9)式に代入して計算するとは
となります。なお(13)式ではとなるのでの範囲の制限を削除しました。以上が求める和了確率です。
余談
以上の議論から一般に向聴の手の和了確率が以下であると予想できます。
実際にの場合で(14)式が正しいことを確認しています。の場合で(14)式が正しいのかは不明です。もし正しいかどうか証明できた方がいましたらぜひ教えてください。
おわりに
今回は行列を使った解法を説明しました。(12)式がについての対称式になっているのがわかりやすくていいですね。(14)式が正しいのかどうか気になるところですが、非復元抽出を想定した場合の和了確率もまたについての対称式になることがわかっています。その対称性を前面に押し出した表式も気になります。
一人麻雀における和了確率を書き下す(1)
はじめに
ここでは一人麻雀における和了確率を扱います。このテーマでよく見かけるのは、聴牌している手があってその有効牌の枚数を枚、壁牌の枚数を枚としたときに巡以内に和了する確率がで表せるというものですね。では一向聴の手が和了する確率はどのように表せるでしょうか?これは総和と組合せを使えば表せますが単純な形ではありません。ちなみに数値的に解く方法についてはこちらを読んでください。
聴牌形の和了確率
なぜ単純な形にならないかと言うと自摸が非復元抽出だからです。逆に言えば復元抽出、あるいは巡目が壁牌の枚数に対して無視できるほど小さいという仮定を設定すれば和了確率を単純な形で書くことができます。まずは聴牌形の場合で和了確率がどのように表せるのか確認してみましょう。聴牌形で復元抽出を仮定すると和了確率はとなります。非復元抽出の場合と比較して簡単になりましたね。
一向聴形の和了確率
次に本題の一向聴の手を扱います。一向聴の手があって聴牌するのに必要な牌の枚数を枚、聴牌してから和了するのに必要な牌の枚数を枚とします。例えば両面-両面一向聴牌の手ではとなります。巡目に一向聴である確率を、聴牌である確率を、和了である確率をとすると、これらは以下の連立確率漸化式で表せます。
ここでとすると、
となります。(6)式を形式的に解くと
となるのでを求めることにします。(5)式よりですがこれを(4)式に代入するとについての隣接三項間漸化式が得られます。後は定石に沿って計算するだけです。なおの場合との場合で分けて考えなければなりません。現実的に後者の場合はありえないのですが一応計算することにします。
の場合
(4)式と(5)式より
が得られます。これらを解くと
となります。(10)式から(11)式を辺々引きます。
整理して
が得られます。これを(7)式に代入して計算すると
となります。なお(14)式ではとなるのでの範囲の制限を削除しました。
最後にを計算します。
よって求める解は
です。
の場合
(4)式と(5)式より
が得られます。これを解くと
となります。両辺をで割ります。
とおくと
のように等差数列の形式に変形できます。これを解くと
となります。をに戻します。
これを(7)式に代入して計算すると
となります。なお(23)式ではとなるのでの範囲の制限を削除しました。
まとめ
とすると
と表せます。
麻雀AI開発DL編(4)
はじめに
今回も引き続き麻雀AIの評価を行います。前回まででManue相手には勝ち越せることが明らかになっているので、今回は別のAI Akochanを対戦相手に選びました。
AkochanはManueと同じくMjaiクライアントの一つですが、おそらく最強のMjaiクライアントだと思われます。開発者のcritter氏によると天鳳の段位で七~九段相当の強さだそうです。
麻雀AIのAkochanのコードを公開しました。https://t.co/apRcraJC52
— critter (@critter_Eng) 2019年9月8日
強さ的には、天鳳で七段〜九段という感じだと思います。 まだUIなどが無いのでプログラミングができる人でないと、使い方がわからないと思いますが、よろしければご使用ください。
それで対戦のルールですがこちらの論文を参考にしました。
試合の形式は東風戦で、参加者は私の開発したAI、Akochan、Manue 2体としました。また試合数はAkochanを使った初めての評価なので試しに500にしました。では、私の開発したAIとAkochanの成績を見ていきたいと思います。
成績
試合数が501になっていますが初回の試合で設定ミスがあり急遽やり直したためです。
考察
平均順位では私の開発したAIが2.334なのに対してAkochanが2.275なのでAkochanの方が優れていると言えます。試合数が500なので信用できるのか怪しいですが……。
私の開発したAIとAkochanとの特徴的な違いは順位分布でしょう。私の開発したAIの順位分布が1位 = 2位 > 3位 > 4位なのに対して、Akochanは1位 > 2位 > 3位 < 4位となっています。困ったことにどちらの順位分布が良いのかは一概には言えません。天鳳では順位ごとにもらえるポイントがあって、そのポイント配分によって理想的な順位分布が決まります。私の開発したAIは天鳳の鳳凰卓の牌譜を学習しているのですが、そこでのポイント配分は4位で失うポイントが1位で得られるポイントを上回っています。なので私の開発したAIのように極端に4位を避けるようなプレイスタイルは当然と言えるのかもしれません。次にAkochanと対戦するときはAkochanの設定ファイルを修正して鳳凰卓と同じポイント配分にしてみるべきなのかもしれません。ちなみに理想的な順位分布はSuphxのような1位 > 2位 > 3位 > 4位です。
あと気になる違いは平均得点です。Akochanの方が約400点高くなっています。Akochanの方が立直率が高く副露率が低いのでそれらの影響でしょう。この違いが順位分布に影響しているのかもしれません。
最後に、4位率が低くなるような打ち方、つまりラス回避は状況に応じて押し引きだったり立直判断だったりの基準を上手く変えられないとできないことです。これを実現するための手段が以前扱った期待最終順位なのですが、それを使わずしてラス回避ができていることに少し驚くとともに安心もしました。
特徴量に持ち点は入っているので期待最終順位を別に計算する必要はないのではないかとは思っていました。期待最終順位を計算しないのでよいのであれば簡単でいいですね。
おわりに
Akochan相手に善戦できているのでAI開発の終わりが見えてきたような状況です。もう少し調整できることや確認したいことがあるのでAIの評価は続きますが、そろそろ次にやることを考えたいです。ここで次にやることの案を挙げてみます。
- 特徴量エンジニアリング
- Transformer
- 強化学習
一つ目は特徴量エンジニアリングです。現状それなりに良さそうな組み合わせの特徴量を用意できていると思っていますが改善の余地はあると思います。
二つ目はTransformerです。画像認識の分野で従来のCNNではなくてTransformerが流行っているみたいです。Transformerを使うことで牌譜一致率を上げたり、学習にかかる時間を短縮したりできればいいなと思います。
三つ目は強化学習です。今回の評価でわかりましたが、AIのプレイスタイルは教師データの影響を強く受けます。麻雀は4人でやるゲームで対戦相手が3人いるわけですが、各相手の戦略によって自分がとるべき戦略は当然変わります。Manue相手の最適な戦略、Akochan相手の最適な戦略を求めるには教師あり学習ではなく、強化学習が適しているのではないかと思います。
余談ですがAIを公開するかどうかを現在検討しています。公開する際にはいい感じの名前を付けたいですね。