Вы находитесь на странице: 1из 8

Московский государственный технический университет

Факультет ИУ «Информатика и системы управления»


Кафедра ИУ-1 «Системы автоматического управления»

ОТЧЕТ
по лабораторной работе №3

«Синтез оптимальных систем на основе принципа максима


Л.С. Понтрягина»

по дисциплине
«Основы теории оптимального управления»

Выполнила: Аронзон Э.А.


Группа: ИУ1-72
Вариант: 1

Проверил: Деменков Н.П.


Цель работы
Овладеть навыками и умением по построению оптимальных систем на
основе принципа максимума Л.С. Понтрягина.
Исходные данные
вар х1 (0) х2 (0) х3 (0) х4 (0) Нач. пр. Min J Фк 𝑡𝑘
1 -3 3 0.5 -0.5 (1;0.5) 𝑥1 (𝑡𝑘 )2 + 𝑥2 (𝑡𝑘 )2 - 3

Практическая часть
Проверим управляема ли система, для этого получим матрицы А и В:
𝑥̇ 1 = 𝑥3
𝑥̇ = 𝑥4
{ 2
𝑥̇ 3 = 𝑢1
𝑥̇ 4 = 𝑢2
𝑡 ∈ [0,3]
𝑥1 (𝑡𝑘 )2 + 𝑥2 (𝑡𝑘 )2 → 𝑚𝑖𝑛
|𝑢𝑗 | ≤ 𝑢𝑗𝑚𝑎𝑥
Получим уравнение Гамильтониана:
𝐻 = 𝑝1 𝑥3 + 𝑝2 𝑥4 + 𝑝3 𝑢1 + 𝑝4 𝑢2
Из
х̇ = Ах + В𝑢
0 0 1 0
0 0 0 1
𝐴=[ ]
0 0 0 0
0 0 0 0
0 0
0 0
𝐵=| |
1 0
0 1
Теперь через МатЛаб выполним проверку
unco получилось = 0, следовательно система управляема.
Найдем решения.
Минимизируем функционал:
𝐽 = 𝑥1 (𝑡𝑘 )2 + 𝑥2 (𝑡𝑘 )2 → 𝑚𝑖𝑛
При начальном приближении и начальных условиях решение будет
иметь вид:
𝑥1 = 0.5𝑡 2 + 0.5𝑡 − 3
𝑥2 = 0.25𝑡 2 − 0.5𝑡 + 3
𝑥3 = 𝑡 + 0.5
{ 𝑥4 = 0.5𝑡 − 0.5
Критерий качества J будет равен при 𝑡𝑘 =3:
𝐽 = (4.5 + 1.5 − 3)2 + (2.25 − 1.5 + 3)2 = 23.06
Максимизируем Гамильтониан.
Максимизация Гамильтониана основана на максимизации функции F:
𝐹 = 𝑝3 𝑢1 + 𝑝4 𝑢2
Тогда
𝜕𝐻
𝑝̇1 = − =0
𝜕𝑥1
𝜕𝐻
𝑝̇2 = − =0
𝜕𝑥2
𝜕𝐻
𝑝̇ 3 = − = −𝑝1
𝜕𝑥3
𝜕𝐻
𝑝̇4 = − = −𝑝2
{ 𝜕𝑥4
Отсюда
𝑝1 (𝑡𝑘 ) = 2𝑥1 (𝑡𝑘 )
𝑝2 (𝑡𝑘 ) = 2𝑥2 (𝑡𝑘 )
𝑝3 (𝑡𝑘 ) = 0
{ 𝑝4 (𝑡𝑘 ) = 0
𝑝1 = 6
𝑝2 = 7.5
{
𝑝3 = 18 − 6𝑡
𝑝4 = 22.5 − 7.5𝑡

Тогда функция F примет вид:

𝐹 = (18 − 6𝑡)𝑢1 + (22.5 − 7.5𝑡)𝑢2


Описание алгоритма модификации М4
Пусть 𝑡~ ∈ [𝑡 ′ , 𝑡𝑘 ].
Рассматривается множество:
𝐸𝑡~ℎ = [𝑡~ − ℎ, 𝑡~ + ℎ]\[𝑡 ′ , 𝑡𝑘 ], ℎ ≥ 0
Пусть 𝑢̅𝑡~ℎ (𝑡) – двухпараметрическое семейство допустимых
управлений:
𝑅𝑢 (𝑡) при 𝑡 ∈ 𝐸𝑡~ℎ
𝑢̅𝑡~ℎ (𝑡) = {
𝑢̅(𝑡) при 𝑡 ∈ [𝑡 ′ , 𝑡𝑘 ]\𝐸𝑡~ℎ
Положим:
∆𝑢 𝐻(𝑡) = (𝑝̅𝑢 , 𝑓(̅ 𝑥̅𝑢 , 𝑅𝑢 , 𝑡) − 𝑓(̅ 𝑥̅𝑢 , 𝑢̅, 𝑡), причем ∆𝑢 𝐻(𝑡) ≥ 0
Для данного управления 𝑢̅(𝑡) найдем точку 𝑡𝑢 ~ из условия:
∆𝑢 𝐻(𝑡𝑢 ~) = max ∆𝑢 𝐻(𝑡~) при 𝑡~ ∈ [𝑡 ′ , 𝑡𝑘 ]
Далее находится параметр hu как решение задачи на экстремум:
𝐽(𝑢̅) → min 𝐽(𝑢̅𝑡𝑢~ℎ ), где ℎ ∈ [0, max (𝑡𝑢 ~ − 𝑡 ′ , 𝑡𝑘 − 𝑡𝑢 ~)]
Обозначим 𝑅𝑢 = 𝑢̅𝑡𝑢 ~ℎ и построим последовательность допустимых
(𝑘)
управлений 𝑢̅(𝑘+1) = 𝑅𝑢 , 𝑘 = 1,2, …

В результате на первой итерации было получено: J=17.9267, на второй


итерации: J = 17.9229, на третьей J = 17.9229. Искомый функционал был
найден на второй итерации и оптимальное управление u = [-1,-1].
Рисунок 1 – График решений при u1 = 1 и u2 = 0.5

Рисунок 2 – График решений при u1 = -1 и u2 = -1


Код МатЛаба:

clear all
close all
clc

% Количество неуправляемых мод


A = [0 0 1 0; 0 0 0 1; 0 0 0 0; 0 0 0 0];
B = [0 0; 0 0; 1 0; 0 1];
Co = ctrb(A,B);
unco = length(A) - rank(Co)

% Начальные условия
global u; global p0; global c; global t_u; global h; global
p; global x;
x0 = [-3;3;0.5;-0.5];
t = 0:0.001:3;
u1 = 1;
u2 = 0.5;
u0 = [u1 u2];

%Первое решение
[t,X] = ode45(@(t,x) diff_sys(t,x,u0),t,x0);
plot(t,X(:,1),t,X(:,2))
grid on
grid minor
xlabel('Время,с')
ylabel('Решения')
title('Решения при u1 = 1 и u2 = 0.5')

tk = 3;
p1 = 6;
p2 = 7.5;
p3 = 18-6*tk;
p4 = 22.5-7.5*tk;
p = [p1, p2, p3, p4];
J = 23.06;
u1 = 1;
u2 = 0.5;
u = [u1 u2];
a = [1 0; -1 0; 0 1; 0 -1];
b = [1; 1; 1; 1];

[u,Hmax] = fmincon(@(u) H(X,u),u,a,b);

% Модификация М4
J_pr = 0;
h = 1.5;
count = 0;
t0 = 0;
t_x = [t0 tk];
t_p = [tk t0];
e = 0.001;

while(abs(J - J_pr) > e)

J_pr = J;
c = u;
[t1,x] = ode45(@(t,x) diff_sys(t,x,u),t_x,x0);
p0 = [2*x(1);2*x(2);0;0];

[t,p] = ode45(@p_sys,t_p,p0);
[t_u,out] = fmincon(@func1,1,[],[],[],[],0,10);
[h,out] = fmincon(@func2,h,[],[],[],[],-1,1);
[u,out] = fmincon(@(u) H(x,u),u,[],[],[],[],[-1 -1],[1 1]);

J = x(1)*x(1)+x(2)*x(2);
count = count + 1;
tk = t(1)

end

figure
plot(t1,x(: ,1),t1,x(:,2));
grid on
grid minor
xlabel('Время,с')
ylabel('Решения')
title('Решения при u1 = -1 и u2 = -1')
legend('x1','x2')

function diff = diff_sys(t,x,u)


diff = [x(3); x(4); u(1); u(2)];
end

function dpdt = p_sys(t,p)


dpdt = [0; 0; -p(1); -p(2)];
end

function [L] = func1(t_u)


global p; global x; global u; global c; global h;
if(abs(t_u - h) < 1)
delta = (+p(1)*x(3)+p(2)*x(4)+p(3)*c(1)+p(4)*c(2));
else
delta = 0;
end
L = -1*((p(1)*x(3)+p(2)*x(4)+p(3)*u(1)+p(4)*u(2)) - delta);
end

function [L] = func2(h)


global p; global x; global u; global c; global t_u;
if(abs(t_u - h) < 1)
delta = (p(1)*x(3)+p(2)*x(4)+p(3)*c(1)+p(4)*c(2));
else
delta = 0;
end
L = (-1)*((p(1)*x(3)+p(2)*x(4)+p(3)*u(1)+p(4)*u(2)) -
delta);
end

function L = H(X,u)
global p
L = (-1)*(p(1)*X(end,3) + p(2)*X(end,4) + p(3)*u(1) +
p(4)*u(2));
end

Вам также может понравиться