見出し画像

【Kaggle】Lux AIコンペに参加し銅メダルを獲得しました

はじめに

Kaggleで開催された「Lux AI」コンペにチームで参加し、1,178チーム中83位となり銅メダルを獲得しました。本記事では、Lux AIコンペの概要と私たちの取り組み内容について紹介したいと思います。

Lux AIコンペの概要

Lux AIは、2つのエージェントを戦わせて、どちらが自身の街を大きくすることができるかを競い合うシミュレーションコンペです。すべてのルールを説明することは難しいため、今回は代表的なルールや環境などについて記載します。

環境

Luxの環境は以下に示すように2次元のグリッド状で表現されています。Luxではこれをマップと呼び、対戦毎に12×12、16×16、24×24、32×32マスのいづれかのマップが選択され、マップ上でエージェントを動かすことになります。

マップ(出典:Kaggleページ

上記以外にも環境は以下のような特徴があります。

  • 環境は昼と夜に分かれている

  • 昼は街を建設したり、街を維持するための資源を収集したりする

  • 夜は街を維持するために収集した資源を消費する

  • 資源が枯渇した場合には街は消滅する

  • 最後に残っている街の数が大きい方のチームの勝ち

操作オブジェクト

Unit
ユニットには作業員とカートの2種類があります。作業員とカートを操作することによって、街を移動したり、資源を運搬したり、街を建設したりすることができます。

Citytile
自プレーヤーの持っているCitytileに応じて、作業員やカートを増やしたり、資源の発掘に必要な研究ポイントと呼ばれるものを増やすことができます。

資源

資源にはWood、Coal、Uraniumの3種類があります。資源は街を維持するための資源として利用するのですが、より燃料値の高いUraniumは採取するために、研究ポイントを多く貯める必要があります。一方で、Woodは研究ポイントを必要としませんが、燃料値は低く設定されております。

資源(出典:公式ドキュメント

Cooldown

UnitとCitytileは行動をとった後にCooldown、つまり何も行動ができないターンが発生してしまいます。そのため、戦略的にあえて何もしないという行動を取ることも考えなければいけません。

取り組み内容

今回私たちのチームが最終的に選択したのは模倣学習によるアプローチです。模倣学習とは、強いエージェントの対戦ログを教師データとして用いることにより、強いエージェントの行動を模倣することができる手法となります。模倣学習で強いエージェントを作ることができれば、そのエージェントを事前学習済みのモデルとして強化学習に用いるといったことも可能となります。

模倣学習のベースコード
模倣学習のコードは「Lux AI with Imitation Learning」を参考にさせていただきました。こちらのノートブックはコンペで1位であったチームの対戦ログを32×32×20の疑似画像として表現し、CNNベースのモデルで各Unitの行動を予測させるというものでした。各チャネルでは、作業員や街の位置といった場面によって変わるものや、マップサイズや試合全体の消化状況といったグローバルな特徴量が表現されていました。

CNNモデルをUNetに変更
上述のCNNベースのモデルだと、マップサイズや試合全体の消化状況といったグローバルな特徴量がCNNの層を経ることによって適切に情報を伝播することができないといった問題がありました。そこで、「UNet for imitation learning」というディスカッションにて、モデルのアーキテクチャをUNetにし、グローバルな特徴量は最下層に入れることによって、情報の劣化を防ぐ手法が紹介されていました。非常に面白い内容であったため、私たちのチームでもこの手法を取り入れました。

UNetの構造(出典:UNet for imitation learning

特徴量の追加
味方と敵の街の数の特徴量を追加することによって、街をどれだけ建設できているのか、敵との差はどれくらいあるのか、といったことが分かるようにしました。その他にも、各資源があとどの程度マップに残っているのか、研究ポイントや街の数が相手プレーヤーとどの程度差があるのか、といった特徴量を試してみましたがスコアを改善させることはできませんでした。

Lux AIコンペに参加して学んだこと

私たちは今までにシミュレーションコンペに参加したことがなかったため、非常にチャレンジングなコンペでした。このようなコンペに参加してみて、学んだことについて簡単にまとめたいと思います。

強化学習の難しさ

本コンペを通じて強化学習の基礎を理解することはできたのですが、同時に以下のような強化学習の難しさも見えてきました。
①ゼロから学習させてもなかなか強いエージェントを作れない
②今回は本コンペ用のGYM環境が用意されていましたが、ビジネスではGYM環境は独自で用意する必要がある
事前学習に模倣学習を使うなどの工夫をしないと、強化学習だけでビジネスの課題を解決するのはまだまだ難しいと感じました。

模倣学習の基礎理解

本コンペを通じて模倣学習の基礎を理解することができました。行動ログを疑似画像とみなしCNNベースのモデルを用いることで、一定レベルのエージェントを作ることができました。今回のコンペでは試せなかったのですが、CNNベースのモデルを使うことによって、データ拡張といった画像処理で用いられるTipsを使うことができたり、強化学習の事前学習済みモデルとして活用することもできるため、できることの幅が広がると感じました。

まとめ

本記事では、Lux AIコンペの概要と取り組み内容、そこから学んだことについて説明しました。今回のLux AIコンペは「Lux AI Season 1」となっておりますので、Season 2が今後開催されると思われます。今回の反省点を活かし、Season 2ではより上位を狙えるようにしたいと思います。

この記事が気に入ったらサポートをしてみませんか?