【OpenAI Gym】強化学習でRPGのボスを倒すAIを作る②

プログラミング

前回の記事で考えたゲームをGymに登録していきます。

 

Gymへのゲーム環境の登録方法は以下です。

  1. gym.Envを継承して、ゲーム環境のクラスを作る。

 まずはgym.Envを継承して、以下のプロパティ・メソッドを実装したクラスを作ります。

 プロパティ 意味
 action_space Agentがどんな行動を選択できるかを表す。(出力層)
 observation_space Agentが観測できるゲーム環境のパラメータ。(入力層)
 reward_range 報酬の最小値から最大値の範囲。
 メソッド 意味
 _step(self,action) action(Agentの行動)に対する結果(observation, reward, done, info)を返す。
 _reset(self) ゲーム環境を初期化する
 _render(self, mode, close) ゲーム環境を可視化する
 _close(self) 環境を閉じて、後処理をする
 _seed(self,seed) ランダムシードを固定する

 

_close(), _seed()はなくても良いようです。

最初間違えて、reward_rangeの設定範囲外の報酬を与えていましたが問題なく学習していたので、これもあまり関係ないのかな。

 

上記のメソッドの中で一番難しいのは、_stepの返り値のreward(報酬)の決め方だと思います。以下ソースコードでは111行目~123行目で定義しています。

今回のゲームの報酬は、

①(HEROが死んだときの報酬) << (BOSSを倒した時の報酬) となるようにしました。

②HEROが死んだ時場合は相手に与えたダメージが大きいほど報酬が多くなる

③BOSSを倒すまでにかかったターン数が多い場合は報酬を少し減らす。

という考えのもと設定しました。

報酬の②の考え方は、BOSSを倒す経験ができなかった場合に、呪文を連打して死んでいくAIができそうですが、まあ、後で調整しようと思います(笑)。

 

↓ソースコード ( env.py )

 

 

次回、エージェント(AI)の設定をして、実際に強化学習していきたいと思います。

 

コメント

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