В этом примере показано, как решить среду мира сетки с помощью обучения с подкреплением, тренируя агентов Q-обучения и SARSA. Для получения дополнительной информации об этих агентах смотрите Агентов Q-обучения и Агентов SARSA.
Эта среда мира сетки имеет следующую настройку и правила:
Мир сетки 5 на 5 и ограничен границами, с четырьмя возможными действиями (Север = 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)); 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);
Чтобы обучить агента, сначала задайте опции обучения. В данном примере используйте следующие опции:
Обучайтесь для самое большее 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 открывает и отображает прогресс обучения.
Чтобы подтвердить результаты обучения, моделируйте агент в среде обучения.
Прежде, чем запустить симуляцию, визуализируйте среду и сконфигурируйте визуализацию, чтобы обеспечить трассировку состояний агента.
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(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
Чтобы подтвердить результаты обучения, моделируйте агент в среде обучения.
plot(env) env.Model.Viewer.ShowTrace = true; env.Model.Viewer.clearTrace;
Симулируйте агента в среде.
sim(sarsaAgent,env)
Агент SARSA находит то же решение для мира сетки как агент Q-обучения.