matlab遗传算法求函数极值,加粗那行出现问题咋解决呀,求帮忙!
代码如下
clc
clear all
close all
%定义自变量的范围
lbx1=-5.12;ubx1=5.12;
lbx2=-5.12;ubx2=5.12;
%% 定义遗传算法参数
NIND=100; %个体数目
MAXGEN=30; %最大遗传代数
PRECI=20; %变量的二进制位数
GGAP=0.95; %代沟
px=0.6; %交叉概率
pm=0.1; %变异概率
trace=zeros(MAXGEN,2); %寻优结果的初始值
FieldD=[PRECI PRECI;lbx1 lbx2;ubx1 ubx2;1 1;0 0;1 1;1 1 ]; %区域描述器
Chrom=crtbp(NIND,PRECI2); %初始种群
%% 优化
gen=0; %代计数器
X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换
X1=X(:,1);X2=X(:,2);
ObjV=20+X1.2+X2.2-10(cos(2piX1)+cos(2piX2)); %计算目标函数值
while gen<MAXGEN
FitnV=ranking(ObjV); %分配适应度值
SelCh=select(‘sus’,Chrom,FitnV,GGAP); %选择
SelCh=recombin(‘xovsp’,SelCh,px); %重组
SelCh=mut(SelCh,pm); %变异
X=bs2rv(SelCh,FieldD); %子代个体的十进制转换
X1=X(:,1);X2=X(:,2);
ObjVSel=20+X1.2+X2.2-10*(cos(2piX1)+cos(2piX2)); %计算子代的目标函数值
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群
X=bs2rv(Chrom,FieldD);
X1=X(:,1);X2=X(:,2);
gen=gen+1; %代计数器增
if mod(gen,10)==0
for i=1:NIND
x=X(i,:); %X_init拿来装每次起始的自变量值,是个行向量
%X_min=zeros(2,NIND); %X_min拿来记录每次求出最小值对应的自变量。每列代表一次求出的自变量值们
%Z_min=zeros(NIND,1); %Z_min拿来记录每次求出的最小值
[X_min(:,i),Z_min(i)]=fmincon(inline('20+X1.2+X2.2-10(cos(2piX1)+cos(2piX2))’),x,[],[],[-5.12 -5.12],[5.12 5.12]);*
end
[A,I]=min(Z_min);trace(gen,1)=A;trace(gen,2)=X_min(1,I);trace(gen,3)=X_min(2,I);
else
[A,I]=min(ObjV);trace(gen,1)=A;trace(gen,2)=X1(I);trace(gen,3)=X2(I);
end
end
%% 画进化图
figure(1);
plot(1:MAXGEN,trace(:,1));
grid on
xlabel(‘遗传代数’)
ylabel(‘解的变化’)
title(‘进化过程’)
bestZ=trace(1,end);
bestX1=trace(2,end);
bestX2=trace(3,end);
fprintf([‘最优解:\nX1=’,num2str(bestX1),’\nX2=’,num2str(bestX2),’\nZ=’,num2str(bestZ),’\n’])
问题如下图
求帮忙!!!