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

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

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

  1. Мир сетки 5 на 5 и ограничен границами, с четырьмя возможными действиями (Север = 1, Юг = 2, Восток = 3, Запад = 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;

Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.

rng(0)

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

Чтобы создать агента 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);

Обучите агента 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 the 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(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

Подтвердите обучение SARSA

Чтобы подтвердить результаты обучения, моделируйте агент в среде обучения.

plot(env)
env.Model.Viewer.ShowTrace = true;
env.Model.Viewer.clearTrace;

Симулируйте агента в среде.

sim(sarsaAgent,env)

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

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

|

Похожие темы