Closed sotetsuk closed 2 years ago
現状は internal::State の次の2つのメソッドで add_legal_action をしている。
internal::State
add_legal_action
CreateObservations
CreateStealAndRonObservations
上記2つのメソッドの中で条件分岐に使われているメソッド・メンバは次のように大量にある。 が、これらをstaticにして、リーガルアクションを加えるところをstaticにすれば使えるか。
IsRoundOver
IsGameOver
IsDummySet
LastEvent().type()
LastEvent().who()
IsFirstTurnWithoutOpen
hand(who).CanNineTiles()
hand(who).IsCompleted()
CanTsumo(who)
hand(who).PossibleOpensAfterDraw()
IsFourKanNoWinner()
CanRiichi()
wall_.HasNextDrawLeft
CanRon(stealer, tile)
player(who).machi
player(who).discards
player(who).missed_tiles
IsFourKanNoWinner
obs = mjx.Observation.from_json(json_str, insert_legal_actions=True)
適当なstateからobservationを作って、jsonからlegal_actionを抜いて、再構成したものが同じかを確認する
現状は
internal::State
の次の2つのメソッドでadd_legal_action
をしている。CreateObservations
CreateStealAndRonObservations
上記2つのメソッドの中で条件分岐に使われているメソッド・メンバは次のように大量にある。 が、これらをstaticにして、リーガルアクションを加えるところをstaticにすれば使えるか。
IsRoundOver
IsGameOver
IsDummySet
LastEvent().type()
LastEvent().who()
IsFirstTurnWithoutOpen
hand(who).CanNineTiles()
hand(who).IsCompleted()
CanTsumo(who)
hand(who).PossibleOpensAfterDraw()
IsFourKanNoWinner()
CanRiichi()
これはwall_.HasNextDrawLeft
に依存していて今のままでは使えないCanRon(stealer, tile)
これもplayer(who).machi
player(who).discards
player(who).missed_tiles
に依存していてそのままでは使えないIsFourKanNoWinner