Этот пример показывает, как решить среду мира сетки с помощью укрепления, учащегося учебным Q-изучением и агентами SARSA. Для получения дополнительной информации об этих агентах смотрите Агенты Q-изучения и Агенты SARSA, соответственно.
Эта среда мира сетки имеет следующую настройку и правила:
Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (North=1, South=2, East=3, West=4).
Агент начинается с ячейки [2,1] (вторая строка, первый столбец).
Агент получает вознаграждение +10, если это достигает терминального состояния в ячейке [5,5] (синий).
Среда содержит специальный скачок от ячейки [2,4] к ячейке [4,4] с +5 вознаграждениями.
Агент блокируется препятствиями (черные ячейки).
Все другие действия приводят к-1 вознаграждению.


Создайте основную среду мира сетки.
env = rlPredefinedEnv("BasicGridWorld");Задавать начальное состояние агента всегда [2,1], задайте функцию сброса, которая возвращает начальное состояние агента. Эта функция вызвана в начале каждого учебного эпизода и симуляции. Состояния пронумерованы, начав в положении [1,1] и считая в обратном порядке столбец. Поэтому создайте указатель анонимной функции, который устанавливает начальное состояние на 2.
env.ResetFcn = @() 2;
Зафиксируйте случайный seed генератора для воспроизводимости.
rng(0)
Чтобы создать агент 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);
Чтобы обучить агент, сначала задайте опции обучения. В данном примере используйте следующие опции:
Обучайтесь для самое большее 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 открывает и отображает учебный прогресс.

Чтобы подтвердить учебные результаты, моделируйте агент в учебной среде.
Прежде, чем запустить симуляцию, визуализируйте среду и сконфигурируйте визуализацию, чтобы поддержать трассировку состояний агента.
plot(env) env.Model.Viewer.ShowTrace = true; env.Model.Viewer.clearTrace;
Моделируйте агент в среде с помощью функции sim.
sim(qAgent,env)

Трассировка агента показывает, что агент успешно нашел скачок от состояния [2,4] к ячейке [4,4].
Создать агент 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

Чтобы подтвердить учебные результаты, моделируйте агент в учебной среде.
plot(env) env.Model.Viewer.ShowTrace = true; env.Model.Viewer.clearTrace;
Моделируйте агент в среде.
sim(sarsaAgent,env)

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