麻雀AI研究  mjxビルド (67レス)
1-

1: 2024/10/06(日)02:20 ID:0LGLgONj(1/3) AAS
有識者募集
38: 08/27(水)23:00 ID:0cqC6hj/(1) AAS
>>37
akagiはちょっと黒いよね

自前のデータセットがxml形式で使えなかったから
新しくこんなの使ってsuphxのデータ全部集めてみた

外部リンク:github.com

suphxだけでもデータ抽出めっちゃ時間かかるわ
全部やろうかと思ってたけどとりあえず2019年だけでやってみる

mortalのトレーニング始められたらまた連絡するよ!
39
(3): 03 08/29(金)01:07 ID:oWtn88Fd(1) AAS
xml形式のmjlogを変換するコード書いたことあるから貼っとく
mjai使っているから多分正しく変換できるはず。。。(あんまり確認してないけど)
時間があったら使ってみてー

外部リンク:github.com
40: 08/29(金)21:34 ID:E9hW9WB6(1) AAS
>>39
README の解説がめちゃくちゃ丁寧でありがたい
あと mjai は最新の Ruby だと問題あるのを初めて知った
41
(1): 08/30(土)12:02 ID:h7esdUVI(1) AAS
ちょっと相談なんだけど
mjai を Node.js とか Go に移植する需要ってあると思う?
それとも今は mjx の mjx_mjai_translater とか Mortal/libriichi の AkochanAgent みたいにシミュレーターにトランスレーターをかませば十分で
TCP/IP 通信のサーバーの需要自体がない?
42
(1): 09/01(月)15:55 ID:F1y2xxwf(1/2) AAS
>>39,40
それも使ってみたんだけどうまくいかなかった;;

外部リンク[2]:crates.io
外部リンク:github.com
外部リンク:github.com

どれでやっても
外部リンク:github.com
が機能しない

データセットは
外部リンク:qiita.com
外部リンク:tenhou.net
これどっちもで試してみたんだけどなあ
43
(1): 09/01(月)16:04 ID:F1y2xxwf(2/2) AAS
>>41
あんまどれがどういうメリットあるのか知識ないからわからないけど,
mjaiみたいなTCP/IP 通信のサーバーが他にもあったら使い勝手は良いと思うな
Node.jsは電脳麻雀との差別化が難しい気がするけど,一緒に使いやすくなると考えたらむしろ良いのかもしれない

とはいえ,開発の実用段階に行けてる人からしたらトランスレーター使うだけで良いのかもしれないね
mjxもmortalも大規模プロジェクトだし

mjxってビルド壊れる以前にインストールしてる人しか使えないと思ってたんだけど今も使えるの?
44
(1): 警備員[Lv.1][新芽] 09/01(月)20:12 ID:I/wadFgi(1) AAS
>>42
mjai-reviewer を使おうとしてたのか
あれは mjlog や mjson じゃなくて 天鳳牌譜エディタ形式の json を入力するみたい
少なくとも README の用例と src/main.rs を軽く見た限りはそうだと思う
45
(1): 09/03(水)23:20 ID:QUky5oVZ(1) AAS
>>43
ごめん mjx も TCP/IP 通信だった
gRPC を使ってるから mjai の JSON-RPC より速いってことみたい

通信の無駄を減らすなら Mortal や Kanachan みたいに同じプロセス内で処理を完結させるのが良いと思ってたけど、
AI クライアントを別マシンやコンテナに分離できる方がいいのかな?
クライアント間で使用する環境の競合 (ライブラリのバージョン違いとか) が発生しないとかのメリットが大きい?

自分も麻雀対戦シミュレーターを作ってみたいけど Mortal 方式にするか mjx 方式にするか悩むね
46
(1): 09/04(木)16:25 ID:Odu/Sve1(1) AAS
>>44
天鳳から持ってこれるのが,log.gzってやつで
log.gz→log→mjlog→xml→json→json.gz
って行こうとしてるんだけど,どっかでタグとか欠けてるのかツールが悪いのかxmlで止まってる

>>45
できるならもちろんmjxをなぞったほうがいいだろうけど,ビルド壊れてから全く触れてないから俺はmortalが現実的だと思ってるよ
47
(1): 09/04(木)17:24 ID:0wFxBCIG(1) AAS
mortalとakochanの違いってなんなんだろうか
akochanすぐビルドできて好きになっちゃうよ

