В этом примере показано, как обучить пользовательского агента линейного квадратичного регулирования (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.