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

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

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

  1. Мир сетки 5 на 5 ограничен границами, с 4 возможными действиями (Север=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));
tableRep = rlRepresentation(qTable);
tableRep.Options.LearnRate = 1;

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

agentOpts = rlQAgentOptions;
agentOpts.EpsilonGreedyExploration.Epsilon = .04;
qAgent = rlQAgent(tableRep,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 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(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

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

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

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

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

sim(sarsaAgent,env)

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

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

|

Похожие темы