Neural MMO chalenge 2023というコンペに参加してました
https://www.aicrowd.com/challenges/neurips-2023-the-neural-mmo-challenge
賞金総額は$20K
強化学習は初挑戦だったので感想と、次はもっとこうしようという振り返りをまとめておきます
コンペの説明
AICrowdで開催されていたコンペで、MMO RPGをテーマに強化学習済みのエージェント達を競わせるゲームでした。
ゲームルールはそこそこ複雑なので後述
提出はPyTorchの.ptファイルでした
まだ結果は出ていませんが締切終わった時点では12位。
実際にエージェント達が動いている様子はこちらのDemoでみることができます
https://neuralmmo.github.io/client/
ゲームルール概要
ゲームルールの詳細はこちら
https://neuralmmo.github.io/beta/_build/html/rst/landing.html
- MMO世界での生き残りとタスクの遂行が目的です
- 自分のエージェントは8体マップ端にバラバラに初期配置される
- 他のプレイヤー所属エージェントや、NPC(MMOで言うモブモンスター)が配置される
- ご飯と水を確保しないと体力回復ができなかったり、餓死してしまったりというサバイバル的要素あり
- アイテムの採集と装備のクラフトをして強化する要素あり
- エージェントはクラフト系のスキルと攻撃系のスキルを別々にレベルアップする
- 作った装備などゲーム内マーケットでのアイテム売買の概念がある
- 食料になる木の実や、採集アイテムの木や鉱石はマップ内の決まった場所に一定サイクルでポップする
- マップ中央になるほど、より強力で敵対的なNPCが配置される
という感じ。プレイヤーが装備をクラフトして、プレイヤー感で流通できるタイプの昔の2D MMORPGを抽象化したような雰囲気です。
参加の目的
とりあえず強化学習自体をちゃんと触れる機会がなかったのと、家のゲーミングPCに環境を構築する機会になればいいなと思って参加。
後、賞金も欲しい。
振り返り
- WSL2を使った学習環境は比較的簡単にできて良かった。
- コードを書く環境としてWindowsがやっぱり慣れない、、、のでMacから書く形にした。最初はgitコミットを経由してやっていたがめんどうくさくなったので、fswatchとrsyncでmac上で更新したら勝手に同期するようにした。これでだいぶ快適になった。
- 学習用のコードを色々いじったが全然学習効果が出ない時期が続いて中々しんどかった。途中でめっちゃ餓死していることに気がついて、最初だけ移動を学習することに傾斜をかけた結果うまくいった。どうやら、食料のリスポーンが遅くエージェントがかなり移動し続けないとご飯を維持できなかった様子。ルールや設定値をしっかり読むのは大事でした。
- 夜中にPCをつけっぱなしにして寝てる間も学習させているのでPCがゲーミング色(およそ1680万色)に光るのが嫌で色々設定して消した。ただGPUだけまだ消し方が分からず光ってる。光らないゲーミングPCを売って欲しい。
- 割と問い合わせたらカジュアルに答えてくれた。やってる人も初心者歓迎の雰囲気なので、これから参加する人は初歩的なことでもどんどん聞いてみると良いと思う。
- 公式のドキュメントが間違ってたりして不要なリバースエンジニアリングがちょこちょこ必要だった。参加者は200くらい居たがサブミットは40チーム程度だったのはこの辺が原因っぽい。ここは早めに突破できて良かった。
次回に向けての改善
次回どんなコンペに参加するかわからないですが、もし時間を遡って同じコンペをやってたとしたらこういうことやっておけば良かったなという覚書
- 学習時間は限られているので、短い学習を回して早めのジャンプアップの探索にまずはフォーカスすべきだった。序盤で長時間回してもほとんど意味がなかった。今回で言うと序盤に移動し続ける学習に傾斜をかける点だった。
- 学習完了->計測->良いものを選定->Submit の流れを自動化できてなかった。上の短期間の学習をぐるぐる回すのにも必要
- サンプルコード中のイベントコードの意味や、変数の意味、取りうる値の範囲などが終盤までわかってないところがあった。これも最初にまとめて解決できたはず。
- 学習手法の更新。強化学習自体触れるのが初めてだったので手がつけられなかった。強化学習周りは、問題に伴って適用するべき学習手法が大幅に異なる気がする。大変。
- ネットワークの変更。pyTorchも触るのが初めてだったため設計方法も実装方法も手がつけられなかった。
あと次やりたいのはチームを組んでやる。
チームでやる時にはこの辺りを手分けできると強そうだという点
- ルールの詳細な把握と共有
- コードやイベントの意味、変数の意味や範囲の調査と共有
- 序盤のジャンプアップを探す探索
- パラメータチューニングの探索。これは何かツールを入れれば自動化して手分けできそう
- 別の学習手法の適用。手間はかかるが効果はギャンブルな気はする。
チームでやるに際してこの辺りを準備段階で整備してあると良さそうという点
- 各自の環境で学習を回してsubmitできる環境の構築と構築方法の共有
- WanDBを利用した学習状況の共有
感想など
難しかったですが当初の目論見通りご自宅に強化学習できる環境と一通り動かす知見や、足りない知識の確認ができたので、まぁ足掛かりはできたかという感想。
色々考えていじっても全然学習が改善されないのは中々辛い体験でしたが、想定が当たって一気に改善したりするのは面白かったので、他のコンペを探してもう少し挑戦してみたいと思います。