Многоцелевая оптимизация достижения цели

Этот пример показывает, как решить задачу размещения полюсов с помощью метода мультиобъективного достижения цели. Этот алгоритм реализован в функции fgoalattain.

Уравнение, которое описывает эволюцию системы

Рассмотрим 2-входный 2-выходной нестабильный объект. Уравнение, описывающее эволюцию системы x(t) является

dxdt=Ax(t)+Bu(t),

где u(t) - вход (управляющий) сигнал. Выходные выходы системы:

y(t)=Cx(t).

Матрицы A, B, и C являются

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 ];

Цель оптимизации

Предположим, что сигнал управления u(t) задается как пропорциональный выходу y(t):

u(t)=Ky(t)

для некоторой матрицы K.

Это означает, что эволюция системы x(t) является:

dxdt=Ax(t)+BKCx(t)=(A+BKC)x(t).

Объект оптимизации состоит в том, чтобы спроектировать K иметь следующие два свойства:

1. Действительные части собственных значений (A+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, которая возвращает собственные значения системы замкнутого цикла. Эта функция требует дополнительных параметров (а именно, матриц A, B, и C); самый удобный способ их прохождения - через анонимную функцию:

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

Собственные значения системы замкнутого цикла находятся в eigfun (K) следующим образом: (они также удерживаются в выходе fval)

eigfun(K)
ans = 3×1

   -6.9313
   -4.1588
   -1.4099

Коэффициент достижения указывает на уровень достижения цели. Отрицательный коэффициент достижения указывает на избыточное достижение, положительный указывает на недостаточное достижение. Достигнутый нами в этом запуске показатель значения показывает, что цели были слишком достигнуты почти на 40 процентов:

attainfactor
attainfactor = -0.3863

Эволюция системы через решение ОДУ

Вот как система x(t) развивается от времени 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)');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent x_1(t), x_2(t), x_3(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

Эволюция новой системы через решение ОДУ

Вот как система x(t) развивается от времени 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)');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent x_1(t), x_2(t), x_3(t).

См. также

Похожие темы