Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TransServerの設計方針 #28

Open
sotetsuk opened this issue Mar 12, 2021 · 2 comments
Open

TransServerの設計方針 #28

sotetsuk opened this issue Mar 12, 2021 · 2 comments

Comments

@sotetsuk
Copy link
Contributor

sotetsuk commented Mar 12, 2021

基本的には、

  • RandomAgent (mjxproto::Agent)
  • ActiveGame

の間の子みたいな雰囲気で、

  • mjx のゲームクライアントとの通信は take_action(observation) を通して行い
  • mjaiTcpClientGame との通信を do_action を通して行う。

mjx のゲームクライアントは、同じポートの mjx.GrpcAgentClient をプレイヤー4人を使う。

class TransServer(mjx.Agent):

    def __init__(self):
        self.players = []  # 同じポートで、TcpClientGame4つと繋がっている
        self._mjx_event_history = []
        self.new_mjai_actions = []
        self.next_mjx_actions = []  # take_actionの返り値で返されるべき値。size = 4。プレイヤー毎にとるべきアクションが入っている。
        
    def do_action(self):
        pass  # 全く同じ実装
        
    def step(self, new_event):
        # do_actionの呼ばれ方がActiveGame内で11パターンあったので、それらを模倣する
        if new_event.type == "xxx":
            pass
        elif new_event.type == "xxx"
            pass
        else:
            pass
        
    def update_next_actions(self, response):
        if response is None:
            return  # do nothing
       else:  # この中で各ユーザのアクションに対してmjaiのアクションからmjxのアクションへの変更関数を呼ぶ(ToMjxAction)
           pass
        
    def get_curr_player(self, observation):
        pass
        
    def observe(self, observation):
        # game id が連続しているかのassertionも加える
        # self._mjx_event_historyと照合して、self.mjai_new_actionsを更新する。mjaiのactionの方が種類が多い(ゲーム開始、局開始等)
        pass  
        
    def take_action(self, observation):  # mjx.Agentの関数を継承して実装
        self.observe(observation)
        curr_player = self.get_curr_player(observation)
        response = none
        for mjai_action in self.mjai_new_actinos:
            response = self.do_action(mjai_action)
        self.next_mjx_actions = self.update_next_actions(response)
        return self.next_mjx_actions[curr_player]
@nissymori
Copy link
Collaborator

備忘録ポンチ絵
IMG_0887

@nissymori
Copy link
Collaborator

nissymori commented Mar 12, 2021

全体の方針
mjaiをimportして使えるところは使っていく。
protoのフォーマットが変わる可能性があるのでテストをしっかりと書く。

実装するもの

  • mjaiClientと接続するためのServerを立てて、TCPPlayerを立ち上げる関数
  • observe
    • differenceeventhistoryとの差分を出力する関数
    • observation_to_mjai_actionsその差分からmjaiのactionに変換する関数(actionが複数になる場合もある)
  • step
    • do_action
      • respond_to_action(action)→既存のものでOK
      • action_in_view(aciton)
  • updata_next_actions
    • MjaiActToMjxAct()mjaiのactionからmjxのアクションへ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants