Если вы работаете с обучением с подкреплением, вы, вероятно, слышали о TensorFlow, PyTorch и подобных. Однако в 2019 году MathWorks представил новый набор инструментов для обучения с подкреплением. Этот продукт представляет собой хорошо поддерживаемую альтернативу, которую, возможно, стоит попробовать. Здесь мы покажем один из подходов к использованию этого набора инструментов для решения сред OpenAI Gym.

Настройка интерпретатора Python в MATLAB

Примечание: в настоящее время я запускаю MATLAB 2020a на OSX 10.15, используя Anaconda 4.8.2 для создания сред Python.

Чтобы настроить Python и установить зависимости, выполните следующие действия:

  1. В системном терминале используйте команду conda create --name matlab-rl python=3.6, чтобы создать среду с Python 3.6, в которой мы можем устанавливать пакеты без риска конфликта с установкой Python в нашей системе.
  2. Запустите conda activate matlab-rl, чтобы войти в эту новую среду.
  3. Установите OpenAI Gym pip install gym. Вы можете увидеть, как установить дополнительные компоненты здесь.
  4. Запустите which python, чтобы получить интерпретатор Python этой среды. Вы должны увидеть что-то вроде: /usr/local/anaconda3/envs/matlab-rl/bin/python
  5. Чтобы сказать MATLAB использовать этот интерпретатор Python, используйте следующую команду в командном окне MATLAB: pyversion(‘/usr/local/anaconda3/envs/matlab-rl/bin/python’)
  6. Подтвердите, что среда Python настроена правильно в MATLAB, набрав pyenv.

Обучение во встроенной среде MATLAB

Прежде чем мы углубимся в использование сред OpenAI Gym, давайте начнем с более простой встроенной среды MATLAB. Это можно сделать, следуя руководству здесь или запустив сценарий MATLAB здесь.

После запуска скрипта должно появиться окно, подобное приведенному ниже, которое будет автоматически обновляться по мере обучения.

Тренировки в тренажерном зале OpenAI

MATLAB поддерживает прямой вызов функций Python, как показано здесь. Это означает, что мы можем использовать Gym, просто создав оболочку вокруг библиотеки, чтобы обеспечить правильное сопоставление между типами данных MATLAB и Python. Указанная оболочка показана ниже и доступна в виде загружаемого скрипта здесь.

classdef OpenAIWrapper < rl.env.MATLABEnvironment
  properties
    open_env = py.gym.make('CartPole-v1'); 
  end
  methods
    function this = OpenAIWrapper()
      ObservationInfo = rlNumericSpec([4 1]);
      ObservationInfo.Name = 'CartPoleObservation';
      ObservationInfo.Description = 'Position, Velocity, Angle,
                                     VelocityAtTip';
      ActionInfo = rlFiniteSetSpec([0 1]);
      ActionInfo.Name = 'PushingPole';
      this = [email protected](ObservationInfo,
                                           ActionInfo);
    end
    function [Observation,Reward,IsDone,LoggedSignals] =      
                                             step(this,Action)
      result = this.open_env.step(int16(Action)); 
      Observation = double(result{1})'; 
      Reward = result{2};
      IsDone = result{3};
      LoggedSignals = [];
    end
    function InitialObservation = reset(this)
      result = this.open_env.reset();
      InitialObservation = double(result)'; 
    end
  end
end 

Отредактировав строку, которая объявляет env в нашем предыдущем скрипте (см. Обновленный скрипт здесь), чтобы использовать только что созданную оболочку, мы можем запустить тот же агент в OpenAI Gym! Обучение для CartPole-v1 показано ниже (обратите внимание, что не было приложено никаких усилий для настройки гиперпараметров для оптимизации результатов).

В гифке в начале статьи показан последний обученный агент. Обратите внимание, что вызов env.render() изнутри MATLAB терпит неудачу в OSX. Однако при использовании ОС Windows 10 визуализация работает.

Заключение

Мы показали, как обучать агентов MATLAB Reinforcement Learning Toolbox, используя среду OpenAI Gym. Такой подход позволяет сравнивать модели, созданные с помощью этого набора инструментов, с общим стандартом.

Особая благодарность докторанту Кэти Гандоми за помощь с отладкой.