主要内容

多目标目标实现优化

这个例子展示了如何使用多目标目标实现方法解决极点放置问题。该算法在函数中实现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];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];

设定与目标相等的权重,以确保目标未完成或超额完成的百分比相同。

重量=腹肌(目标);

初始化输出反馈控制器

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

设置控制器的上界和下界

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

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

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

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

@(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.0001549 1 9 69 -0.3889 0.008326 -0.0075 -0.00812黑森修改两次黑森修改10 76 -0.3862 0 1 0.00568 11 83 -0.3863 5.561e-13 1 -0.998 Hessian修正两次可能的局部最小值。约束满足。由于当前搜索方向的大小小于步长容差值的两倍,并且在约束容差值内满足约束条件,因此停止搜索。

控制参数在解处的值为:

K
K =2×2-0.2564 -4.0000 -4.0000

闭环系统的特征值在igfun(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)”);

图包含一个轴对象。具有xlabel t, ylabel x(t)的axes对象包含3个类型为line的对象。这些对象表示x_1(t) x_2(t) x_3(t)

准确地设定要实现的目标

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

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

选项。EqualityGoalCount = 3;

呼叫优化求解器

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

[K fval attainfactor, exitflag,输出,λ)=fgoalattain (eigfun K0、目标体重 ,[],[],[],[], 磅,乌兰巴托,[]选项);
最大值线搜索方向Iter F-count因子约束步长导数程序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修改4 34 0.02684 0.03722 1 -0.166 Hessian修改5 41 -3.469e-18 0.0057031 1 -0.116 Hessian修改6 48 1.117e-18 9.612e-06 1 3.95e-16 Hessian修改7 55 -5.805e-21 4.77e-11 1 -5.93e-14 Hessian修改局部最小可能值。约束满足。由于当前搜索方向的大小小于步长容差值的两倍,并且在约束容差值内满足约束条件,因此停止搜索。

在此解下控制参数的值为:

K
K =2×2-1.5953 1.2040 -0.4201 -2.9047

此时闭环系统的特征值也保存在输出fval中,如下所示:

eigfun (K)
ans =3×1-5万-3万-1万

成就因素是目标实现的程度。负成就因子表示成就过高,正成就因子表示成就不足。得到的低达致因子表明特征值几乎完全达到了目标:

attainfactor
Attainfactor = -5.8048e-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)”);

图包含一个轴对象。具有xlabel t, ylabel x(t)的axes对象包含3个类型为line的对象。这些对象表示x_1(t) x_2(t) x_3(t)

另请参阅

相关的话题