ランド研究所の「機械学習による航空支配」を実装する（その2）：1次元問題について

過去記事へのリンクは最下段にあります。

（その１）では、２０２０年に発刊された以下のランド研究所のレポートの概要を纏めました。（その２）では、同レポートから、１次元（１D）問題について纏めます。

[Air Dominance Through Machine Learning: A Preliminary Exploration of Artificial Intelligence–Assisted Mission Planning](https://www.rand.org/pubs/research_reports/RR4311.html)

以下、Figure ＊.＊、Table ＊.＊ とあるのは、ランド研究所のレポートからの抜粋です。表＊ とあるのは私が作成したものです。

#1. １次元（1D）問題

Table 2.1 に示したように、1D 問題での登場人物は、Blue Team が Fighter １機と Jammer １機のパッケージ、Red Team が SAM（Surface to Air Missile）１基です。また、敵のSAMの能力は正確に判明している（disclosed）という前提です。（今回はあくまで原理検証ですが、将来的にはここに不確定要因を入れて学習させると、少し現実的になり面白いかもしれませんね）。
 
![Table2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/3b498ed7-d5b4-46b1-1b56-b8c1764d018d.png)

最初に、Figure 2.1 に示すような状況を考えます。SAM の射程（sam.firing_range）が、Fighter 搭載ウェポンの射程（fighter.firing_range）よりも長いので、SAM が有利になります。特に、このレポートでは SAM や Fighter 搭載ウェポンは完璧と仮定しているので、Figure 2.1 のような場合、Fighter に勝ち目はありません。（話を簡単にするために、SAMのミサイル速度、Fighter搭載ウェポンの速度は ∞ と仮定しています）。

![figure2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/090b6328-c046-6aac-a4fd-336a0435438a.png)

しかしながら、Figure 2.2 に示すように、SAM の射撃用レーダを妨害する Jammer 機を、適切なタイミングで適切な位置に配置すると、SAM の射程を縮退できる（この絵では、sam.firing_range:100km → sam.jammed_firing_range:70km）ので、Fighter が勝利を収めることができます。

![figure2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/33600bd1-42d7-157f-eda4-27f5c4325edd.png)

ここでのミッション・プランニング用 AI の目的は、SAM の位置（sam.offset）、Fighter の射程（fighter.firing_range）、SAM の射程（sam.firing_range）、Jammer の有効レンジ（jammer.jam_range）などを受け取って、Fighter と Jammer を進出させる適切なタイミングと距離 (fighter.ingress, jammer.ingress) をプランニング（予測）することです。

問題は１次元なので、すべてのシナリオ・イベントは Figure 2.1 や 2.2 のように一直線上で発生します。航空機には高度もあるのですが、高度は一定としているので、便宜的に問題は１次元として取り扱えます。

各シナリオは、```ミッション条件```となる環境変数（Table 2.2）と、```ミッション・プラン```（又はアクション）となる学習変数（Table 2.3）で構成されます。AIは、ミッション条件を受け取って、ミッション・プランを出力します。Table2.3 のままでは見難いので、それを翻訳したのが表１ です。ただし、レポートを読んだ限りでは、表１ に書いてあることすべてを学習させているわけではないようです。特に、反転して初期位置に戻る部分は実装していない気がします。（学習すべきと書いといて、ズルいんじゃないのと思うのは私だけ？）。

また、Table2.2を信用してそのまま使うと、ミッション開始時点でミッション終了になって処理に困る状況が発生するので、実装時には少し工夫が必要です（多分、Table がいい加減な作り）。

![Table2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/8cfd9c0e-723e-a2dd-752a-89d32c1b82f8.png)

![Table2-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/5f19cef6-34a8-899c-a7ab-596308a2b10c.png)

表１![表2-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/dc29a178-29f5-2218-49b7-e8e590ab231a.png)

学習変数（ミッション・プラン）の範囲は Table 2.4 で制限しています。

![Table2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/93213cc3-f37d-eb05-3435-d86b99fa3cf0.png)

#2. 機械学習アプローチ

AI は、ミッション条件が与えられた時に、ミッションが成功するプランを作成するようにトレーニングします。レポートでは、DQN と conditional GAN を適用しています。

(1) DQN
　- 状態（というより観測）：fighter, jammer, SAMの位置
　- アクション：前進、ストップ（後退は入れていないようです）

(2) conditional GAN
ここでは、GANに条件入力を追加した conditional GAN を使います。
[Conditional Generative Adversarial Nets, 2014](https://arxiv.org/abs/1411.1784)

GAN を使うケースでは、Fighter と Jammer の進出距離（ingress）のみをプランニングし、Jammer の Lead distance は扱っていません。この辺りは、レポートの前のほうに書いてあることと、実際にやっていることが結構異なっている（前のほうに書いてあるほどのことはやっていない）ので、実装時に留意します。

GAN の内容についての言及は少なく、ほとんど、Figure 2.5 に示すとの一言に近いです。残念ながら、この絵は GAN のような GAN でないようなイマイチな絵なので、実装の時に噛み砕いて GAN らしくします。また、GAN については、step-by-step ではないと何気なく書いてありますので、これも実装の時に解釈する必要があります。

![figure2-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/9d9a9ac1-cfff-8845-9da6-3f1a822b4ff6.png)

また、上記では通常GANで用いられる Discriminator という用語の代わりに Critic という用語を用いていますが、これは強化学習の Actor-critic 法と GAN の関係に関する下記論文を意識したものです。もちろん、実態は Discriminator です。
[Connecting Generative Adversarial Networks and Actor-Critic Methods, 2017](https://arxiv.org/abs/1610.01945)

余談になりますが、GAN の進化型の一つである WGAN でも Critic という用語が使われています。
[Wasserstein GAN, 2017](https://arxiv.org/abs/1701.07875)

## 2.1 GAN プランナーのトレーニングのための評価フィードバック
レポートでは、ここで急に GAN だけに話が絞られるかのようなタイトルで、しかも意味不明なタイトルになります。（レポートでは、'Evaluative Feedback for GAN Planner Training 'です）。しかし、タイトルと書いてあることが一致していないと思いました。しかも、GAN と DQN の話がごっちゃになっていて前後するので混乱します。もっと、きちんと書いてもらいたいものです。

まず、AFGYM です。仕様は以下となっているようです。（かなり乱暴な気はしますが、レポートの目的が AI 適用の原理検証だからでしょう）。

 - レーダ方程式は計算しない。エージェントは、設定したレンジ内に相手がいれば自動で射撃する。
 - 電子戦（EW: Electric Warfare）もモデル化しない。ジャミングはウェポン・レンジのパーセント減少として計算する。
 - OpenAI Gym 環境に対応している。

トレーニング時の報酬（と書いてあるのですが、GAN のトレーニングに報酬は不要なので、ここは、たぶん DQN のトレーニング時の報酬）は、
 
 - Fighter survival +2
 - Jammer survival +1
 - Red agents survival -4
 
また、GAN は成功したミッションのデータのみでトレーニングしています。理由は実装の際に推測します。データ数は、26,000と書いてあったり、50,000と書いてあったりするので判りません。

## 2.2 GANプランナーの評価
GAN は普通は、画像や音楽の生成に使うので、「ピカソっぽい」とか「ショパンっぽい」といったように感覚的にしか評価のやりようがないのですが、ここではもう少し定量的な評価測度を導入しています。具体的には、Table 2.5 に示す ```lift``` という測度で評価しています。これも判り難いので、実装用に翻訳しておきましょう（表２）。

![Table 2-5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/f7e41e2a-636a-ea04-dcbe-7738260bf86c.jpeg)

表２![表2-5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/bd9b60fe-c895-bfef-52bf-09444fc8ca41.png)

表によると、ランダムに生成したミッション・プランが成功する確率は３６％です。

# 3. 実験結果
Table 2.6 となっています。AFGYM でトレーニング後に AFSIM でも評価しています。明記はされていませんが、話の流れからして、転移学習はさせていないはずです。当然ですが、トレーニング環境とは微妙に異なる AFSIM で評価した場合、性能は劣化します。

![Table 2-6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/92ed902d-6550-470d-edc1-d541121fc87f.jpeg)

Tableの見方を説明します。

Simplified Model というのは、米軍の標準シミュレータである AFSIM をシンプルにして GAN のトレーニングに使ったモデルのことです。あえて、AFGYM と記載していないのは、GAN のトレーニングには、さらにシンプルにしたモデルを使用したためと思われます。（（その３）で、この点について、述べる予定です）。

Lift は、ランダム・プランナーをベースラインと考えた時の GAN プランナーの性能向上を表しています。

Lift(overall) が全体の性能を表していて、ランダム・プランの成功率（Table 2.5から 36%）に対し、GAN プランナーを使うことで成功率がどれだけ向上するのかを示します。表から、シミュレーション環境が Simplified Modelの時には 26%、AFSIM の時には 11% 成功率が向上するので、成功率は夫々62%, 47%になることが判ります。

Lift (over failed samples) は、ランダム・プランナーで失敗であったミッション条件の内、GAN プランナーで成功するプランに変更できた割合を表しています。Simplified Model の時には、失敗だったミッションの内 30% が成功プランに変更できたことが判ります。

逆に、Lift (over positive samples) は、ランダム・プランナーで成功であったミッション条件の内、GAN プランナーで失敗プランに変更してしまった割合を表しています。Simplified Model の時には、成功していたミッションの内 2.1% が失敗プランになってしまったことが判ります。

と言われても、これがどれくらい良いものなのか、それともイマイチなものなのか、記載がないので判断できません。やはり、自分で実装してみるしかしょうがないようです。

## (その３)へ続く

ということで、（その３）以降で、AFGYM もどきを実装し、conditional GAN を実装していきます。（AFSIM に相当するものを実装するのは、私にはとても無理なので作りません）。

# 過去記事へのリンク
- [ランド研究所の「機械学習による航空支配」を実装する（その1）：レポートのまとめ](https://qiita.com/DreamMakerAi/items/95e0aad16e450cb0c53d)