1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

遺伝的アルゴリズムでスーパーマリオをクリアする

Last updated at Posted at 2020-01-01

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): の数字で試行回数が設定できる。

(記事作成中)

1
2
1

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?