function[cha, changetime, am, bm, sigm, fv, nm, be] = PSO_lin4(fitness2, x, F1, N, c1, c2, wmax, vamax, vbmax, vsigmax, amax, amin, bmax, bmin, sigmax, sigmin, stopmark)
for i = 1 : N
for j = 1 : 2
b(i, j) = bmin + (bmax - bmin) * rand;
vb(i, j) = randn;
sig(i, j) = sigmin + (sigmax - sigmin) * rand;
vsig(i, j) = randn;
a(i, j) = (amin + (amax - amin) * rand);
va(i, j) = randn;
end
end
% figure
% scatter3(b(:, 1), sig(:, 1), a(:, 1));
% xlabel('b1'), ylabel('c1'), zlabel('a1');
% title('组分1谱峰参数初始粒子位置');
% figure
% scatter3(b(:, 2), sig(:, 2), a(:, 2));
% xlabel('b2'), ylabel('c2'), zlabel('a2');
% title('组分2谱峰参数初始粒子位置');
for i = 1 : N
p(i) = fitness2(F1, x, a(i, :), b(i, :), sig(i, :));
at(i, :) = a(i, :);
bt(i, :) = b(i, :);
sigt(i, :) = sig(i, :);
end
pga = a(N, :);
pgb = b(N, :);
pgsig = sig(N, :);
fitnesspgtemp = p(N);
fitnesspg = p(N);
for i = 1 : N - 1
if p(i) < fitnesspg
pga = a(i, :);
pgb = b(i, :);
pgsig = sig(i, :);
end
end
w = wmax;
t = 0;
m = 0;
u = 0;
changetime = 0;
cha(1) = 0;
for t = 1:50
% while fitnesspg > stopmark
% t = t + 1;
if m == 200 || (m > 200 && mod(m, 150) == 0)
%
% if changetime == 1
% figure
% scatter3(b(:, 1), sig(:, 1), a(:, 1));
% xlabel('b_1'), ylabel('c1'), zlabel('a1');
% title('组分1谱峰参数局部最优粒子位置');
% figure
% scatter3(b(:, 2), sig(:, 2), a(:, 2));
% xlabel('b2'), ylabel('c2'), zlabel('a2');
% title('组分2谱峰参数局部最优粒子位置');
% end
%
for z = 1 : N
for j = 1 : 2
if fitnesspg > 0.1
a(z, j) = pga(j) + randn * 0.5;
b(z, j) = pgb(j) + randn * 0.5;
sig(z, j) = pgsig(j) + randn * 5;
else if fitnesspg > 0.01
a(z, j) = pga(j) + randn * 0.25;
b(z, j) = pgb(j) + randn * 0.25;
sig(z, j) = pgsig(j) + randn * 0.25;
else
a(z, j) = pga(j) + randn * 0.125;
b(z, j) = pgb(j) + randn * 0.125;
sig(z, j) = pgsig(j) + randn * 0.125;
end
end
va(z, j) = randn * 0.5;
vb(z, j) = randn * 0.5;
vsig(z, j) = randn * 0.5;
end
end
%
% if changetime == 1
% figure
% scatter3(b(:, 1), sig(:, 1), a(:, 1));
% xlabel('b1'), ylabel('c1'), zlabel('a1');
% title('组分1谱峰参数打散后粒子位置');
% figure
% scatter3(b(:, 2), sig(:, 2), a(:, 2));
% xlabel('b2'), ylabel('c2'), zlabel('a2');
% title('组分2谱峰参数打散后粒子位置');
% end
%
changetime = changetime + 1;
cha(changetime) = t;
end
for i = 1 : N
va(i, :) = w * va(i, :) + c1 * rand * (at(i, :) - a(i, :)) + c2 * rand * (pga - a(i, :));
vb(i, :) = w * vb(i, :) + c1 * rand * (bt(i, :) - b(i, :)) + c2 * rand * (pgb - b(i, :));
vsig(i, :) = w * vsig(i, :) + c1 * rand * (sigt(i, :) - sig(i, :)) + c2 * rand * (pgsig - sig(i, :));
temp = va(i, :) > vamax;
va(i, temp) = vamax;
temp = va(i, :) < (-vamax);
va(i, temp) = -vamax;
temp = vb(i, :) > vbmax;
vb(i, temp) = vbmax;
temp = vb(i, :) < (-vbmax);
vb(i, temp) = -vbmax;
temp = vsig(i, :) > vsigmax;
vsig(i, temp) = vsigmax;
temp = vsig(i, :) < (-vsigmax);
vsig(i, temp) = -vsigmax;
a(i, :) = a(i, :) + va(i, :);
b(i, :) = b(i, :) + vb(i, :);
sig(i, :) = sig(i, :) + vsig(i, :);
temp = a(i, :) > amax;
a(i, temp) = amax;
temp = a(i, :) < amin;
a(i, temp) = amin;
temp = b(i, :) > bmax;
b(i, temp) = bmax;
temp = b(i, :) < bmin;
b(i, temp) = bmin;
temp = sig(i, :) > sigmax;
sig(i, temp) = sigmax;
temp = sig(i, :) < sigmin;
sig(i, temp) = sigmin;
fitnesstemp = fitness2(F1, x, a(i, :), b(i, :), sig(i, :));
if fitnesstemp < p(i)
p(i) = fitnesstemp;
at(i, :) = a(i, :);
bt(i, :) = b(i, :);
sigt(i, :) = sig(i, :);
end
if p(i) < fitnesspg
pga = at(i,:);
pgb = bt(i, :);
pgsig = sigt(i, :);
fitnesspg = p(i);
end
end
if fitnesspg >= 1 && abs(fitnesspgtemp - fitnesspg) < 0.01
m = m + 1;
else if fitnesspg >= 0.5 && abs(fitnesspgtemp - fitnesspg) < 0.0005
m = m + 1;
else if fitnesspg >= 0.01 && abs(fitnesspgtemp - fitnesspg) < 0.00005
m = m + 1;
else if fitnesspg < 0.01 && abs(fitnesspgtemp - fitnesspg) < 0.000005
m = m + 1;
else
fitnesspgtemp = fitnesspg;
m = 0;
end
end
end
end
pa1(t) = pga(1);
pa2(t) = pga(2);
% pa3(t) = pga(3);
pb1(t) = pgb(1);
pb2(t) = pgb(2);
% pb3(t) = pgb(3);
psig1(t) = pgsig(1);
psig2(t) = pgsig(2);
% psig3(t) = pgsig(3);
Pbest(t) = fitnesspg;
end
t;
l = 1 : length(pa1);
% figure
% plot(l, pa1, l, pa2, l, pb1, l, pb2,l, psig1,l, psig2)
% legend('a1','a2','b1','b2','c1','c2')
% xlabel('进化次数'), ylabel('参数值');
% % title('谱峰参数随进化次数的变化');
figure
plot(l, Pbest);
xlabel('进化次数'), ylabel('适应度值');
% title('适应度值随进化次数的变化');
be = Pbest;
am = pga;
bm = pgb;
sigm = pgsig;
fv = Pbest(t);
nm = t;
changetime;
cha;
% figure
% scatter3(b(:, 1), sig(:, 1), a(:, 1));
% xlabel('b1'), ylabel('c1'), zlabel('a1');
% title('组分1谱峰参数全局最优粒子位置');
% figure
% scatter3(b(:, 2), sig(:, 2), a(:, 2));
% xlabel('b2'), ylabel('c2'), zlabel('a2');
% title('组分2谱峰参数全局最优粒子位置');
评论21