0 шт.
Выбрать страницу

Обучение с подкреплением — практика OpenAI Gym

Давайте попробуем запустить простой код с использованием окружения Pacman:

import gym
import gym
import matplotlib.pyplot as plt

env = gym.make("MsPacman-v0")
state = env.reset()
env.render(close=True)
env.render(mode='rgb_array')
pic = env.render(mode='rgb_array')
plt.imshow(pic)
MsPacman-v0

MsPacman-v0

Получаем следующее изображение.

Предлагаю посмотреть сколько действий нам доступно:

env.action_space.n

Получаем:

9

Давайте попробуем запустить игру:
env = gym.make(«MsPacman-v0»)
state = env.reset()
reward, info, done = None, None, None

state, reward, done, info = env.step(1)

print('State: ' + str(state))
print('State shape: ' + str(state.shape))
plt.imshow(state)
print('Reward: ' + str(reward))
print('Done: ' + str(done))
print('Info: ' + str(reward))

Получаем:

State: [[[  0   0   0]
  [  0   0   0]
  [  0   0   0]
  ...
  [  0   0   0]
  [  0   0   0]
  [  0   0   0]]

 [[228 111 111]
  [228 111 111]
  [228 111 111]
  ...
  [228 111 111]
  [228 111 111]
  [228 111 111]]

 [[228 111 111]
  [228 111 111]
  [228 111 111]
  ...
  [228 111 111]
  [228 111 111]
  [228 111 111]]

 ...

 [[  0   0   0]
  [  0   0   0]
  [  0   0   0]
  ...
  [  0   0   0]
  [  0   0   0]
  [  0   0   0]]

 [[  0   0   0]
  [  0   0   0]
  [  0   0   0]
  ...
  [  0   0   0]
  [  0   0   0]
  [  0   0   0]]

 [[  0   0   0]
  [  0   0   0]
  [  0   0   0]
  ...
  [  0   0   0]
  [  0   0   0]
  [  0   0   0]]]
State shape: (210, 160, 3)
Reward: 0.0
Done: False
Info: 0.0

Где:
State — картинка или RAM в зависимости какое окружение вы выбрали,
Reward — награда,
Done — True или False, в зависимости от того, закончилась игра или нет,
Info — информация для отладки.
Попробуем управлять игрой:

env = gym.make("MsPacman-v0")
state = env.reset()
reward, info, done = None, None, None

for number in range(100):
    state, reward, done, info = env.step(2)   
plt.imshow(state)

Становиться очевидно что, что
env.step(1) — это движение вверх,
env.step(2) — это движение направо,
env.step(3) — это движение налево,
env.step(4) — это движение вниз,
остается понять, что делают еще пять действий.
Теперь запишем видео случайных действий, сгенерированных OpenAI Gym:
import gym
from gym import wrappers
env = gym.make(«MsPacman-v0»)
env = wrappers.Monitor(env, «test_video»,force=True)
observation = env.reset()

for t in range(10000000):
    env.render()
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)
    if done:
        print('Episode finished after {} timesteps'.format(t+1))
        env.reset()
        break

Перефразируем код для большего удобства:

import gym
from gym import wrappers
env = gym.make("MsPacman-v0")
env = wrappers.Monitor(env, "test_video",force=True)
observation = env.reset()
done = False
while done != True:
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)
    print(done)
    if done:
        env.reset()

И нас получается следующее видео.

Обратим внимание на систему поощрений. Для каждого окружения своя система наград.
Нужно найти лучшее окружение с корректными наградами, потому, что для некоторых окружений награды не совсем адекватные, не отражающие того, как алгоритм должен обучаться.