В этом примере показано, как обучить агента градиента политики (PG) базовой структуре для управления динамической системой второго порядка, смоделированной в MATLAB ® .
Для получения дополнительной информации о базовом агенте PG без базовой линии см. пример «Система» Train PG Agent to Balancing Cart-Pole «».
Среда обучения усилению для этого примера представляет собой двойную интеграторную систему второго порядка с коэффициентом усиления. Цель обучения состоит в управлении положением массы в системе второго порядка с помощью ввода силы.

Для этой среды:
Масса начинается в исходном положении от -2 до 2 единиц.
Сигнал силового воздействия от агента к окружающей среде составляет от -2 до 2 Н.
Наблюдения из окружающей среды - это положение и скорость массы.
Эпизод заканчивается, если масса перемещается более чем на 5 м от исходного положения или если 0,01.
Вознаграждение , предоставляемое на каждом временном шаге, представляет собой дискретизацию ):
) ′ R u (t))
Здесь:
- вектор состояния массы.
- сила, приложенная к массе.
- веса, влияющие на эффективность управления; 0 1].
- вес контрольного усилия; 0,01.
Дополнительные сведения об этой модели см. в разделе Загрузка предопределенных сред системы управления.
Создайте предопределенный интерфейс среды для маятника.
env = rlPredefinedEnv("DoubleIntegrator-Discrete")env =
DoubleIntegratorDiscreteAction with properties:
Gain: 1
Ts: 0.1000
MaxDistance: 5
GoalThreshold: 0.0100
Q: [2x2 double]
R: 0.0100
MaxForce: 2
State: [2x1 double]
Интерфейс имеет пространство дискретных действий, где агент может применить к массе одно из трех возможных значений силы: -2, 0 или 2 N.
Получение информации о наблюдениях и действиях из интерфейса среды.
obsInfo = getObservationInfo(env); numObservations = obsInfo.Dimension(1); actInfo = getActionInfo(env); numActions = numel(actInfo.Elements);
Зафиксируйте начальное число случайного генератора для воспроизводимости.
rng(0)
Агент PG решает, какое действие предпринять, учитывая наблюдения, используя представление актера. Для создания актёра сначала создать глубокую нейронную сеть с одним входом (наблюдение) и одним выходом (действие). Дополнительные сведения о создании глубокого представления функции значений нейронной сети см. в разделе Создание представлений политик и функций значений.
actorNetwork = [
featureInputLayer(numObservations,'Normalization','none','Name','state')
fullyConnectedLayer(numActions,'Name','action','BiasLearnRateFactor',0)];Задание параметров представления актера с помощью rlRepresentationOptions.
actorOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);
Создайте представление актера с помощью указанной глубокой нейронной сети и опций. Необходимо также указать информацию о действиях и наблюдениях для критика, полученную из интерфейса среды. Дополнительные сведения см. в разделе rlStochasticActorRepresentation.
actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,'Observation',{'state'},actorOpts);
Базовая линия, которая изменяется в зависимости от состояния, может уменьшить дисперсию ожидаемого значения обновления и, таким образом, повысить скорость обучения для агента PG. Возможным выбором для базовой линии является оценка функции значения состояния [1].
В этом случае базовым представлением является глубокая нейронная сеть с одним входом (состояние) и одним выходом (значение состояния).
Построить базовую линию аналогично актору.
baselineNetwork = [
featureInputLayer(numObservations,'Normalization','none','Name','state')
fullyConnectedLayer(8,'Name','BaselineFC')
reluLayer('Name','CriticRelu1')
fullyConnectedLayer(1,'Name','BaselineFC2','BiasLearnRateFactor',0)];
baselineOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);
baseline = rlValueRepresentation(baselineNetwork,obsInfo,'Observation',{'state'},baselineOpts);Для создания агента PG с базовой структурой укажите параметры агента PG с помощью rlPGAgentOptions и установите UseBaseline параметр имеет значение true.
agentOpts = rlPGAgentOptions(... 'UseBaseline',true, ... 'DiscountFactor',0.99);
Затем создайте агента, используя указанное представление актера, базовое представление и параметры агента. Дополнительные сведения см. в разделе rlPGAgent.
agent = rlPGAgent(actor,baseline,agentOpts);
Для обучения агента сначала укажите варианты обучения. В этом примере используются следующие опции.
Запустить не более 1000 серий, причем каждый эпизод длится не более 200 временных шагов.
Отображение хода обучения в диалоговом окне «Менеджер эпизодов» (установите Plots и отключите отображение командной строки (установите Verbose опция).
Прекратите обучение, когда агент получит скользящее среднее совокупное вознаграждение, превышающее -45. В этот момент агент может контролировать положение массы, используя минимальное контрольное усилие.
Дополнительные сведения см. в разделе rlTrainingOptions.
trainOpts = rlTrainingOptions(... 'MaxEpisodes',1000, ... 'MaxStepsPerEpisode',200, ... 'Verbose',false, ... 'Plots','training-progress',... 'StopTrainingCriteria','AverageReward',... 'StopTrainingValue',-43);
Вы можете визуализировать систему двойного интегратора с помощью plot функция во время обучения или моделирования.
plot(env)

Обучение агента с помощью train функция. Обучение этого агента - интенсивный вычислительный процесс, который занимает несколько минут. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно подготовленный агент путем установки doTraining кому false. Чтобы обучить агента самостоятельно, установите doTraining кому true.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainOpts); else % Load the pretrained parameters for the example. load('DoubleIntegPGBaseline.mat'); end

Для проверки производительности обучаемого агента смоделируйте его в среде двойного интегратора. Дополнительные сведения о моделировании агентов см. в разделе rlSimulationOptions и sim.
simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);
totalReward = sum(experience.Reward)
totalReward = -43.0392
[1] Саттон, Ричард С. и Эндрю Г. Барто. Обучение усилению: введение. Второе издание. Серия адаптивных вычислений и машинного обучения. Кембридж, Массачусетс: MIT Press, 2018.