function f4=paper_lq(x1,x2,x3,x4)
theta=0;
mu_ra=0.0645;
mu_rb=0.0889;
mu_rc=0.043;
sigma_ra=0.008;
sigma_rb=0.07;
sigma_rc=0.004;
i=1;
M=384;
sum_f=0;
while i<100
f_1=cos(theta)*(x1+x3*normrnd(0,1)+normrnd(mu_rb,sigma_rb)*cos(unifrnd(0,2*pi))-normrnd(mu_ra,sigma_ra)*cos(unifrnd(0,2*pi)))+sqrt((x2+x4*normrnd(0,1)+normrnd(mu_rc,sigma_rc)*cos(unifrnd(0,2*pi))).^2-(x1+x3*normrnd(0,1)+normrnd(mu_rb,sigma_rb)*cos(unifrnd(0,2*pi))-normrnd(mu_ra,sigma_ra)*sin(theta)).^2);
f_2=cos(theta+0.0063)*(x1+x3*normrnd(0,1)+normrnd(mu_rb,sigma_rb)*cos(unifrnd(0,2*pi))-normrnd(mu_ra,sigma_ra)*cos(unifrnd(0,2*pi)))+sqrt((x2+x4*normrnd(0,1)+normrnd(mu_rc,sigma_rc)*cos(unifrnd(0,2*pi))).^2-(x1+x3*normrnd(0,1)+normrnd(mu_rb,sigma_rb)*cos(unifrnd(0,2*pi))-normrnd(mu_ra,sigma_ra)*sin(theta+0.0063)).^2);
f3=abs(f_1-f_2);
g1=(M*sqrt(M^2+f3.^2)-M)/(2*sqrt(M^2+f3.^2))-0.05;
g2=f3.*M/(2*sqrt(M^2+f3.^2))-0.5;
if(g1<=0)&(g2<=0)
f3=abs(f_1-f_2);
else
f3=abs(f_1-f_2)+10000;
end
sum_f=sum_f+f3;
i=i+1;
end
f4=sum_f/i;
大家帮我看下惩罚函数处 f3=abs(f_1-f_2)+10000;这样取对不对呢
下面的是遗传算法程序
tic
theta=0;
%定义遗传算法参数
NIND=500; %个体数目(Number of individuals)
MAXGEN=500; %最大遗传代数(Maximum number of generations)
NVAR=4; %变量数目
PRECI=25; %变量的二进制位数(Precision of variables)
GGAP=0.9; %代沟(Generation gap)
%建立区域描述器(Build field descriptor)
FieldD=[rep([PRECI],[1,NVAR]);rep([45 330 0.002 0.007;55 340 0.02 0.07],[1,1]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND, NVAR*PRECI); %创建初始种群
gen=0;
trace=zeros(MAXGEN, 4); %遗传算法性能跟踪初始值
x=bs2rv(Chrom, FieldD); %初始种群十进制转换
ObjV=paper_lq(x(:,1),x(:,2),x(:,3),x(:,4)); %计算初始种群的目标函数值
while gen
FitnV=ranking(ObjV); %分配适应度值(Assign fitness values)
SelCh=select('sus',Chrom,FitnV,GGAP); %选择
SelCh=recombin('xovsp',SelCh,0.7); %重组
SelCh=mut(SelCh); %变异
x=bs2rv(SelCh,FieldD); %子代十进制转换
ObjVSel=paper_lq(x(:,1),x(:,2),x(:,3),x(:,4));
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
gen=gen+1;
[Y, I]=min(ObjV);
Y,bs2rv(Chrom(I, ,FieldD) %输出每一次的最优解及其对应的自变量值
trace(gen,1)=min(ObjV); %遗传算法性能跟踪
trace(gen,2)=sum(ObjV)/length(ObjV);
if(gen==MAXGEN) %迭代数为MAXGEN时画出目标函数值分布图
figure(1);
plot(ObjV);hold on;
plot(ObjV,'b*');grid;
end
end
figure(2);clf;
plot(trace(:,1));hold on;
plot(trace(:,2),'-.');grid
legend('解的变化','种群均值的变化')
toc
大家帮我看下优化后的结果怎么样,这样的结果怎么样呢
![]()
171342vgfkc9frwwv5wcwv.jpg.thumb.jpg
![]()
迭代后结果 |