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

ブラウザでプレイできるエージェントを作る #1012

Open
OkanoShinri opened this issue Oct 27, 2021 · 2 comments
Open

ブラウザでプレイできるエージェントを作る #1012

OkanoShinri opened this issue Oct 27, 2021 · 2 comments

Comments

@OkanoShinri
Copy link
Collaborator

#972 と同じようなものを、ブラウザ上で操作できるようにする。
すなわち、盤面と選択肢を表示し、入力を受け取ってゲームを進める動きを作る。

@OkanoShinri
Copy link
Collaborator Author

OkanoShinri commented Oct 27, 2021

困りごと

import mjx

agents = {
    "player_0": "127.0.0.1:9091",  # human control
    "player_1": "127.0.0.1:9090",
    "player_2": "127.0.0.1:9090",
    "player_3": "127.0.0.1:9090"
}
mjx.run(agents, 1, 1, 1)
  • mjx.run()の中ではenv.step()的なものが終了まで繰り返し実行されていて、その中では各プレイヤーのact()が呼ばれている(人間がプレイできるエージェントを作る #972 ではプレイヤーのactをオーバーライドした)
  • 今回のブラウザでの処理の流れは
     盤面表示->選択肢入力->入力受け取り->処理->処理結果を盤面表示(最初に戻る)
    なので、GETなりPOSTなりでリクエストが来たときに人プレイヤーのact関数を呼ぶことができれば話が早い。例えば
    1. (COMプレイヤーのactを実行する)
    2. その結果のobservationが人プレイヤーのactの引数として渡されるので、これを可視化&選択肢表示する(これはvisualizerと同様にしていけるはずだが、プレイヤーのact内で行うのかflaskのmain.py内で行うのかが未定、前者はPOSTとかの受け取り方が分からない・後者はobservationデータの渡し方が分からない)
    3. 送信ボタンが押されると入力結果がPOSTとかでくるので、これをもとにプレイヤーのActionをreturnしてact()を抜ける(この連携も、flaskで受け取ったデータをactで使う方法が分からない)
    4. COMプレイヤーのactに戻る。これをゲーム終了まで繰り返す
  • 最も困るのは、プレイヤーのactの中身をいじる方針だと、HTTPリクエストを受け取る方法が分からないこと(flaskはそのmain.pyでしか動かず、HTTPリクエストを受け取ることはできるが、人プレイヤーのactを実行することはできない)

現状こんな感じです。この理解で合っているでしょうか。
@sotetsuk

@OkanoShinri
Copy link
Collaborator Author

https://docs.python.org/ja/3/library/queue.html
でセグフォが解決できるかも

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

1 participant