В этом примере показано, как обучить пользовательского агента линейного квадратичного регулирования (LQR) управлять линейной системой дискретного времени, смоделированной в MATLAB®.
Среда обучения с подкреплением для этого примера является линейной системой дискретного времени. Движущими силами для системы дают
Закон об управлении с обратной связью:
.
Цель управления состоит в том, чтобы минимизировать квадратичную стоимость .
В этом примере системные матрицы:
A = [1.05,0.05,0.05;0.05,1.05,0.05;0,0.05,1.05]; B = [0.1,0,0.2;0.1,0.5,0;0,0,0.5];
Квадратичные матрицы стоимости:
Q = [10,3,1;3,5,4;1,4,9]; R = 0.5*eye(3);
Для этой среды, вознаграждения во время дают , который является отрицанием квадратичной стоимости. Поэтому максимизация вознаграждения минимизирует стоимость. Начальные условия установлены случайным образом функцией сброса.
Создайте интерфейс среды MATLAB для этой линейной системы и вознаграждения. myDiscreteEnv функция создает среду путем определения пользовательского step и reset функции. Для получения дополнительной информации о создании такой пользовательской среды смотрите, Создают Среду MATLAB с помощью Пользовательских Функций.
env = myDiscreteEnv(A,B,Q,R);
Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.
rng(0)
Для проблемы LQR, Q-функции для данного усиления контроля может быть задан как , где симметричная, положительная определенная матрица.
Закон о надзоре, чтобы максимизировать , и усиление обратной связи
Матрица содержит отличные значения элемента, где сумма количества состояний и количества входных параметров. Обозначить как вектор, соответствующий им элементы, где недиагональные элементы в умножаются на два.
Представляйте Q-функцию , где содержит параметры, которые будут изучены.
, где квадратичная основная функция в терминах и .
Агент LQR запускается со стабилизировавшегося контроллера . Чтобы получить начальный контроллер стабилизации, поместите полюса системы с обратной связью в модульном кругу.
K0 = place(A,B,[0.4,0.8,0.5]);
Чтобы создать пользовательского агента, необходимо создать подкласс rl.agent.CustomAgent абстрактный класс. Для пользовательского агента LQR заданным пользовательским подклассом является LQRCustomAgent. Для получения дополнительной информации смотрите Пользовательских Агентов. Создайте пользовательское использование агента LQR , , и . Агент не запрашивает информацию на системных матрицах и .
agent = LQRCustomAgent(Q,R,K0);
В данном примере установите коэффициент дисконтирования агента на один. Чтобы использовать обесцененное будущее вознаграждение, установите коэффициент дисконтирования на значение меньше чем один.
agent.Gamma = 1;
Существует три состояния и три входных параметров для линейной системы, поэтому общее количество learnable параметров . Чтобы гарантировать удовлетворительную производительность агента, определите номер оценок параметра быть больше дважды количества learnable параметров. В этом примере значение .
agent.EstimateNum = 45;
Получить хорошую оценку заканчивается для , необходимо применить постоянно взволнованную модель исследования к системе. В этом примере исследование модели путем добавления белого шума в контроллер вывело: . В общем случае модель исследования зависит от системных моделей.
Чтобы обучить агента, сначала задайте опции обучения. В данном примере используйте следующие опции:
Запустите каждый эпизод тренировки для в большей части 10 эпизоды, с каждым эпизодом, длящимся в большей части 50 временные шаги.
Отобразитесь отображение командной строки (установите Verbose опция), и отключают процесс обучения в диалоговом окне Episode Manager (установите Plots опция).
Для получения дополнительной информации смотрите rlTrainingOptions.
trainingOpts = rlTrainingOptions(... 'MaxEpisodes',10, ... 'MaxStepsPerEpisode',50, ... 'Verbose',true, ... 'Plots','none');
Обучите агента с помощью train функция.
trainingStats = train(agent,env,trainingOpts);
Episode: 1/ 10 | Episode Reward : -56.92 | Episode Steps: 50 | Avg Reward : -56.92 | Step Count : 50 Episode: 2/ 10 | Episode Reward : -13.45 | Episode Steps: 50 | Avg Reward : -35.19 | Step Count : 100 Episode: 3/ 10 | Episode Reward : -21.52 | Episode Steps: 50 | Avg Reward : -30.63 | Step Count : 150 Episode: 4/ 10 | Episode Reward : -18.58 | Episode Steps: 50 | Avg Reward : -27.62 | Step Count : 200 Episode: 5/ 10 | Episode Reward : -11.43 | Episode Steps: 50 | Avg Reward : -24.38 | Step Count : 250 Episode: 6/ 10 | Episode Reward : -19.76 | Episode Steps: 50 | Avg Reward : -16.95 | Step Count : 300 Episode: 7/ 10 | Episode Reward : -12.21 | Episode Steps: 50 | Avg Reward : -16.70 | Step Count : 350 Episode: 8/ 10 | Episode Reward : -16.95 | Episode Steps: 50 | Avg Reward : -15.79 | Step Count : 400 Episode: 9/ 10 | Episode Reward : -45.29 | Episode Steps: 50 | Avg Reward : -21.13 | Step Count : 450 Episode: 10/ 10 | Episode Reward : -26.22 | Episode Steps: 50 | Avg Reward : -24.09 | Step Count : 500
Чтобы подтвердить производительность обученного агента, симулируйте его в среде MATLAB. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions и sim.
simOptions = rlSimulationOptions('MaxSteps',20);
experience = sim(env,agent,simOptions);
totalReward = sum(experience.Reward)totalReward = single
-7.8685
Можно вычислить оптимальное решение для проблемы LQR с помощью dlqr функция.
[Koptimal,P] = dlqr(A,B,Q,R);
Оптимальным вознаграждением дают .
x0 = experience.Observation.obs1.getdatasamples(1); Joptimal = -x0'*P*x0;
Вычислите ошибку в вознаграждении между обученным агентом LQR и оптимальным решением LQR.
rewardError = totalReward - Joptimal
rewardError = single
8.7034e-07
Просмотрите историю 2-нормы ошибки в усилениях между обученным агентом LQR и оптимальным решением LQR.
% number of gain updates len = agent.KUpdate; err = zeros(len,1); for i = 1:len % norm of error in the gain err(i) = norm(agent.KBuffer{i}-Koptimal); end plot(err,'b*-')

Вычислите норму конечной погрешности для усиления обратной связи.
gainError = norm(agent.K - Koptimal)
gainError = single
1.6082e-06
В целом, обученный агент нашел решение LQR, которое является близко к истинному оптимальному решению LQR.