deepwikiでみてみたら性能比較とか戦術変更とか結構研究用機能ついてていいね
48
(1): 警備員[Lv.1][新芽] 09/04(木)18:50 ID:BZCy/nim(1/2) AAS
>>46
認識合ってるか気になるからいくつか確認

1. 天鳳の log.gz の中にある HTML には観戦用の URL が複数入ってる
2. 観戦用の URL を一部変更すると mjlog のダウンロードができる
3. mjlog は拡張子が違うだけで中身は xml だから変換は不要 (強いて言うならファイル名の拡張子を変えるだけ)

ここまで認識合ってる?

phoenix-logs は log.gz からの牌譜 URL (log IDs) の抽出から mjlog (log content) のダウンロードまでサポートしてる

注意点としては
牌譜ダウンロードのセッション数がデフォルトだと 3 になってるから、最新の規約に合わせて(README に貼ってある X のポストを参照のこと) -t 1 を必ず指定すること
49
(1): 警備員[Lv.2][新芽] 09/04(木)19:07 ID:BZCy/nim(2/2) AAS
>>47
作者も思想も全く違う
むしろ同じなのは Mjai クライアントって点だけかも

Akochan は四人麻雀向けに補正した一人麻雀のゲーム木を探索してる
だから (あくまで近似だけど) 和了率や放銃率が出せる

Mortal はいわゆるディープでポンに近い
局面を丸ごとニューラルネットワークに入力して直接行動の価値を返す
ただしシャンテン数とか一人麻雀計算機の計算結果とかも追加で入力してる
計算は速いけど行動の価値 (Q 値) しか出ない
50
(2): 09/10(水)19:42 ID:kLykDnhy(1) AAS
ごめん,全く理解が足りてなかった
mjlogとxmlは同じなのか

>>48でいうところの1から間違ってるのかも

自分が持ってるやつ(天鳳から拾ったlog.gzを解凍した.log)添付するよ.
画像リンク

Qiitaとかでダウンロードリンク先探してるけど,.zipでも.log.gzでも中身はURL無し.logしか見つからない.数年前と管理変わったのかな?

とはいえ,
外部リンク:github.com
の一番下の
Validate that downloaded logs can be parsed
実行してみても2009年の牌譜全部正常だったんだ

phoenix-logsから牌譜ダウンロードしたら,圧縮されて読めないmjlogが取得されるんだけど,
それを解凍したxmlがこれ.本来の天鳳xmlと変わっちゃってるのかな?
外部リンク:89.gigafile.nu

このxmlを「phoenix-logs-master mjlog2json」で,jsonにしようとしたら,lobbyのタグがないって言われた
拡張子.mjlogにしても変わらなかった

>>49
助かる
akochanゲーム木なのか
動作いい感じだったからmortalじゃなくてもいいかと思ったけど,深層学習したいしやっぱりmortal頑張るしかないか
Q値しか出せないってのも改善ポイントとしてちょうどいい気するし
51: 09/10(水)19:46 ID:QjtmsNrC(1) AAS
書きながら文足したりしたから
読みづらくて申し訳ない
52
(1): 09/10(水)21:34 ID:HyEJtneI(1/2) AAS
>>50
もしかして個室の牌譜をダウンロードしようとしてる?
天鳳のサイトを確認したら

> ※sca=個室 / scb=段位戦 / scc=鳳凰卓(牌譜あり) / scd=雀荘戦 / sce=技能戦+琥珀卓(牌譜あり)

って書いてある
nodocchi のリストから推測すると
おそらくログに牌譜 ID がついてるのは鳳凰卓と一部の牌譜 (天鳳位, AI, 飛びが発生した) だけ

あとごめん
phoenix-logs は SQLite の DB に牌譜を保存する (.db) んだけど、そこから圧縮してない xml を出力する機能が見当たらない
フォークしてエクスポート機能を追加したものがあるから、そっちを使えば展開された xml が出てくる
外部リンク:github.com

自分はこのフォークをさらに三麻とか東風もエクスポートできるように改造して使ってたから
オリジナルにはエクスポート機能がないのを忘れてた

lobby 属性の件だけど、まったり麻雀の人のブログを見た感じ昔は lobby 属性がなかったっぽい?
外部リンク[html]:kmo2.cocolog-nifty.com

変換スクリプトでもそんなに重要なポイントじゃないと思うから
Go 要素に適当な loddy (段位戦なら "0") を追記しちゃえばいいかも (未検証)

