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

В этом примере показано, как решить задачу размещения полюса с помощью многоцелевого целевого метода достижения. Этот алгоритм реализован в функциональном 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.0001548            1        -0.00812    Hessian modified twice  
    9     69        -0.3889      0.008327            1        -0.00751    Hessian modified  
   10     76        -0.3862             0            1         0.00568     
   11     83        -0.3863     2.147e-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

Фактор достижения указывает на уровень целевого достижения. Отрицательный фактор достижения указывает, что сверхдостижение, положительное, указывает на низкую успеваемость. Значение attainfactor, который мы получили в этом запуске, указывает, что цели были сверхдостигнуты почти на 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)');

Установите цели, которые будут достигнуты точно

Предположим, что мы теперь требуем, чтобы собственные значения были почти возможны к целевым значениям, [–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      1.041e-17      0.005702            1          -0.116    Hessian modified  
    6     48     -8.674e-19     9.704e-06            1       -9.74e-16    Hessian modified  
    7     55     -1.329e-21     4.965e-11            1        4.54e-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.5954    1.2040
   -0.4201   -2.9046

На этот раз собственные значения системы замкнутого цикла, которые также сохранены в выходе fval, следующие:

eigfun(K)
ans = 3×1

   -5.0000
   -3.0000
   -1.0000

Фактором достижения является уровень целевого достижения. Отрицательный фактор достижения указывает, что сверхдостижение, положительное, указывает на низкую успеваемость. Низкий полученный attainfactor указывает, что собственные значения почти точно удовлетворили целям:

attainfactor
attainfactor = -1.3288e-21

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

Вот то, как система 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)');

Смотрите также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте