LoginSignup
5
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

参考情報

5
3
4

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
  3. You can use dark theme
What you can do with signing up
5
3