Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Optimización de logro de objetivos multi-objetivo

Este ejemplo muestra cómo resolver un problema de colocación de polos utilizando el método de consecución de objetivos multiobjetivo. Este algoritmo se implementa en la función.fgoalattain

Ecuación que describe la evolución del sistema

Considere una planta inestable de 2 entradas y 2 salidas. La ecuación que describe la evolución del sistema x (t) es

<math display="block">
<mrow>
<mfrac>
<mrow>
<mi>d</mi>
<mi>x</mi>
</mrow>
<mrow>
<mi>d</mi>
<mi>t</mi>
</mrow>
</mfrac>
<mo>=</mo>
<mi>A</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>B</mi>
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>,</mo>
</mrow>
</math>

donde u (t) es la señal de entrada (control). La salida del sistema es

<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>C</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>.</mo>
</mrow>
</math>

Las matrices A, B y C son

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

Objetivo de optimización

Supongamos que la señal de control u (t) se establece como proporcional a la salida y (t):

<math display="block">
<mrow>
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>K</mi>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>

para una matriz K.

Esto significa que la evolución del sistema x (t) es:

<math display="block">
<mrow>
<mfrac>
<mrow>
<mi>d</mi>
<mi>x</mi>
</mrow>
<mrow>
<mi>d</mi>
<mi>t</mi>
</mrow>
</mfrac>
<mo>=</mo>
<mi>A</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>B</mi>
<mi>K</mi>
<mi>C</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mi>A</mi>
<mo>+</mo>
<mi>B</mi>
<mi>K</mi>
<mi>C</mi>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mo>.</mo>
</mrow>
</math>

El objetivo de la optimización es diseñar K para tener las dos propiedades siguientes:

1. Las partes reales de los valores propios de (A + B * K * C) son más pequeñas que [-5,-3,-1]. (Esto se denomina colocación de polos en la literatura de control.)

2. ABS (K) < = 4 (cada elemento de K está entre-4 y 4)

Con el fin de resolver la optimización, primero establecer los objetivos multiobjetivos:

goal = [-5, -3, -1];

Establezca las ponderaciones iguales a los objetivos para garantizar el mismo porcentaje de logro bajo o exceso en los objetivos.

weight = abs(goal);

Inicializar el controlador de retroalimentación de salida

K0 = [ -1 -1; -1 -1];

Establezca los límites superior e inferior en el controlador

lb = repmat(-4,size(K0)) 
lb = 2×2

    -4    -4
    -4    -4

ub = repmat(4,size(K0))
ub = 2×2

     4     4
     4     4

Establezca el parámetro de visualización de optimización para dar salida en cada iteración:

options = optimoptions('fgoalattain','Display','iter');

Cree una función con valores vectoriales eigfun que devuelva los valores propios del sistema de bucle cerrado. Esta función requiere parámetros adicionales (es decir, las matrices A, B y C); la forma más conveniente de pasar estos es a través de una función anónima:

eigfun = @(K) sort(eig(A+B*K*C));

El solucionador de optimización de llamadas

Para comenzar la optimización llamamos a FGOALALCANZ:

[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     3.081e-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. 

El valor de los parámetros de control en la solución es:

K
K = 2×2

   -4.0000   -0.2564
   -4.0000   -4.0000

Los valores propios del sistema de lazo cerrado se encuentran en eigfun (K) de la siguiente manera: (también se mantienen en FVal de salida)

eigfun(K)
ans = 3×1

   -6.9313
   -4.1588
   -1.4099

El factor de logro indica el nivel de logro de objetivos. Un factor de logro negativo indica un exceso de rendimiento, lo que indica que el rendimiento es menor. El factor de valor que hemos obtenido en esta carrera indica que los objetivos han sido sobrealcanzados por casi el 40 por ciento:

attainfactor
attainfactor = -0.3863 

Evolución del sistema vía solución a ODE

Aquí es cómo el sistema x (t) evoluciona desde el tiempo 0 al tiempo 4, utilizando la matriz de retroalimentación calculada K, a partir del punto x (0) = [1; 1; 1].

Primero resuelva la ecuación diferencial:

[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);

A continuación, trace el resultado:

plot(Times,xvals) legend('x_1(t)','x_2(t)','x_3(t)','Location','best') xlabel('t'); ylabel('x(t)');

Establezca metas que se logren exactamente

Supongamos que ahora requerimos que los valores autovalores estén lo más cerca posible de los valores del objetivo, [-5,-3,-1]. Configure las opciones. Goalsexactlograr el número de objetivos que deben ser lo más cerca posible de los objetivos (es decir, no tratar de sobrealcanzar):

Los tres objetivos deben ser lo más cerca posible de los objetivos.

options.GoalsExactAchieve = 3;

El solucionador de optimización de llamadas

Estamos listos para llamar al solucionador de optimización:

[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      6.939e-18      0.005702            1          -0.116    Hessian modified       6     48              0     9.674e-06            1       -5.99e-16    Hessian modified       7     55      -2.06e-21     4.662e-11            1       -1.08e-16    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. 

El valor de los parámetros de control en esta solución es:

K
K = 2×2

   -1.5954    1.2040
   -0.4201   -2.9046

Esta vez los valores propios del sistema de lazo cerrado, que también se mantienen en la salida FVal, son los siguientes:

eigfun(K)
ans = 3×1

   -5.0000
   -3.0000
   -1.0000

El factor de logro es el nivel de logro de objetivos. Un factor de logro negativo indica un exceso de rendimiento, lo que indica que el rendimiento es menor. El factor de bajo nivel obtenido indica que los valores propios han alcanzado casi exactamente los objetivos:

attainfactor
attainfactor = -2.0602e-21 

Evolución del nuevo sistema vía solución a ODE

Aquí es cómo el sistema x (t) evoluciona desde el tiempo 0 al tiempo 4, utilizando la nueva matriz de retroalimentación calculada K, a partir del punto x (0) = [1; 1; 1].

Primero resuelva la ecuación diferencial:

[Times, xvals] = ode45(@(u,x)((A + B*K*C)*x),[0,4],[1;1;1]);

A continuación, trace el resultado:

plot(Times,xvals) legend('x_1(t)','x_2(t)','x_3(t)','Location','best') xlabel('t'); ylabel('x(t)');