clc
clear
close all
rand('seed',1)
a = xlsread('坐标数据2.xlsx');
zb = a(1:50,1:2);
ag = a(1:50,4);
aq = a(1:50,5);
ak=0.1;
zx = a(22:25,14:15);
zx1 = a(1,14:15);
au = [200];
ag = 20;
ar = 350;
r = 0.6;%光强吸收系数
a = 0.2;%扰动系数
d = 4;%变量个数
xmax = [1 1 1 1];%变量上限
xmin = [0 0 0 0];%变量下限
gen=100; %设置进化代数
popsize=5; %设置种群规模大小
pop = rand(popsize,4)-0.4;%生成初始种群
for ii = 1:popsize
for jj = 1:d
if pop(ii,jj)>xmax(jj)
pop(ii,jj) = xmax(jj);
elseif pop(ii,jj)<xmin(jj)
pop(ii,jj) = xmin(jj);
end
end
end
xmin = [0 0 0 0];%变量下限
fitness = fun(pop,zb,ag,aq,a,zx,zx1,au,ag,ar);%计算适应度
[best_fitness,mx] = max(fitness);%最佳适应度`q
best0 = round(pop(1,end));
[~,x20] = sort(pop(1,1:end-1));
% funtu(pop)%画图1
best_in_history = zeros(gen,1); %初始化全局历史最优解
best_in_history(1,1) = best_fitness;
bestx = zeros(gen,d);
bestx = pop(mx,:);
for ij = 1:gen
ij
for ii = 1:popsize
for jj = 1:popsize
if fitness(ii)<fitness(jj)%比较荧光亮度
dij = fund(pop(ii,:),pop(jj,:));%计算距离
pop(ii,:) = pop(ii,:)+ fitness(jj)*exp(-r*dij^2)*(pop(jj,:)-pop(ii,:))+a*(0.2*rand(1,d)-0.1);%更新位置
end
end
end
for ii = 1:popsize
for jj = 1:d
if pop(ii,jj)>xmax(jj)
pop(ii,jj) = xmax(jj);
elseif pop(ii,jj)<xmin(jj)
pop(ii,jj) = xmin(jj);
end
end
end
fitness = fun(pop,zb,ag,aq,ak,zx,zx1,au,ag,ar);%计算适应度
[best_fitness1,mx] = max(fitness);%最佳适应度
if best_fitness<best_fitness1
best_fitness = best_fitness1;
bestx = pop(mx,:);
end
pop(mx,:) = pop(mx,:) + (rand(1,d)-0.5);
best_in_history(ij,1) = best_fitness;
end
bestx(bestx>0.5)=0;
bestx(bestx>0)=1;
figure (2)
plot(1./best_in_history,'k-')
xlabel('迭代次数')
ylabel('适应度')
title('萤火虫求收敛曲线')
save maydataz.mat