【OpenAI Gym】強化学習でRPGのボスを倒すAIをつくる③

プログラミング

前回作ったゲーム環境を、僕の考えた最強のAI()を作って攻略していきたいと思います。

まずはgymに自作の環境を登録します。

battle\__init__.py

   \env.py ←前回作ったファイル

 

__init__.pyを作っておくと、gym.make(‘id’)で自作の環境を呼び出すことができます。

( id= <環境名>-v<バージョン>, entry_point = <フォルダ名>.<env>:<class名> という形式で定義します ) 

__init__.py 

 

次にKeras-RLをインストールします。

 

keras-rl/examples/ 以下のファイルを参考に、自作環境を攻略するAI(強化学習ではエージェントという)を定義します。

今回、Q値予測のモデルにはDNNを使いました。

Q値というのは、現在の環境における各行動の期待値のようなものです。AIは実際に行動した結果から、このQ値を学習していきます。

 

dqn_battle.py

 

①結果(DNN)

50000回学習させた結果、3ターンで死亡するAIが出来上がりました。なんでだろ(´・ω・`)

学習の中で、BOSSを倒す経験もできていたのですが、上手くいかなかった。。。

 

勝った時の報酬が足りないのかなと思い、報酬の与え方とかいろいろ変えてみましたが、上手くいきません。そこでQ値のモデルをLSTMに変更してみることに。(今後使おうと思っていたので、ノリで使ってみました。)

 

②結果(LSTM)

同様に50000回学習させた結果、倒せた!( ;∀;)

序盤に無駄に回復呪文を使っているため、倒すまで37ターンと結構時間がかかっていますが、途中で回復を挟みながら戦うことでBOSSを倒すことに成功しています。

 

 

今回、エージェントにはBOSSのHP, MPが見えない状態で学習させていました。(ドラ○エも敵のHP, MPは見えないので)

DNNモデルのAIには、HEROのHP, MPだけでは、情報が少なすぎたのかも。

LSTMモデルのAIは、前の観測値も参照できるので、戦闘の前半は回復多め、後半は回復少なめ、といった時間軸に沿った戦い方を学んだのかもしれません。

 

    コメント

    タイトルとURLをコピーしました