vcoptを使用した遺伝的アルゴリズムによるスーパーマリオの学習については
https://vigne-cla.com/9-3/
に記載されており、ここから学習したときのログを残す。
ここでエラーを回避するため、上記サイトのコードを以下のように変更している。
from nes_py.wrappers import BinarySpaceToDiscreteSpaceEnv
↓
from nes_py.wrappers import JoypadSpace
env = BinarySpaceToDiscreteSpaceEnv(env, SIMPLE_MOVEMENT)
↓
env = JoypadSpace(env, SIMPLE_MOVEMENT)
!pip install gym-super-mario-bros
!pip install vcopt
#マリオ関連のimport
from nes_py.wrappers import JoypadSpace
import gym_super_mario_bros
from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
env = gym_super_mario_bros.make('SuperMarioBros-1-1-v0')
env = JoypadSpace(env, SIMPLE_MOVEMENT)
#プロット関連のimport
import matplotlib.pyplot as plt
from matplotlib import animation, rc
#vcopt関連のimport
import numpy as np
import numpy.random as nr
from vcopt import vcopt
#ゲーム環境のリセット
env.reset()
#動画の準備
fig = plt.figure()
ims = []
#繰り返し操作してimsに追加
for i in range(1000):
#0:
#1:→
#2:→+ジャンプ
#3:→→
#4:→→+ジャンプ
#5:ジャンプ
#6:←
command = nr.randint(1, 7)
state, reward, done, info = env.step(command)
#imsに追加
im = plt.imshow(env.render(mode='rgb_array'))
ims.append([im])
if done == True:
break
#imsを表示
ani = animation.ArtistAnimation(fig, ims, interval=15, blit=True)
rc('animation', html='jshtml')
ani
#保存用
#ani.save('mario.gif', writer='imagemagick')
#ani.save('mario.mp4', writer="ffmpeg")
上記でアニメーションが確認できます。
- env = gym_super_mario_bros.make('SuperMarioBros-1-1-v0')
でどのステージか設定できる。 - for i in range(1000): の数字で試行回数が設定できる。
(記事作成中)