В этом примере показано, как решить среду мира сетки с помощью обучения с подкреплением, тренируя агентов Q-обучения и SARSA. Для получения дополнительной информации об этих агентах смотрите Агентов Q-изучения и Агентов SARSA, соответственно.
Эта среда мира сетки имеет следующую настройку и правила:
Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (Север=1, Юг=2, Восток=3, Запад=4).
Агент стартует с ячейки [2,1] (вторая строка, первый столбец).
Агент получает вознаграждение +10, если он достигает терминального состояния в ячейке [5,5] (синяя).
Среда содержит специальный скачок от ячейки [2,4] к ячейке [4,4] с вознаграждением +5.
Агент блокируется препятствиями (черные ячейки).
Все другие действия приводят к вознаграждению -1.
Создайте основную среду мира сетки.
env = rlPredefinedEnv("BasicGridWorld");
Задавать начальное состояние агента всегда [2,1], задайте функцию сброса, которая возвращает начальное состояние агента. Эта функция вызывается в начале каждого эпизода обучения и симуляции. Состояния пронумерованы, начав в положении [1,1] и рассчитав вниз по колонке. Поэтому создайте указатель анонимной функции, который устанавливает начальное состояние на 2
.
env.ResetFcn = @() 2;
Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.
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-изучения.