Equim-chan / Mortal

🚀🀄️ A fast and strong AI for riichi mahjong, powered by Rust and deep reinforcement learning.
https://mortal.ekyu.moe
GNU Affero General Public License v3.0
929 stars 118 forks source link

多面听立直,无法选择立哪张 #6

Closed m4rdukkkkk closed 2 years ago

m4rdukkkkk commented 2 years ago
{"type": "start_game"}
{"type": "start_kyoku", "bakaze": "E", "kyoku": 3, "honba": 0, "kyotaku": 0, "oya": 0, "dora_marker": "9s", "scores": [19800, 26300, 36000, 17900], "tehais": [["?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"], ["1m", "8m", "9m", "1p", "3p", "5p", "6p", "7p", "3s", "6s", "7s", "8s", "N"], ["?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"], ["?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"]]}
{"type": "dahai", "actor": 2, "pai": "2m", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "N", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "W", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "2p"}
{"type": "dahai", "actor": 1, "pai": "N", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "9s", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "P", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "S", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "E"}
{"type": "dahai", "actor": 1, "pai": "E", "tsumogiri": true}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "4m", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "C", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "C", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "4s"}
{"type": "dahai", "actor": 1, "pai": "1m", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "7m", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "C", "tsumogiri": true}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "E", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "P"}
{"type": "dahai", "actor": 1, "pai": "P", "tsumogiri": true}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "9m", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "7s", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "8s", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "9s"}
{"type": "dahai", "actor": 1, "pai": "8m", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "P", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "F", "tsumogiri": true}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "1p", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "N"}
{"type": "dahai", "actor": 1, "pai": "9m", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "E", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "S", "tsumogiri": true}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "1p", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "1m"}
{"type": "dahai", "actor": 1, "pai": "1m", "tsumogiri": true}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "E", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "7s", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "1m", "tsumogiri": true}
{"type": "tsumo", "actor": 1, "pai": "8m"}
{"type": "dahai", "actor": 1, "pai": "8m", "tsumogiri": true}
{"type": "pon", "actor": 3, "target": 1, "pai": "8m", "consumed": ["8m", "8m"]}
{"type": "dahai", "actor": 3, "pai": "7m", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "S", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "6p"}
{"type": "dahai", "actor": 1, "pai": "N", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "C", "tsumogiri": true}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "6s", "tsumogiri": true}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "4s", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "1s"}
{"type": "dahai", "actor": 1, "pai": "6p", "tsumogiri": false}
{"type": "tsumo", "actor": 2, "pai": "?"}
{"type": "dahai", "actor": 2, "pai": "3s", "tsumogiri": true}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "6m", "tsumogiri": true}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "2s", "tsumogiri": false}
{"type": "tsumo", "actor": 1, "pai": "3m"}
{"type": "dahai", "actor": 1, "pai": "3m", "tsumogiri": true}
{"type": "pon", "actor": 3, "target": 1, "pai": "3m", "consumed": ["3m", "3m"]}
{"type": "dahai", "actor": 3, "pai": "3p", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "4p", "tsumogiri": false}
{"type": "reach", "actor": 0}
{"type": "tsumo", "actor": 1, "pai": "5pr"}
{"type": "dahai", "actor": 1, "pai": "9s", "tsumogiri": false}
{"type": "chi", "actor": 2, "target": 1, "pai": "9s", "consumed": ["7s", "8s"]}
{"type": "dahai", "actor": 2, "pai": "F", "tsumogiri": false}
{"type": "tsumo", "actor": 3, "pai": "?"}
{"type": "dahai", "actor": 3, "pai": "7p", "tsumogiri": false}
{"type": "tsumo", "actor": 0, "pai": "?"}
{"type": "dahai", "actor": 0, "pai": "1m", "tsumogiri": true}
{"type": "tsumo", "actor": 1, "pai": "2s"}
{"type": "dahai", "actor": 1, "pai": "5p", "tsumogiri": false}
{"type": "reach", "actor": 1}
{"type": "hora", "actor": 0, "target": 1, "deltas": [5500, -4500, 0, 0], "ura_makers": []}
{"type": "end_kyoku"}

只有立直选项,没有选择出哪张立直宣言牌

image

944371430 commented 2 years ago

如果我没有理解错的话,Mortal将立直前后作为两个不同的状态看待。因此,你应该执行【立直】动作,然后将该状态作为输入传递给Mortal,它将告诉你该状态下的动作——即立直之后应该打哪张牌。这样的处理方式与天凤相似而明显区别于雀魂。作为另外一个例子,鸣牌动作也是类似的,而akochan则将鸣牌后的动作也展示出来。一般来说,检讨牌谱时往往也想要知道鸣牌/立直后的动作,使用一个trick,这对Mortal来说是可以实现的。可惜我并不知道akochan的处理方式,或许akochan内部对状态的处理也是类似的,而在输出时使用了这个trick。

m4rdukkkkk commented 2 years ago

如果我没有理解错的话,Mortal将立直前后作为两个不同的状态看待。因此,你应该执行【立直】动作,然后将该状态作为输入传递给Mortal,它将告诉你该状态下的动作——即立直之后应该打哪张牌。这样的处理方式与天凤相似而明显区别于雀魂。作为另外一个例子,鸣牌动作也是类似的,而akochan则将鸣牌后的动作也展示出来。一般来说,检讨牌谱时往往也想要知道鸣牌/立直后的动作,使用一个trick,这对Mortal来说是可以实现的。可惜我并不知道akochan的处理方式,或许akochan内部对状态的处理也是类似的,而在输出时使用了这个trick。

谢谢 需要传入立直状态

{"type": "reach", "actor": 1}

之后可以看到推荐出牌