end
gbest=x(1,:);
%gbest 为全局最优
if fitness(x(i,:)) > fitness(gbest)
gbest=x(i,:);
for i=2:M
end
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for t=1:MaxDT
time(t)=t;
for i=1:M
v(i,:)=w*v(i,:)+c1*rand*(xgb(i,:)-x(i,:))+c2*rand*(gbest-x(i,:));
x(i,:)=x(i,:)+v(i,:);
for j=1:D
if x(i,j)>Y1
x(i,j)=Y1;
end
if x(i,j)
figure(2)
plot(time,yy);
xlabel('Times');ylabel('最优个体的函数值');
figure(3)
plot(fj(:,1),'*');
grid on
figure(4)
plot(fj(:,2),'*');
grid on
figure(5)
plot(fj(:,15),'*');
grid on
figure(6)
plot(fj(:,200),'*');
grid on
%------显示计算结果
disp('*************************************************************')
disp('函数的全局最优位置为:')
Solution=gbest
disp('最后得到的优化极值为:')
Result=fitness(gbest)
disp('*************************************************************')
子程序如下:
function result=fitness(x)
sum=0.5-((sin(sqrt((x(1)^2+x(2)^2))))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2))
^2;
result=sum;
end