遗传算法加入非线性约束求解
本人在做动力总成悬置系统优化设计C是约束条件
c=[3-fmin
fmax-(750*4/(30*sqrt(2)*4))
Zd-0.005];
其中fmin,fmax,Zd,是函数中求解的固有频率的最小值、最大值、以及动力总成的静位移
在用遗传算法工具箱优化不知道怎么添加这种约束
尝试了用惩罚函数法,将有约束转换成无约束求解
以下是运行主程序
clc;
clear;
format long;
r=1e8;
df=1e10;
k=0;
while df>0.0001
k=k+1;
r=r*0.999;
l=;
u=;
A=[];b=[];Aeq=[];Beq=[];
options=gaoptimset;
% options.TolX=1e-10;
options=gaoptimset(options,'Generations',50);
options=gaoptimset(options,'PopulationSize',20);
% options=gaoptimset(options,'Stall generations',50);
=ga(@again1,4,A,b,Aeq,Beq,l,u, options);
=again1(x,r);
df=abs(f-fc)
end
k
x,f
目标函数代码
。。。。。
f=0.2*(1-Joz)+0.2*(1-Jorx)+0.2*(3/fmin)+0.2*(fmax/(750*4/(30*sqrt(2)*4)))+0.2*(Zd/0.005);
c=[3-fmin
fmax-(750*4/(30*sqrt(2)*4))
Zd-0.005];
for i=1:3
fc=fc+(c(i)<0)*(1/c(i));
end
fc=f-r*fc;
但是运行总是提示
Error using functionHandleOrCell (line 13)
The constraint function must be a function handle.
Error in validate (line 141)
= functionHandleOrCell('NonconFcn',nonlcon);
Error in gacommon (line 68)
=
validate(options,type,nvars,fun,nonlcon,user_options);
Error in ga (line 319)
[x,fval,exitFlag,output,population,scores,FitnessFcn,nvars,Aineq,bineq,Aeq,beq,lb,ub,
...
希望可以提供下思路
直接在适应度函数那边把约束加上,判断语句用if 工具箱在哪里呢
页:
[1]