OpenAI Gym API for Fighting ICEを動かしてみる

TL;DR

Qiitaの方でコメントを頂いたので、早速gym-fightingiceを試してみました。

OpenAI GymのAPIを通して全てPythonでコーディングできるようになるので、機械学習系をPythonで慣れている人はかなり使いやすくなります。

実行環境

インストール方法

Javaのインストール

以前はOracle JDK 8でないと動作しなかった気がするのですが、今回試した限りではOpenJDK 11で動作しました。 以下はbrewによるインストールです。

brew cask install java

Fighting ICEのインスト−ル

FightingICE Get started --installより、Version4.30として配布されているZIPアーカイブをダウンロードして適当なディレクトリに解凍します。

gym-fightinceのインストール

gym-fightingiceを参考に以下を実行します。

pip install gym
pip install py4j
pip install port_for
pip install opencv-python

次にFighting ICEのインスト−ルでZIPアーカイブを解凍したディレクトリに移動してからgit clone、セットアップを実行します。

cd FTG4.30
git clone https://github.com/myt1996/gym-fightingice.git
pip install -e .

インストール時の注意事項

実行時のカレントワーキングディレクトリが、FTG4.30直下でないと、NullPointerExceptionが発生してNow Loadingのまま処理が進みませんでした。 Jupyter Notebookから実行する場合も、以下の様なディレクトリ配置にすることをお勧めします。

FTG4.30/
├── bin
├── data
├── gym-fightingice <- git clone https://github.com/myt1996/gym-fightingice.git
├── test-fighting-ice.ipynb <- 実行用Jupyter Notebook
├── lib
├── log
└── src

動かしてみる

FTG4.30配下にJupyter Notebookなどで以下のソースコードを作成して実行します。

import gym
import sys

sys.path.append('gym-fightingice')

import gym_fightingice

env = gym.make("FightingiceDisplayNoFrameskip-v0", java_env_path=".")

#observation = env.reset(p2='MyFighter') # p2に対戦相手のAI名(Javaクラス名)を指定することが出来ます。
observation = env.reset()

以下はAgentの行動です。300フレーム分対戦相手に向かってジャンプするだけです。

for i in range(300): # 300フレーム分実行します。
    env.step(31) # `FOR_JUMP`を実行します。

Action一覧

env.stepには数値でActionを設定しますが、以下は数値とActionの対応表です。

参考情報