Help us understand the problem. What is going on with this article?

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

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

参考情報

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした