当前位置:首页>科技>正文

粒子群算法怎么应用到实际问题中 粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

2023-04-22 18:17:10 互联网 未知 科技

 粒子群算法怎么应用到实际问题中 粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

粒子群算法怎么应用到实际问题中

粒子群算法,也称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的"交叉"(Crossover) 和"变异"(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

可以参考一下这段代码

%------给定初始化条件----------------------------------------------
c1=1.8 %学习因子1
c2=1.8 %学习因子2
WMax=1.6 %惯性权重
WMin=0.8 %惯性权重
MaxDT=100 %最大迭代次数
D=3 %搜索空间维数(未知数个数)
N=30 %初始化群体个体数目
XUp=20/(2^0.5) %初始化位移上限
XDown=-20/(2^0.5) %初始化位移下限
VUp=0.5 %初始化速度上限
VDown=0.0 %初始化速度下限
eps=10^(-6) %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------

x=((XUp-XDown).*rand(N,2*D) XDown) %随机初始化位置
v=((VUp-VDown).*rand(N,2*D) VDown) %随机初始化速度

求粒子群算法MATLAB完整代码

%% 清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
c1 = 1.49445
c2 = 1.49445

maxgen = 200 % 进化次数
sizepop = 20 % 种群规模

Vmax = 1
Vmin = -1
popmax = 5
popmin = -5

%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = 5 * rands(1,2) % 初始种群
V(i,:) = rands(1,2) % 初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:)) % 染色体的适应度
end

% 找最好的染色体
[bestfitness bestindex] = min(fitness)
zbest = pop(bestindex,:) % 全局最佳
gbest = pop % 个体最佳
fitnessgbest = fitness % 个体最佳适应度值
fitnesszbest = bestfitness % 全局最佳适应度值

%% 迭代寻优
for i = 1:maxgen
for j = 1:sizepop

% 速度更新
V(j,:) = V(j,:) c1*rand*(gbest(j,:) - pop(j,:)) c2*rand*(zbest - pop(j,:))
V(j,find(V(j,:)>Vmax)) = Vmax
V(j,find(V(j,:)
%种群更新
pop(j,:) = pop(j,:) 0.5*V(j,:)
pop(j,find(pop(j,:)>popmax)) = popmax
pop(j,find(pop(j,:)
% 自适应变异
if rand > 0.8
k = ceil(2*rand)
pop(j,k) = rand
end

% 适应度值
fitness(j) = fun(pop(j,:))
end

% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:)
fitnessgbest(j) = fitness(j)
end

% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:)
fitnesszbest = fitness(j)
end

yy(i) = fitnesszbest

end
toc
%% 结果分析
plot(yy)
title([适应度曲线 终止代数= num2str(maxgen)])
xlabel(进化代数)
ylabel(适应度)

fun函数如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2 x(2)^2)/2)) - exp((cos(2*pi*x(1)) cos(2*pi*x(2)))/2) 20 2.71289