资源描述
悬置系统的多方向解耦率优化可以简化为一个多目标非线性优化问题。
解决多目标的非线性优化问题,此问题可以归结为如下模型:
min γ (x)
使得:F(x) − weight *γ ≤ goal
A*x ≤ b ,Aeq *x = beq
c(x) ≤ 0, ceq(x) = 0
lb ≤ x ≤ ub
其中x、weight、goal、b、beq、lb和ub是向量,A和Aeq是矩阵;c(x)、ceq(x)和F(x)是返回向量的函数,他们可以是非线性函数。F(x)是目标函数,goal是欲达到的目标。
调用形式
x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,...lb,ub,nonlcon,options)
[x,fval] = fgoalattain(...)
[x,fval,attainfactor] = fgoalattain(...)
[x,fval,attainfactor,exitflag] = fgoalattain(...) book.iLoveM
[x,fval,attainfactor,exitflag,output] = fgoalattain(...)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...)
调用说明
fgoalattain函数用于获得目标函数fun中设置的参数x(x可为向量)的值,使得fun的值接近于目标值goal,达到优化fun函数的目的。
x = fgoalattain(fun,x0,goal,weight); x0是为fun中未知参数x设置的初始值,x的取值将从x0开始搜索,goal为欲达到的目标值,weight为模型中所加的权重。
x = fgoalattain(fun,x0,goal,weight,A,b); 增加了线性约束条件A*x <= b,缩小了参数x的取值范围。
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq); 使得x的取值必须满足线性方程组Aeq*x = beq,当无约束条件A*x <= b。时应将A和b置为:A=[],b=[]。
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub); 为x设定了上限ub和下限lb,使得lb <= x <= ub。
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon); nonlcon为关于x的非线性函数ceq(x) = 0,增加了参数x的非线性约束条件;当x不需设定上下限时,设置:lb=[],ub=[]。
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,... options) ;
options为fgoalattain可选的优化选项,可通过函数optimset来设置。
[x,fval] = fgoalattain(...); fval为目标函数fun中设定的参数值取x时获得的结果。
[x,fval,attainfactor] = fgoalattain(...); attainfactor返回代表fval与goal逼近程度的数字。
[x,fval,attainfactor,exitflag] = fgoalattain(...) ; exitflag的值用于描述fgoalattain获得结果的状态。
[x,fval,attainfactor,exitflag,output]= fgoalattain(...); output返回一个结构体,描述fgoalattain在计算过程中用到的优化算法及其计算情况。
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...) ; lambda返回一个结构体,它的域中包含了参数x的拉格朗日乘子。
参数说明
nonlcon参数: 该函数计算非线性不等式约束c(x) <=0和非线性等式约束ceq(x)=0。nonlcon函数是一个包含函数名的字符串,该函数可以是M文件、内部函数或MEX文件。nonlcon函数需要输入向量x,返回两个变量—x处的非线性不等式向量c和x处的非线性等式向量ceq。例如,若nonlcon='mycon',则M文件的形式如下:
function [c,ceq] = mycon(x)
c = ...
计算x处的非线性不等式。
ceq = ...
计算x处的非线性等式。
若约束函数的梯度可以计算,且options.GradConstr设为'on',即 options = optimset('GradConstr','on') ,则函数nonlcon也必须在第三个和第四个输出变量中输出c(x)的梯度GC和ceq(x)的梯度GCeq。注意,可以通过核对nargout参数来避免计算GC和GCeq。
function [c,ceq,GC,GCeq] = mycon(x)
c = ...
x处的非线性不等式。
ceq = ...
x处的非线性等式。
if nargout > 2
被调用的nonlcon函数,有4个输出。
GC = ...
不等式的梯度。
GCeq = ... b
等式的梯度。
end
若nonlcon函数返回m元素的向量c和长度为n的x,则c(x)的梯度GC是一个n*m的矩阵,其中GC(i,j)是c(j)对x(i)的偏导数。同样,若ceq是一个p元素的向量,则ceq(x)的梯度Gceq是一个n*p的矩阵,其中Gceq(i,j)是ceq(j)对x(i)的偏导数。
options变量 :优化参数选项。你可以用optimset函数设置或改变这些参数的值。
DerivativeCheck – 比较用户提供的导数(目标函数或约束函数的梯度)和有限差分导数。
Diagnostics – 打印将要最小化或求解的函数的诊断信息。 Matlab中文论坛
DiffMaxChange – 变量中有限差分梯度的最大变化。
DiffMinChange - 变量中有限差分梯度的最小变化。
Display – 显示水平。设置为'off'时不显示输出;设置为'iter'时显示每一次迭代的输出;设置为'final'时只显示最终结果。
GoalExactAchieve – 使得目标个数刚好达到,不多也不少。
GradConstr – 用户定义的约束函数的梯度。
GradObj – 用户定义的目标函数的梯度。使用大型方法时必须使用梯度,对于中型方法则是可选项。 《Simulink与信号处理》
MaxFunEvals – 函数评价的允许最大次数。
MaxIter – 函数迭代的允许最大次数。
MeritFunction – 如果设为'multiobj',则使用目标达到或最大最小化目标函数的方法。若设置为'singleobj',则使用fmincon 函数计算目标函数。
TolCon – 约束矛盾的终止容限。
TolFun – 函数值处的终止容限。
TolX – x处的终止容限。
weight变量 :为权重向量,可以控制低于或超过fgoalattain函数指定目标的相对程度。当goal的值都是非零值时,为了保证活动对象超过或低于的比例相当,将权重函数设置为abs(goal) (活动对象为阻止解处目标改善的对象集合)。
实例分析:
某轿车上采用三点悬置,悬置的初始参数已给定,需要对悬置参数进行优化从而提高悬置系统的解耦率,初始参数为x0。
首先编写通过初始参数计算出悬置系统解耦率函数:
Energy.m
然后找出解耦率矩阵中需要优化的目标,垂向和侧倾解耦率,设为目标函数:
Objfun.m
编写优化函数MutliObjOpti.m
优化函数中主要设置参数:
Options = optimset (Display,final, MaxFunEvals,100000, MaxIter,5000,)
Options中可设置更多参数。
[x,fval,attainfactor,exitflag] = fgoalattain (@Objfun, x0, goal, weight, A, b, Aeq, beq,...lb,ub,nonlcon,options)
Goal为[100,100]
A, b, Aeq, beq均为[ ],表示不起约束作用
lb,ub主要设置为悬置参数中位置、刚度、角度所允许变化的范围。
Nonlcon为非线性约束,其中Ceq = [ ],主要利用不等式约束C来对刚度间的关系进行约束,对频率进行约束。例:
一号悬置刚度k1/k2<3,第一阶频率10Hz<f(1)<15Hz,设置为
C(1)=x(4,1) - 3*x(5,1) %表示一号悬置刚度关系
C(2)=10- f(1) %一阶频率大于10Hz
C(3)= f(1)-15 %一阶频率小于15Hz
由于本地电脑上没有完整程序,没有完整程序运行结果,对此深表歉意。
展开阅读全文