Этот пример показывает, как решить среду мира сетки с помощью укрепления, учащегося учебным 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-изучения.