Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@hideki

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

More than 1 year has passed since last update.

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

参考情報

3
Help us understand the problem. What is going on with this article?
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
hideki

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?