粒子群寻优算法
网上已经有很多大差不大的代码,但是有可能运行不了,这里记录一个可以使用的,只需要修改适应度函数(要优化的函数)和粒子的维度(优化一个二元函数,则一个粒子的维度就是2维)即可。粒子群优化的方向是使得适应度越来越小的方向。
clear all
%粒子群算法中的两个参数
c1 = 1.49445;%两个加速常数
c2 = 1.49445;
maxgen=100; % 进化次数
sizepop=100; %种群规模
Vmax=0.1;%速度最大值
Vmin=-0.1;%速度最小值
popmax=5;%个体最大值
popmin=-5;%个体最小值
%例子:优化一个f(x,y)=x^2+y^2,优化是找到使得f(x,y)最小的x,y
for i=1:sizepop
%随机产生一个种群
pop(i,:)=rands(1,2);%有x,y,所以这里是二维,每一个粒子都是一个行向量
V(i,:)=rands(1,2); %初始化速度
fitness(i)=pop(i,1)^2+pop(i,2)^2;%这里需要修改来适配问题
end
% 个体极值和群体极值
[bestfitness,bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
%自适应惯性权重初始化
omg=zeros(1,maxgen);
omgstart=0.09;
omgend=0.02