В этом примере показано, как обучить агента градиента политики (PG) с базовым уровнем для управления динамической системой второго порядка, смоделированной в MATLAB ® .
Для получения дополнительной информации об основном агенте PG без базовой линии смотрите пример Обучите агента PG для балансировки системы тележки с шестом.
Окружение обучения с подкреплением для этого примера является системой двойного интегратора второго порядка с усилением. Цель обучения состоит в том, чтобы управлять положением массы в системе второго порядка путем применения входного параметра силы.
Для этого окружения:
Масса начинается с начального положения от -2 до 2 модулей.
Сигнал действия силы от агента к окружению от -2 до 2 Н.
Наблюдения от окружения являются положением и скоростью массы.
Эпизод прекращается, если масса перемещается более чем на 5 м от исходного положения или если .
Вознаграждение , предоставляемый на каждом временном шаге, является дискретизацией :
Здесь:
- вектор состояния массы.
- сила, приложенная к массе.
- веса на эффективности системы управления; .
- вес усилия по управлению; .
Для получения дополнительной информации об этой модели смотрите Загрузка предопределённых окружений системы управления.
Создайте предопределенный интерфейс окружения для маятника.
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] Саттон, Ричард С. и Эндрю Г. Барто. Обучение с подкреплением: введение. Второе издание. Серия адаптивных расчетов и машинного обучения. Cambridge, MA: The MIT Press, 2018.