В этом примере показано, как решить задачу размещения полюсов с помощью метода достижения многообъективной цели. Этот алгоритм реализован в функции fgoalattain.
Рассмотрим неустойчивую установку с 2 входами и 2 выходами. Уравнение, описывающее эволюцию системы
Bu (t),
где ) - входной (управляющий) сигнал. Выходной сигнал системы:
(t).
Матрицы , и представляют собой
A = [ -0.5 0 0; 0 -2 10; 0 1 -2 ]; B = [ 1 0; -2 2; 0 1 ]; C = [ 1 0 0; 0 0 1 ];
Предположим, что управляющий сигнал ) установлен пропорционально выходному сигналу t):
(t)
для некоторой матрицы .
Это означает, что эволюция системы ) такова:
BKC) x (t).
Целью оптимизации является проектирование , имеющего следующие два свойства:
1. Действительные части собственных значений BKC) меньше [-5, -3, -1]. (В литературе по управлению это называется размещением полюсов.)
2. abs K) < = 4 (каждый элемент K находится между -4 и 4)
Чтобы решить оптимизацию, сначала задайте многообъективные цели:
goal = [-5, -3, -1];
Установите веса, равные целям, чтобы обеспечить одинаковый процент недостижения или чрезмерного достижения целей.
weight = abs(goal);
Инициализация контроллера выходной обратной связи
K0 = [ -1 -1; -1 -1];
Установить верхний и нижний границы на контроллере
lb = repmat(-4,size(K0))
lb = 2×2
-4 -4
-4 -4
ub = repmat(4,size(K0))
ub = 2×2
4 4
4 4
Задайте параметр отображения оптимизации для вывода на каждой итерации:
options = optimoptions('fgoalattain','Display','iter');
Создайте векторнозначную функцию eigfun, которая возвращает собственные значения системы замкнутого цикла. Эта функция требует дополнительных параметров (а именно, матриц , и ); наиболее удобным способом их передачи является анонимная функция:
eigfun = @(K) sort(eig(A+B*K*C));
Чтобы начать оптимизацию, вызываем fgoalattain:
[K,~,attainfactor] = ...
fgoalattain(eigfun,K0,goal,weight,[],[],[],[],lb,ub,[],options); Attainment Max Line search Directional
Iter F-count factor constraint steplength derivative Procedure
0 6 0 1.88521
1 13 1.031 0.02998 1 0.745
2 20 0.3525 0.06863 1 -0.613
3 27 -0.1706 0.1071 1 -0.223 Hessian modified
4 34 -0.2236 0.06654 1 -0.234 Hessian modified twice
5 41 -0.3568 0.007894 1 -0.0812
6 48 -0.3645 0.000145 1 -0.164 Hessian modified
7 55 -0.3645 0 1 -0.00515 Hessian modified
8 62 -0.3675 0.0001546 1 -0.00812 Hessian modified twice
9 69 -0.3889 0.008328 1 -0.00751 Hessian modified
10 76 -0.3862 0 1 0.00568
11 83 -0.3863 2.955e-13 1 -0.998 Hessian modified twice
Local minimum possible. Constraints satisfied.
fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are
satisfied to within the value of the constraint tolerance.
Значение управляющих параметров в решении:
K
K = 2×2
-4.0000 -0.2564
-4.0000 -4.0000
Собственные значения системы с замкнутым контуром находятся в собственном fun (K) следующим образом: (они также удерживаются в выходном fval)
eigfun(K)
ans = 3×1
-6.9313
-4.1588
-1.4099
Коэффициент достижения указывает на уровень достижения цели. Отрицательный коэффициент достижения указывает на чрезмерное достижение, положительный - на недостаточное достижение. Показатель стоимости, полученный в этом прогоне, указывает на то, что цели были перевыполнены почти на 40 процентов:
attainfactor
attainfactor = -0.3863
Вот как система ) развивается от времени 0 к времени 4, используя вычисленную матрицу обратной связи K, начиная с точки x (0) = [1; 1; 1].
Сначала решите дифференциальное уравнение:
[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);
Затем постройте график результата:
plot(Times,xvals) legend('x_1(t)','x_2(t)','x_3(t)','Location','best') xlabel('t'); ylabel('x(t)');

Предположим, теперь мы требуем, чтобы собственные значения были как можно ближе к целевым значениям, [-5, -3, -1]. Набор options.EqualityGoalCount к числу целей, которые должны быть как можно ближе к целям (т.е. не пытайтесь перевыполнить):
Все три цели должны быть как можно ближе к целям.
options.EqualityGoalCount = 3;
Мы готовы вызвать решатель оптимизации:
[K,fval,attainfactor,exitflag,output,lambda] = ...
fgoalattain(eigfun,K0,goal,weight,[],[],[],[],lb,ub,[],options); Attainment Max Line search Directional
Iter F-count factor constraint steplength derivative Procedure
0 6 0 1.88521
1 13 1.031 0.02998 1 0.745
2 20 0.3525 0.06863 1 -0.613
3 27 0.1528 -0.009105 1 -0.22 Hessian modified
4 34 0.02684 0.03722 1 -0.166 Hessian modified
5 41 4.51e-17 0.005703 1 -0.116 Hessian modified
6 48 -1.242e-18 9.626e-06 1 -3.99e-15 Hessian modified
7 55 -6.783e-22 4.925e-11 1 6.55e-14 Hessian modified
Local minimum possible. Constraints satisfied.
fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are
satisfied to within the value of the constraint tolerance.
Значение управляющих параметров при этом решении:
K
K = 2×2
-1.5953 1.2040
-0.4201 -2.9047
На этот раз собственные значения системы замкнутого контура, которые также удерживаются на выходе fval, следующие:
eigfun(K)
ans = 3×1
-5.0000
-3.0000
-1.0000
Фактором достижения является уровень достижения цели. Отрицательный коэффициент достижения указывает на чрезмерное достижение, положительный - на недостаточное достижение. Полученный низкий достижимый коэффициент указывает на то, что собственные значения почти точно достигли целей:
attainfactor
attainfactor = -6.7825e-22
Вот как система ) развивается от времени 0 к времени 4, используя новую вычисленную матрицу обратной связи K, начиная с точки x (0) = [1; 1; 1].
Сначала решите дифференциальное уравнение:
[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);
Затем постройте график результата:
plot(Times,xvals) legend('x_1(t)','x_2(t)','x_3(t)','Location','best') xlabel('t'); ylabel('x(t)');
