佳点集理论
蝴蝶算法在初始化种群的时候采用的是随机生成。随机代表着不确定,且随机生成的种群在整个空间上表现为不均匀;为消除随机初始化带来的不确定,和种群在空间上分布不均匀问题,由此引出新的初始化种群方式:佳点集生成种群。
佳点集最初由华罗庚等提出,其基本定义与构造为:设Gs是s维欧氏空间中的单位立方体,如果r属于G,形为Pn(k)={({(r1^(n))*k},{(r2^(n))*k},...{(rs^(n))*k}),1≤k≤n},其偏差 φ(n)满足φ(n)=C(r,ε)n^(-1+ε),其中:C(r,ε)是只与r和 ε(ε是任意的正数)有关的常数,则称 P(k)为佳点集,r为佳点。取r={2cos(2*pi*k/p)1≤k<s}(p 是满足(p-3)/2>s的最小素数,则r为佳点
佳点集初始化种群的方法
已知:种群所在的空间维度为n,种群数量为m
佳点集对比程序
% 分别画出2维,3维情况下采用佳点集和随机生成图的对比
% 定于种群大小
pop_size = 100;
% 定义种群的取值范围
dimension_2 = 2;
dimension_3 = 3;
bounds_2 = [ones(dimension_2,1)*0,ones(dimension_2,1)*1];
bounds_3 = [ones(dimension_3,1)*0,ones(dimension_3,1)*1];
% 二维、三维的佳点集种群
pop2 = init_pop(pop_size,dimension_2,bounds_2);
pop3 = init_pop(pop_size,dimension_3,bounds_3);
% 二维、三维随机生成的种群
pop2_rand = init_pop_rand(pop_size,dimension_2,bounds_2);
pop3_rand = init_pop_rand(pop_size,dimension_3,bounds_3);
% 画出二维下图形佳点集种群,和随机种群
figure(1)
subplot(2,2,1)
plot(pop2(:,1),pop2(:,2),'*')
subplot(2,2,2)
plot(pop2_rand(:,1),pop2_rand(:,2),'*')
subplot(2,2,3)
plot3(pop3(:,1),pop3(:,2),pop3(:,3),'*')
subplot(2,2,4)
plot3(pop3_rand(:,1),pop3_rand(:,2),pop3_rand(:,3),'*')
%% 佳点集
% pop_size:种群数量
% dimension:维度
% bound:取值范围
function pop = init_pop(pop_size,dimension,bounds)
%佳点集生成初始种群
p = zeros(pop_size,dimension);
prime_number_min = dimension*2 +3;
% 找到(prime_number_min-3)/2>=dimension的最小素数prime_number_min
while 1
if isprime(prime_number_min)==1
break;
else
prime_number_min = prime_number_min + 1;
end
end
for i = 1:pop_size
for j = 1:dimension
r = mod(2*cos(2*pi*j/prime_number_min)*i,1);% 对应维度的r
% r = mod(exp(j)*i,1);
p(i,j) = bounds(j,1)+r*(bounds(j,2)-bounds(j,1));
end
end
pop = p;
end
%% 随机种群
function pop = init_pop_rand(pop_size,dimension,bounds)
%随机i生成定义域范围内种群
p = rand(pop_size,dimension);%生成popsize*dimension的0-1矩阵
for i = 1:dimension
p(:,i) = bounds(i,1)+p(:,i)*(bounds(i,2)-bounds(i,1));
end
pop = p;
end