主要内容

多目标目标实现优化

这个例子展示了如何使用多目标目标实现方法来解决极点配置问题。该算法在函数中实现fgoalattain

描述系统演化的方程

考虑一个2输入2输出不稳定的设备。描述系统演化的方程 x t

d x d t 一个 x t + B u t

在哪里 u t 是输入(控制)信号。系统输出为

y t C x t

的矩阵 一个 B , C

A = [-0.5 0 0;0 -2 10;0 1 -2];B = [10 0;2 2;0 1];C = [1 0 0;0 0 1];

优化目标

假设控制信号 u t 与输出成比例 y t

u t K y t

对于某个矩阵 K

这意味着系统的进化 x t 是:

d x d t 一个 x t + B K C x t 一个 + B K C x t

优化的目标是设计 K 具有以下两个属性:

1.特征值的实部 一个 + B K C 小于[-5,-3,-1]。(这在对照文献中称为极点放置。)

2.abs ( K 的每个元素<= 4 K 介于-4和4之间)

为了解决优化问题,首先设定多目标目标:

目标= [-5,-3,-1];

将权重设置为与目标相等,以确保在目标中达到或超过目标的比例相同。

体重= abs(目标);

初始化输出反馈控制器

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

设置控制器上下界

lb = repmat(-4,size(K0))
磅=2×2-4 -4 -4 -4
ub = repmat(4,size(K0))
乌兰巴托=2×24 4 4 4

设置优化显示参数,每次迭代输出:

选项= optimoptions(“fgoalattain”“显示”“通路”);

创建一个向量值函数eigfun,返回闭环系统的特征值。这个函数需要额外的参数(即矩阵) 一个 B , C );传递这些参数最方便的方法是通过匿名函数:

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

调用优化求解器

开始优化我们称之为fgoalattain

[K ~ attainfactor] =...fgoalattain (eigfun K0、目标体重 ,[],[],[],[], 磅,乌兰巴托,[]选项);
成就最大线搜索定向Iter F-count因素约束steplength导数过程0 6 0 1.88521 1 13 20 0.3525 0.06863 - 1 -0.613 1.031 0.745 0.02998 - 1 2 3 27 -0.223 -0.1706 0.1071 1黑森修改4 34 -0.234 -0.2236 0.06654 1黑森修改两次5 41 -0.3568 0.007894 -0.0812 6 48 -0.3645 0.000145 1 -0.164黑森修改7 55 -0.3645 0 1 -0.00515黑森修改8 62 -0.3675 0.0001548 1 9 69 -0.3889 0.008327 -0.00751 -0.00812黑森修改两次黑森修改10 76 -0.3862 0 1 0.00568 11 83 -0.3863 4.926e-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- 40000 -0.2564 - 40000 - 40000

闭环系统的特征值在eigfun(K)中如下所示(它们也保存在输出fval中)

eigfun (K)
ans =3×1-6.9313 -4.1588 -1.4099

实现因素表示目标实现的水平。负的成就因子表示成就过高,正的成就因子表示成就不足。我们在这次运行中获得的价值获得因子表明,目标已经超额完成了近40%:

attainfactor
Attainfactor = -0.3863

通过ODE解的系统演化

下面是系统如何 x t 从时间0到时间4,使用计算的反馈矩阵 K ,从点x(0) =[1;1;1]开始。

首先求解微分方程:

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

然后绘制结果:

情节,xvals传奇(“x_1 (t)”“x_2 (t)”“x_3 (t)”“位置”“最佳”)包含(“t”);ylabel (“x (t)”);

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示x1 (t) x2 (t) x_3(t)

准确地设定目标

假设我们现在要求特征值尽可能接近目标值[-5,-3,-1]。集选项。EqualityGoalCount应该尽可能接近目标的目标数量(即,不要试图超额完成):

所有三个目标都应尽可能接近实际目标。

选项。equitygoalcount = 3;

调用优化求解器

我们已经准备好调用优化求解器:

[K fval attainfactor, exitflag,输出,λ)=...fgoalattain (eigfun K0、目标体重 ,[],[],[],[], 磅,乌兰巴托,[]选项);
实现最大行搜索方向Iter f计数因子约束步长导数程序06 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 0 0.005702 1 -0.116 Hessian modified 6 48 4.237e-19 9.646e-06 1 3.65e-17 Hessian modified 7 55 -1.581e-21 4.797e-11 1 -2.24e-14 Hessian modified局部最小值可能。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。

本方案控制参数的取值为:

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.5813e-21

通过ODE求解新系统的演化

下面是系统如何 x t 从时间0到时间4,使用新的计算反馈矩阵 K ,从点x(0) =[1;1;1]开始。

首先求解微分方程:

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

然后绘制结果:

情节,xvals传奇(“x_1 (t)”“x_2 (t)”“x_3 (t)”“位置”“最佳”)包含(“t”);ylabel (“x (t)”);

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示x1 (t) x2 (t) x_3(t)

另请参阅

相关的话题