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

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

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

  1. Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (North=1, South=2, East=3, West=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;

Зафиксируйте случайный seed генератора для воспроизводимости.

rng(0)

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

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

qTable = rlTable(getObservationInfo(env),getActionInfo(env));
tableRep = rlRepresentation(qTable);
tableRep.Options.LearnRate = 1;

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

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(tableRep,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 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(tableRep,agentOpts);

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

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(sarsaAgent,env,trainOpts);
else
    % Load 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-изучения.

Смотрите также

|

Похожие темы

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