粒子群算法和遗传算法求多元函数的最大值、最小值对比

目录

前言

1.粒子群算法寻优

1.1 求目标函数最大值

1.2 求目标函数最小值

2.遗传算法寻优


前言

个人认为粒子群算法和遗传算法思想都很接近,都是一个通过对比去寻找最优解的过程,如果对比我比你的"好",那么我便取代你的思想。

遗传算法的主要步骤为初始化、编码、通过比叫去选择和交叉以及变异几个过程。

粒子群算法和遗传算法求多元函数的最大值、最小值对比_第1张图片

粒子群算法的主要步骤为初始化、粒子速度和位置更新、通过比对极值更新几个过程。

Pi表示个体极值位置更新(所有粒子自己本身在迭代过程中搜索的位置,如:第i个粒子在迭代中的数据为Pi(i,:)),Pg表示群体极值位置(1个粒子),Xi表示当代种群所有粒子的位置。

注:应该先速度更新,再位置更新!

下面我们采用同一个例子对其求最大值和最小值的分析

粒子群算法和遗传算法求多元函数的最大值、最小值对比_第2张图片

1.粒子群算法寻优

由于粒子群需要初始化位置和速度,这里暂定位置范围/x自变量取值范围为[pi/2  10],速度[-0.5 0.5],这里采用动态惯性权重,推荐读者先把我的上篇文章进行阅读:

粒子群算法PSO求解最大值和最小值案例(超详细注释)_Mr. 邹的博客-CSDN博客

1.1 求目标函数最大值

适应度函数:

function y = fobj(x)
%x    输入粒子的位置
%y    输出粒子适应度值
y = -5*sin(x(1))*sin(x(2))*sin(x(3))*sin(x(4))*sin(x(5))-...
sin(5*x(1))*sin(5*x(2))*sin(5*x(3))*sin(5*x(4))*sin(5*x(5))+8;

主程序(运行文件):

clear all
clc
%参数
p = struct('popsize',50,'T',500,'c1',2,'c2',2,'w_init',0.9,'w_end',0.4,'vmax',0.5,'vmin',-0.5);
lb = pi/2;ub = 10;%位置范围
dim = 5;       %维度/变量个数
N = p.popsize; %种群大小/规模
T = p.T;       %迭代/搜索次数
c1 = p.c1;     %个体加速度因子
c2 = p.c2;     %群体加速度因子
% 初始化
v = rand(N,dim);%定义初始时刻粒子速度为0
%  v = p.vmax*rand(N,dim);%不定义为0也可以
x = (ub - lb)*rand(N,dim) + lb;%初始化粒子位置
for i = 1:N
    fitness(i) = fobj(x(i,:));%取目标函数为适应度函数
end
[bestf,index] = max(fitness);%求目标函数最小值,也是适应度函数的最小值
gbest = x(index,:);%全局最优的一个粒子位置
pbest = x;%pbest指当代所有粒子的位置
pfitness = fitness;%个体适应度值,即将所有粒子的位置代入适应度函数求得
% 迭代寻优
t = 1;
while tp.vmax;
        Flagvmin = v(i,:)ub;
        Flaglb = x(i,:)

寻优结果:

粒子群算法和遗传算法求多元函数的最大值、最小值对比_第3张图片

1.2 求目标函数最小值

只需将上述程序稍作修改即可:

[bestf,index] = min(fitness);%求目标函数最小值,也是适应度函数的最小值




    if bestf > min(fitness)%如果前一代找到的最优解>当前种群中某个最小值,那么当前最优值取为该最小值
        [bestf,index] = min(fitness);



        if pfitness(i) > fitness(i)

粒子群算法和遗传算法求多元函数的最大值、最小值对比_第4张图片

2.遗传算法寻优

在上篇博客上已经介绍,这里不再复述了

遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GADS实例介绍_Mr. 邹的博客-CSDN博客

你可能感兴趣的:(优化算法,算法)