というかその牌譜はどうなってるんだろう?
type は四鳳南喰赤だけど段位や rate は初期値で性別がロボット 名前も EXAMPLE
と思ったらサンプルファイルらしい 除外すればいいと思う
外部リンク:kyphd.github.io

> 2009/02/01 のファイルはサンプルのようなので除外している。
53
(1): 09/10(水)21:59 ID:HyEJtneI(2/2) AAS
Mortal の改造の話ならポリシーベースに改造した Mortal の話が興味深い
外部リンク:github.com

フォーク版の方の Discussions の内容を見ると企業から研究資金が出てたっぽい?
ラボで使ってた独自のコードはリポジトリには含まれてないらしい
54: 09/17(水)15:29 ID:Wd4cqur5(1/2) AAS
>>52
phoenix-logsフォーク助かる!一応自己流でやってたけど懸念要素だったからありがたい.

xmlにlobby=0追加したのもやってみたんだけど,動作しなかったんだよね.
でもこれが近道だと思うから,やり方変えてやってみる

牌譜?サンプル混じっててもphoenix-logs だとスキップしてくれそうだからどうだろう
log→db→xmlだから牌譜は確認出来なさそうなんだ
>>53
今までポリシーベース触ってたから興味深い.しかも自分が触ったことあるPPOだ
重みは価値ベースのほうから持ってこないといけないみたいだね.今やってるのが成功したらこっちに移行したいな
55
(2): 09/17(水)16:00 ID:Wd4cqur5(2/2) AAS
2009のデータでphoenix-logs フォーク使ってみたら「This DB has 58162 games in total」って出たんだけど
外部リンク:kyphd.github.io
の四麻の2009は58160だから最初の2つがサンプルっぽいね,取り除いた.
実行したら理解が追いついたよ.ありがとう.

中身見たけど,xmlコードの前に牌譜ID挟んでくるんだね.試しに天鳳で開いたけどほんとにサンプルだったわ.他のはちゃんと開けた.

この2009.xmlはこのあとどうすればいいんだろう
mjai-reviewerでjsonにできない気がするんだけども
56
(1): 09/17(水)18:31 ID:YeRNVIxT(1/2) AAS
>>55
mjai-reviewer で使ってるのはおそらく天鳳牌譜ビューア/エディタ形式の json だから変換が必要だね
調べたら変換ツールを自作してる人がいた
外部リンク:crates.io

xml から変換しなくても対局 ID を使って天鳳公式の json ダウンロード用の URL にアクセスしてもいいけど、
以前天鳳公式 X アカウントでそっちは CGI に負担がかかるとかポストしてたから前述のツールを使った方がいいかも

ところで何のために mjai-reviewer を使おうとしてる?
Mortal への入力は mjson 形式が必要だけども
トレーニングしたモデルの評価とか?
57
(1): 09/17(水)18:40 ID:YeRNVIxT(2/2) AAS
phoenix-logs を読んでたら内部の設計とかスクリプトの使い方とか色々気になるから
機能はほぼそのままに 1 から書き直したツールを作ろうと思う

できれば time.sleep() とかである程度ダウンロード速度を調整したいけど、
天鳳公式にレートリミットを問い合わせるのってアリだと思う?
藪蛇かな?
58: 09/21(日)20:24 ID:wyqEm1q5(1/2) AAS
天鳳の牌譜について勘違いしてたことを訂正しとく

* API 経由で牌譜が取得できるのは
* 鳳凰卓
* 役満和了発生(四麻のみ、全部の卓を含む)
* 公認 AI (一部の牌譜は取得できない、条件不明)
* 天鳳位の全牌譜は mjlog を圧縮した zip をサイトからダウンロードできる

飛びがある牌譜が公開されるのかと思っていたけど、役満があると誰かが飛ぶことが多いだけだった
59: 09/21(日)20:26 ID:wyqEm1q5(2/2) AAS
>>55
2009.xml だけど --strip オプションを指定して個別の xml に出力した方がいいと思う
一つのファイルにまとめた方が読み込み速度は速いけど、取り回しが悪くなると思う
60
(1): 09/22(月)09:23 ID:a6uPzlMg(1) AAS
>>56
たしかに牌譜ID取得できたならxmlにこだわらなくてもいいね

