这是用来代替最速下降法中的黄金分割法的
虽然耗时较黄金分割法长,但是效果不是黄金分割法所能比较的
毕竟PSO做一维搜索还是比较强悍的
function [afa] = pso1(fun,x0,d,a,b)
% 用于优化中的一维寻优PSO算法.
% 输入:
% fun - 待优化函数句柄.
% x0 - 当前待求最优步长点.
% d - 当前搜索方向.
% a - 步长下限,应为0.
% b - 步长上限,通常为1.
% 输出:
% afa - 搜索到的最优步长.
particles = rand(10,1)*(b-a) + a;
velocity = rand(10,1);
fitness = zeros(10,1);
for i = 1:10
fitness(i) = feval(fun,x0+particles(i)*d);
end
localP = particles;
localF = fitness;
[f,best] = min(fitness);
w = 0.5;
for i = 1:20
velocity = w*velocity + 1.5*rand*(localP-particles) + ...
1.5*rand*(localP(best)-particles);
particles = particles + velocity;
for j = 1:10
if particles(j)>b
particles(j) = b;
elseif particles(j)<a
particles(j) = a;
end
fitness(j) = feval(fun,x0+particles(j)*d);
if fitness(j) < localF(j)
localF(j) = fitness(j);
localP(j) = particles(j);
end
end
[f,best] = min(fitness);
end
afa = particles(best);