LoginSignup
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-10

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

TL;DR

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

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

実行環境

  • MacOS
  • FTG-4.30
  • gym-fightingice-0.0.1
  • openjdk-11.0.1

インストール方法

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の対応表です。

  • 0:AIR
  • 1:AIR_A
  • 2:AIR_B
  • 3:AIR_D_DB_BA
  • 4:AIR_D_DB_BB
  • 5:AIR_D_DF_FA
  • 6:AIR_D_DF_FB
  • 7:AIR_DA
  • 8AIR_DB
  • 9:AIR_F_D_DFA
  • 10:AIR_F_D_DFB
  • 11:AIR_FA
  • 12:AIR_FB
  • 13:AIR_GUARD
  • 14:AIR_GUARD_RECOV
  • 15:AIR_RECOV
  • 16:AIR_UA
  • 17:AIR_UB
  • 18:BACK_JUMP
  • 19:BACK_STEP
  • 20:CHANGE_DOWN
  • 21:CROUCH
  • 22:CROUCH_A
  • 23:CROUCH_B
  • 24:CROUCH_FA
  • 25:CROUCH_FB
  • 26:CROUCH_GUARD
  • 27:CROUCH_GUARD_RECOV
  • 28:CROUCH_RECOV
  • 29:DASH
  • 30:DOWN
  • 31:FOR_JUMP
  • 32:FORWARD_WALK
  • 33:JUMP
  • 34:LANDING
  • 35:NEUTRAL
  • 36:RISE
  • 37:STAND
  • 38:STAND_A
  • 39:STAND_B
  • 40:STAND_D_DB_BA
  • 41:STAND_D_DB_BB
  • 42:STAND_D_DF_FA
  • 43:STAND_D_DF_FB
  • 44:STAND_D_DF_FC
  • 45:STAND_F_D_DFA
  • 46:STAND_F_D_DFB
  • 47:STAND_FA
  • 48:STAND_FB
  • 49:STAND_GUARD
  • 50:STAND_GUARD_RECOV
  • 51:STAND_RECOV
  • 52:THROW_A
  • 53:THROW_B
  • 54:THROW_HIT
  • 55:THROW_SUFFER

参考情報

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3