mjlog2jsonなんだけど,これ牌譜IDがあると読み込んでくれないんだ
>>50 ではlobbyが無いってこれに言われたんだよね
一回--stripで個別にしてから牌譜ID消してやってみるけどたぶんまたlobby無いって言われそう

mortalってmjsonか
jsonと勘違いしてた.mjsonの場合だとどう作るの?

>>57
1から書き直せるならすごい助かる
天鳳ダウンロード速度うるさいし問い合わせるに越したことはないかもね
外部リンク:x.com
これ見るに1セッションならなんでもいいのかもしれないけど
61
(1): 警備員[Lv.1][新芽] 09/22(月)10:19 ID:9RpjStku(1/5) AAS
>>60
mjlog から mjson への変換は >>25>>39 のツールで変換できると思う
62
(3): 1 ◆Q0YRMrCAIo 09/22(月)11:43 ID:0yT6RsXj(1) AAS
>>61
教授からそんなことしてないでルールベースでいいから1から自分でAIと環境とプロトコル作れって言われたんだがそこまでやってることおかしいかね

基礎の知識が必要なのはごもっともだけども機械学習入ったらさすがに自分で作れんしなって思うんやが

進捗報告で言われたことやってないと見放す言われたからしばらくmortalの話薄くなりそうで申し訳ない
せっかく付き合ってくれてたのに
愚痴きかせるはめになってしまったのも申し訳ない😭

とりあえずmjai.appに乗っけれるAI1から作ろうかな
63
(1): 警備員[Lv.4][新芽] 09/22(月)12:40 ID:9RpjStku(2/5) AAS
>>62
学生さんでしたか
分野はやっぱり機械学習?

麻雀の環境・エージェントに関してはコーナーケースとかバグ取りが超大変だから自力実装はオススメできない
貴重な研究時間を浪費するのは勿体ない

環境に関しては
mjx は最新の Python とかだとビルドできないらしいから、Mortal とかの既存実装を使った方がいいと思う
それか山岡忠夫さんの cmajiang を使うのもいいかも
他には Kanachan v2ブランチの src/simulation は Kanachan の AI にべったりした実装だけど検討する価値はありそう
雀魂段位戦の牌譜を 2 億局使って動作検証済みらしい

自分は専門家じゃないから AI についてはなんとも言えないけど、Mortal の特徴量設計は参考になると思う
あと山岡忠夫さんがブログで麻雀 AI の設計についても書いてたはず
64
(1): 警備員[Lv.4][新芽] 09/22(月)12:47 ID:9RpjStku(3/5) AAS
>>62
オレオレプロトコルを作っても既存の AI (manue とか Akochan) と比較するときに結局 mjai プロトコルへの変換が必要になるから、最初から mjai プロトコルに対応した実装を持ってきた方がいいと思う

あと研究なら各作者に相談してみるとかはどう?
たとえば mjai.app 作者の smly (小嵜 耕平) さんは機械学習の専門家だし
65
(1): 警備員[Lv.5][新芽] 09/22(月)13:14 ID:9RpjStku(4/5) AAS
>>62
ルールベースの AI でいいなら電脳麻将もいいかもね
環境・エージェント・プロトコル全部揃ってるし AI 同士の自動対戦ツールもついてる

ただ、Node.js だから実行速度が遅いのは実験に影響するかも
66: 09/22(月)14:42 ID:9RpjStku(5/5) AAS
訂正: Kanachan の雀魂牌譜での動作検証は 1 億局だった
外部リンク:x.com
67: 1 ◆Q0YRMrCAIo 09/22(月)14:45 ID:VuiZRCwA(1) AAS
>>63
機械学習専攻にしてます
もっというと強化学習メインです

やっぱりmortalとかから発展させるほうがいいよね
従わないなら見放すとか言ってきたけどどういうものか伝えて説得する方向のほうが良いかな

cmajiang使ってはいたけど中身は見てないや
あれかなりすごそうだよね

Kanachanは初見だ
ありがとう、コード覗いてくるよ

>>64
やっぱりそうだよね
自分のやつなんて限界あるし発展性のあるmjaiに繋げるべき

なんとなく作者さんたちに連絡取るの避けてたけどもう1年近く研究しててこれだからさすがに連絡取るべきか

>>65
たしかにルールベースなら電脳麻雀でいいじゃんか
前に電脳麻雀触ってたときはルールベースで学習できないから意味ないなで蹴ったのに方向性わからなくなってくる
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.558s*