exponenta event banner

Обучающий агент по повышению квалификации в базовом сетевом мире

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

Эта среда grid world имеет следующую конфигурацию и правила:

  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-Learning

Для создания агента Q-learning сначала создайте таблицу Q с использованием спецификаций наблюдения и действий из среды grid-мира. Установите скорость обучения представления равной 1.

qTable = rlTable(getObservationInfo(env),getActionInfo(env));
qRepresentation = rlQValueRepresentation(qTable,getObservationInfo(env),getActionInfo(env));
qRepresentation.Options.LearnRate = 1;

Затем создайте агент Q-learning, используя это представление таблицы, и настройте эпсилон-жадное исследование. Дополнительные сведения о создании агентов Q-learning см. в разделе rlQAgent и rlQAgentOptions.

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(qRepresentation,agentOpts);

Подготовка агента Q-Learning

Для обучения агента сначала укажите варианты обучения. В этом примере используются следующие опции:

  • Тренируйтесь максимум на 200 серий. Укажите, что каждый эпизод длится не более 50 временных шагов.

  • Прекратите обучение, когда агент получит среднее совокупное вознаграждение более 10 в течение 30 последовательных эпизодов.

Дополнительные сведения см. в разделе rlTrainingOptions.

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes= 200;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 11;
trainOpts.ScoreAveragingWindowLength = 30;

Обучение агента Q-learning с помощью 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-Learning

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

Перед запуском моделирования выполните визуализацию среды и настройте визуализацию для отслеживания состояний агента.

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

Моделирование агента в среде с помощью sim функция.

sim(qAgent,env)

Трассировка агента показывает, что агент успешно находит переход от ячейки [2,4] к ячейке [4,4].

Создание и обучение агента SARSA

Для создания агента SARSA используйте то же представление таблицы Q и жадную конфигурацию epsilon, что и для агента Q-learning. Дополнительные сведения о создании агентов 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 находит то же решение grid world, что и агент Q-learning.

См. также

|

Связанные темы