目录
一、启发式算法
1.定义
利用中间信息改进搜索策略。
2、特点
有助于找到问题的最优解,但不保证找到最优解称为启发式算法(对结果)
任何有助于加速求解过程和找到较优解的方法称之为启发式算法
二、粒子群算法
粒子群算法,其全称
为粒子群优化算法
(Particle Swarm Optimization,PSO)
。它是通过模
拟鸟群觅食行为而发展起来的一种基于群体协作的搜索算法。
这类博客介绍很多了,就不详细介绍
三、流程图
四、代码
clear;clc
%预测参数
n=10;%粒子数
narvs=1;%变量个数、
c1=2;%个体学习因子
c2=2;%群体学习个数
vmax=1.2;%粒子速度
x_lb=-3;%下界
x_ub=3;%上界
w=0.9;%惯性权重
K=50;%迭代个数
%初始化位置和速度
x=zeros(n,narvs);
for i=1:narvs
x(:,i)=x_lb+(x_ub-x_lb)*rand(n,1);%初始化位置
end
v=-vmax+2*vmax.*rand(n,1);%初始化速度
%计算适应度
fit=zeros(n,1);
for i=1:n
fit(i)=fun1(x(i,:));
end
pbest=x;
ind=find(fit==max(fit),1);
gbest=x(ind,:);
%迭代
for i=1:K
for i=1:n
v(i,:)=w*v(i,:) + c1*rand(1)*(pbest(i,:)-x(i,:)) + c2*rand(1)*(gbest-x(i,:));
for j=1:narvs
if v(i,j)<-vmax(j)%更新速度与位置
v(i,j)=-vmax(j);
elseif v(i,j)>vmax(j)
v(i,j)=vmax(j)
end
x(i,:)=x(i,:)+v(i,:);
for j=1:narvs
if x(i,j)<x_lb
x(i,j)=x_lb;
elseif x(i,j)>x_ub
x(i,j)=x_ub;
end
end
end
%重新计算第i个粒子的适应度
fit(i) = fun1(x(i,:));
%如果第i个粒子的适应度大于 这个 粒子迄止为今找到的最佳位置的适应度
if fit(i)>fun1(pbest(i,:))
pbest(i,:)=x(i,:);
end
%如果第i个粒子的适应度大于 所有 粒子迄止为今找到的最佳位置的适应度
if fun1(pbest(i,:))>fun1(gbest)
gbest=pbest(i,:);
end
Y(i)=fun1(x(i))
end
fitnessbest(d)=fun1(gbest);
pause(0.1)
plot(X,y,'r')
hold on
scatter(x,Y','b')
hold off
end
disp(['优化完成']);
disp(['最优值为:',num2str(fun1(gbest)),' x为:',num2str(gbest)]);
五、搜索最优过程
粒子群最优
六、总结
看懂原理和代码很简单,很容易上手。作为入门新手,还是要自己敲几遍。