Обучите агента обучения с подкреплением в основном мире сетки

Этот пример показывает, как решить окружение мира сетки с помощью обучения с подкреплением путем настройки агентов Q-обучения и SARSA. Для получения дополнительной информации об этих агентах см. «Агенты Q-обучения» и «Агенты SARSA».

Это окружение мира сетки имеет следующее строение и правила:

  1. Мир сетки 5 на 5 и ограничен границами, с четырьмя возможными действиями (Север = 1, Юг = 2, Восток = 3, Запад = 4).

  2. Агент стартует с камеры [2,1] (вторая строка, первый столбец).

  3. Агент получает вознаграждение + 10, если он достигает конечного состояния в камере [5,5] (синяя).

  4. Среда содержит специальный переход от камеры [2,4] к камере [4,4] с вознаграждением + 5.

  5. Агент блокируется препятствиями (черными камерами).

  6. Все другие действия приводят к вознаграждению -1.

Создайте окружение мира сетки

Создайте базовое окружение мира сетки.

env = rlPredefinedEnv("BasicGridWorld");

Чтобы указать, что начальное состояние агента всегда является [2,1], создайте функцию сброса, которая возвращает номер состояния для начального состояния агента. Эта функция вызывается в начале каждого эпизода тренировки и симуляции. Состояния нумеруются начиная с положения [1,1]. Номер состояния увеличивается при перемещении вниз по первому столбцу, а затем вниз по каждому последующему столбцу. Поэтому создайте указатель анонимной функции, который устанавливает начальное состояние на 2.

env.ResetFcn = @() 2;

Исправьте начальное значение генератора для повторяемости.

rng(0)

Создайте агента Q-обучения

Чтобы создать агента Q-обучения, сначала составьте Q-таблицу с помощью наблюдений и спецификаций действия от окружения мира сетки. Установите скорость обучения для представления равной 1.

qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
qRepresentation.Options.LearnRate = 1;

Затем создайте агента Q-обучения с помощью этого представления таблицы и сконфигурируйте эпсилоново-жадное исследование. Для получения дополнительной информации о создании агентов Q-обучения смотрите rlQAgent и rlQAgentOptions.

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);

Настройте агента Q-обучения

Чтобы обучить агента, сначала укажите опции обучения. В данном примере используйте следующие опции:

  • Обучайте на самое большее 200 эпизодах. Укажите, что каждый эпизод длится в течение большинства 50 временных шагов.

  • Остановите обучение, когда агент получит среднее совокупное вознаграждение, больше на 10 для 30 последовательных эпизодов.

Для получения дополнительной информации смотрите rlTrainingOptions.

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes= 200;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 11;
trainOpts.ScoreAveragingWindowLength = 30;

Обучите агента Q-обучения с помощью train функция. Обучение может занять несколько минут. Чтобы сэкономить время при запуске этого примера, загрузите предварительно обученного агента путем установки doTraining на false. Чтобы обучить агента самостоятельно, установите doTraining на true.

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(qAgent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('basicGWQAgent.mat','qAgent')
end

Откроется окно Диспетчер эпизодов (Episode Manager), в котором отображается процесс обучения.

Валидация результатов Q-обучения

Чтобы подтвердить результаты обучения, моделируйте агент в среде обучения.

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

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

Симулируйте агент в окружении с помощью sim функция.

sim(qAgent,env)

Трассировка агента показывает, что агент успешно находит переход от камеры [2,4] к камере [4,4].

Создайте и обучите агента SARSA

Чтобы создать агента SARSA, используйте то же представление Q-таблицы и жадную к эпсилону строение, что и для агента Q-обучения. Для получения дополнительной информации о создании агентов SARSA смотрите rlSARSAAgent и rlSARSAAgentOptions.

agentOpts = rlSARSAAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.04;
sarsaAgent = rlSARSAAgent(qRepresentation,agentOpts);

Обучите агента SARSA с помощью train функция. Обучение может занять несколько минут. Чтобы сэкономить время при запуске этого примера, загрузите предварительно обученного агента путем установки doTraining на false. Чтобы обучить агента самостоятельно, установите doTraining на true.

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(sarsaAgent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('basicGWSarsaAgent.mat','sarsaAgent')
end

Валидация обучения SARSA

Чтобы подтвердить результаты обучения, моделируйте агент в среде обучения.

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

Моделируйте агент в окружении.

sim(sarsaAgent,env)

Агент SARSA находит то же решение мира сетки, что и агент Q-обучения.

См. также

|

Похожие темы