主要内容

多目标达成优化

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

描述系统演化的方程

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

D x D T = A. x ( T ) + B U ( T ) ,

哪里 U ( T ) 是输入(控制)信号。系统的输出为

Y ( T ) = C x ( T ) .

矩阵 A. , B , C

A=[-0.50;0-210;01-2];B=[10;-22;01];C=[10;01];

优化目标

假设控制信号 U ( T ) 是否与输出成正比 Y ( T ) :

U ( T ) = K Y ( T )

对于某些矩阵 K .

这意味着系统的进化 x ( T ) 是:

D x D T = A. x ( T ) + B K C x ( T ) = ( A. + B K C ) x ( T ) .

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

1.特征值的实部 ( A. + B K C ) 小于[-5,-3,-1]。(在控制文献中,这被称为极点配置。)

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

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

[-5, -3, -1];

将权重设置为与目标相等,以确保目标实现率相同。

体重=绝对值(目标);

初始化输出反馈控制器

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

设置控制器的上限和下限

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

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

选择= optimoptions (“fgoalattain”,“显示”,“国际热核实验堆”);

创建一个向量值函数eigfun,返回闭环系统的特征值。此函数需要附加参数(即矩阵 A. , B , C );最方便的传递方式是通过匿名函数:

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

调用优化求解器

开始我们称之为fgoalattain:

[K,~,可达因子]=...fgoalattain(eigfun,K0,目标,重量,[],[],[],[],[],[],[],[],[],磅,ub,[],选项);
达到最大线搜索方向Iter F计数因子约束步长导数程序0 6 0 1.88521 1 13 1.031 0.02998 1 0.745 2 20 0.3525 0.06863 1-0.613 3 3 27-0.1706 0.1071-0.223 Hessian修改4 34-0.2236 0.06654 1-0.234 Hessian修改两次5 41-0.3568 0.007894 1-0.0812 6 48-0.3645 0.000145 1-0.164 Hessian修改d 7 55-0.3645 0 1-0.00515 Hessian修改8 62-0.3675 0.0001548 1-0.00812 Hessian修改两次9 69-0.3889 0.008327 1-0.00751 Hessian修改10 76-0.3862 0 1 0.00568 11 83-0.3863 4.926e-13 1-0.998 Hessian修改两次局部最小值。满足约束条件。由于当前搜索方向的大小,fgoalattain停止小于步长公差值的两倍,且满足的约束在约束公差值范围内。

求解时的控制参数值为:

K
K =2×2-4.0000 -0.2564

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

艾格芬(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]);

然后绘制结果:

绘图(时间、xVAL)图例(‘x_1(t)’,‘x_2(t)’,“x_3 (t)”,“位置”,“最好的”)包含(“不”); 伊拉贝尔(‘x(t)’);

图中包含一个Axis对象。Axis对象包含3个line类型的对象。这些对象表示x_1(t)、x_2(t)、x_3(t)。

设定要准确实现的目标

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

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

options.EqualityGoalCount=3;

调用优化求解器

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

[K,fval,可达因子,exitflag,输出,λ]=...fgoalattain(eigfun,K0,目标,重量,[],[],[],[],[],[],[],[],[],磅,ub,[],选项);
达到最大线搜索定向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.22 0.1528 -0.009105 1黑森修改4 34 -0.166 0.02684 0.03722 1黑森修改5 41 0 9.646 4.237 0.005702 1 -0.116黑森修改6 48 e-19 e-06 e-17 1 3.654.797e-11 1 -2.24e-14 Hessian修改的局部最小可能。约束满足。Fgoalattain停止是因为当前搜索方向的大小小于步长公差值的两倍,并且约束条件满足到约束公差值之内。

此解决方案中的控制参数值为:

K
K =2×2-1.5954 1.2040 -0.4201 -2.9046

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

艾格芬(K)
ans=3×1-5.0000 -3.0000 -1.0000

成就因子是目标成就的水平。负成就因子表示成就过高,正成就因子表示成就不足。获得的低成就因子表示特征值几乎完全满足目标:

attainfactor
attainfactor = -1.5813 e-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]);

然后绘制结果:

绘图(时间、xVAL)图例(‘x_1(t)’,‘x_2(t)’,“x_3 (t)”,“位置”,“最好的”)包含(“不”); 伊拉贝尔(‘x(t)’);

图中包含一个Axis对象。Axis对象包含3个line类型的对象。这些对象表示x_1(t)、x_2(t)、x_3(t)。

另见

相关的话题