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

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

Среда MDP имеет следующий граф.

Здесь:

  1. Каждый кружок представляет состояние.

  2. В каждом состоянии существует решение подняться или опуститься.

  3. Агент начинается с состояния 1.

  4. Агент получает вознаграждение, равное значению на каждом переходе в графе.

  5. Цель обучения состоит в том, чтобы собрать максимальное совокупное вознаграждение.

Создайте среду MDP

Создайте модель MDP с восемью состояниями и двумя действиями ("вверх" и "вниз").

MDP = createMDP(8,["up";"down"]);

Чтобы смоделировать переходы в вышеупомянутом графе, измените матрицу переходов и премиальную матрицу MDP. По умолчанию эти матрицы содержат нули. Для получения дополнительной информации о создании модели MDP и свойств объекта MDP, смотрите createMDP.

Задайте матрицы переходов и вознаграждения для MDP. Например, следующими командами:

  • Первые две линии задают переход от состояния 1 к состоянию 2 принимающим меры 1 и вознаграждение +3 для этого перехода.

  • Следующие две линии задают переход от состояния 1 к состоянию 3 принимающим меры 2 ("вниз") и вознаграждение +1 для этого перехода.

MDP.T(1,2,1) = 1;
MDP.R(1,2,1) = 3;
MDP.T(1,3,2) = 1;
MDP.R(1,3,2) = 1;

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

% State 2 transition and reward
MDP.T(2,4,1) = 1;
MDP.R(2,4,1) = 2;
MDP.T(2,5,2) = 1;
MDP.R(2,5,2) = 1;
% State 3 transition and reward
MDP.T(3,5,1) = 1;
MDP.R(3,5,1) = 2;
MDP.T(3,6,2) = 1;
MDP.R(3,6,2) = 4;
% State 4 transition and reward
MDP.T(4,7,1) = 1;
MDP.R(4,7,1) = 3;
MDP.T(4,8,2) = 1;
MDP.R(4,8,2) = 2;
% State 5 transition and reward
MDP.T(5,7,1) = 1;
MDP.R(5,7,1) = 1;
MDP.T(5,8,2) = 1;
MDP.R(5,8,2) = 9;
% State 6 transition and reward
MDP.T(6,7,1) = 1;
MDP.R(6,7,1) = 5;
MDP.T(6,8,2) = 1;
MDP.R(6,8,2) = 1;
% State 7 transition and reward
MDP.T(7,7,1) = 1;
MDP.R(7,7,1) = 0;
MDP.T(7,7,2) = 1;
MDP.R(7,7,2) = 0;
% State 8 transition and reward
MDP.T(8,8,1) = 1;
MDP.R(8,8,1) = 0;
MDP.T(8,8,2) = 1;
MDP.R(8,8,2) = 0;

Задайте утверждает "s7" и "s8" как конечные состояния MDP.

MDP.TerminalStates = ["s7";"s8"];

Создайте среду MDP обучения с подкреплением для этой модели процесса.

env = rlMDPEnv(MDP);

Чтобы указать, что начальное состояние агента всегда является состоянием 1, задайте функцию сброса, которая возвращает начальное состояние агента. Эта функция вызывается в начале каждого эпизода обучения и симуляции. Создайте указатель анонимной функции, который устанавливает начальное состояние равным 1.

env.ResetFcn = @() 1;

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

rng(0)

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

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

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

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

agentOpts = rlQAgentOptions;
agentOpts.DiscountFactor = 1;
agentOpts.EpsilonGreedyExploration.Epsilon = 0.9;
agentOpts.EpsilonGreedyExploration.EpsilonDecay = 0.01;
qAgent = rlQAgent(qRepresentation,agentOpts); %#ok<NASGU> 

Обучите агента Q-обучения

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

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

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

Для получения дополнительной информации смотрите rlTrainingOptions.

trainOpts = rlTrainingOptions;
trainOpts.MaxStepsPerEpisode = 50;
trainOpts.MaxEpisodes = 500;
trainOpts.StopTrainingCriteria = "AverageReward";
trainOpts.StopTrainingValue = 13;
trainOpts.ScoreAveragingWindowLength = 30;

Обучите агента с помощью train функция. Это может занять несколько минут, чтобы завершиться. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно обученного агента установкой doTraining к false. Чтобы обучить агента самостоятельно, установите doTraining к true.

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(qAgent,env,trainOpts); %#ok<UNRCH> 
else
    % Load pretrained agent for the example.
    load('genericMDPQAgent.mat','qAgent'); 
end

Подтвердите результаты Q-изучения

Чтобы подтвердить учебные результаты, симулируйте агента в учебной среде с помощью sim функция. Агент успешно находит оптимальный путь, который приводит к совокупному вознаграждению 13.

Data = sim(qAgent,env);
cumulativeReward = sum(Data.Reward)
cumulativeReward = 13

Поскольку коэффициент дисконтирования установлен в 1, значения в Q-таблице обученного агента совпадают с недисконтированными возвратами среды.

QTable = getLearnableParameters(getCritic(qAgent));
QTable{1}
ans = 8×2

   12.9874    7.0759
   -7.6425    9.9990
   10.7193    0.9090
    5.9128   -2.2466
    6.7830    8.9988
    7.5928   -5.5053
         0         0
         0         0

TrueTableValues = [13,12;5,10;11,9;3,2;1,9;5,1;0,0;0,0]
TrueTableValues = 8×2

    13    12
     5    10
    11     9
     3     2
     1     9
     5     1
     0     0
     0     0

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

|

Похожие темы