Matlab中实现粒子群算法

这篇具有很好参考价值的文章主要介绍了Matlab中实现粒子群算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.粒子群的自己写的代码


1.粒子群的自己写的代码

c1:个体学习因子,也称为个体加速因子。

粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab惯性权重w一般取0.9-1.2较为合适,一般取0.9。

 粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

粒子群算法matlab,机器学习,数学建模,算法,matlab

%% 粒子群算法PSO: 求解函数y = 11*sin(x) + 7*cos(5*x)在[-3,3]内的最大值(动画演示)
clear; clc

%% 绘制函数的图形
x = -3:0.01:3;
y = 11*sin(x) + 7*cos(5*x);
figure(1)
plot(x,y,'b-')
title('y = 11*sin(x) + 7*cos(5*x)')
hold on  % 不关闭图形,继续在上面画图

%% 粒子群算法中的预设参数(参数的设置不是固定的,可以适当修改)
n = 10; % 粒子数量
narvs = 1; % 变量个数
c1 = 2;  % 每个粒子的个体学习因子,也称为个体加速常数
c2 = 2;  % 每个粒子的社会学习因子,也称为社会加速常数
w = 0.9;  % 惯性权重
K = 50;  % 迭代的次数
vmax = 1.2; % 粒子的最大速度
x_lb = -3; % x的下界
x_ub = 3; % x的上界

%% 初始化粒子的位置和速度
x = zeros(n,narvs);
for i = 1: narvs
    x(:,i) = x_lb(i) + (x_ub(i)-x_lb(i))*rand(n,1);    % 随机初始化粒子所在的位置在定义域内
end
v = -vmax + 2*vmax .* rand(n,narvs);  % 随机初始化粒子的速度(这里我们设置为[-vmax,vmax])
%  注意:这种写法只支持2017及之后的Matlab,老版本的同学请自己使用repmat函数将向量扩充为矩阵后再运算。
% 即:v = -repmat(vmax, n, 1) + 2*repmat(vmax, n, 1) .* rand(n,narvs);  
% 注意:x的初始化也可以用一行写出来:  x = x_lb + (x_ub-x_lb).*rand(n,narvs) ,原理和v的计算一样
% 老版本同学可以用x = repmat(x_lb, n, 1) + repmat((x_ub-x_lb), n, 1).*rand(n,narvs) 

%% 计算适应度
fit = zeros(n,1);  % 初始化这n个粒子的适应度全为0
for i = 1:n  % 循环整个粒子群,计算每一个粒子的适应度
    fit(i) = Obj_fun1(x(i,:));   % 调用Obj_fun1函数来计算适应度(这里写成x(i,:)主要是为了和以后遇到的多元函数互通)
end
pbest = x;   % 初始化这n个粒子迄今为止找到的最佳位置(是一个n*narvs的向量)
ind = find(fit == max(fit), 1);  % 找到适应度最大的那个粒子的下标
gbest = x(ind,:);  % 定义所有粒子迄今为止找到的最佳位置(是一个1*narvs的向量)

%% 在图上标上这n个粒子的位置用于演示
h = scatter(x,fit,80,'*r');  % scatter是绘制二维散点图的函数,80是我设置的散点显示的大小(这里返回h是为了得到图形的句柄,未来我们对其位置进行更新)

%% 迭代K次来更新速度与位置
fitnessbest = ones(K,1);  % 初始化每次迭代得到的最佳的适应度
for d = 1:K  % 开始迭代,一共迭代K次
    for i = 1:n   % 依次更新第i个粒子的速度与位置
        v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第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
        end
        x(i,:) = x(i,:) + v(i,:); % 更新第i个粒子的位置
        % 如果粒子的位置超出了定义域,就对其进行调整
        for j = 1: narvs
            if x(i,j) < x_lb(j)
                x(i,j) = x_lb(j);
            elseif x(i,j) > x_ub(j)
                x(i,j) = x_ub(j);
            end
        end
        fit(i) = Obj_fun1(x(i,:));  % 重新计算第i个粒子的适应度
        if fit(i) > Obj_fun1(pbest(i,:))   % 如果第i个粒子的适应度大于这个粒子迄今为止找到的最佳位置对应的适应度
            pbest(i,:) = x(i,:);   % 那就更新第i个粒子迄今为止找到的最佳位置
        end
        if  fit(i) > Obj_fun1(gbest)  % 如果第i个粒子的适应度大于所有的粒子迄今为止找到的最佳位置对应的适应度
            gbest = pbest(i,:);   % 那就更新所有粒子迄今为止找到的最佳位置
        end
    end
    fitnessbest(d) = Obj_fun1(gbest);  % 更新第d次迭代得到的最佳的适应度
    pause(0.1)  % 暂停0.1s
    h.XData = x;  % 更新散点图句柄的x轴的数据(此时粒子的位置在图上发生了变化)
    h.YData = fit; % 更新散点图句柄的y轴的数据(此时粒子的位置在图上发生了变化)
end

figure(2)
plot(fitnessbest)  % 绘制出每次迭代最佳适应度的变化图
xlabel('迭代次数');
disp('最佳的位置是:'); disp(gbest)
disp('此时最优值是:'); disp(Obj_fun1(gbest))

2.Matlab中自带的粒子群算法

2014b之后才推出

粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

 粒子群算法matlab,机器学习,数学建模,算法,matlab

代码实现

求解函数y = x1^2+x2^2-x1*x2-10*x1-4*x2+60在[-15,15]内的最小值(最小值为8)

%% 求解函数y = x1^2+x2^2-x1*x2-10*x1-4*x2+60在[-15,15]内的最小值(最小值为8)
clc;clear all;
%% 首先定义内联函数
fun=@(x) x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)-4*x(2)+60
narvs = 2; % 变量个数
x_lb = [-15 -15]; % x的下界(长度等于变量的个数,每个变量对应一个下界约束)
x_ub = [15 15]; % x的上界
[x,fval,exitflag,output] = particleswarm(fun, narvs, x_lb, x_ub)  

结果为

x =

    8.0000    6.0000


fval =

    8.0000

提示:自带的粒子群算法在求解精度和求解速度上都比,自己写的好很多。文章来源地址https://www.toymoban.com/news/detail-694343.html

到了这里,关于Matlab中实现粒子群算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB智能优化算法 - 粒子群算法及MATLAB实例仿真

    粒子群算法来源于鸟类集体活动的规律性,进而利用群体智能建立简化模型。它模拟的是鸟类的觅食行为,将求解问题的空间比作鸟类飞行的时间,每只鸟抽象成没有体积和质量的粒子,来表征一个问题的可行解。 粒子群算法首先在给定的解空间中随机初始化粒子群,待优化

    2023年04月17日
    浏览(288)
  • 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    代码按照下列顺序依次: 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 结果 如有需要代码和数据的同学请在评论区发邮箱,一般一天之内会回复,请点赞+关注谢谢!!

    2024年02月11日
    浏览(45)
  • 多元回归预测 | Matlab粒子群算法(PSO)优化极限学习机ELM回归预测,PSO-ELM回归预测,多变量输入模型

    效果一览 文章概述 多元回归预测 | Matlab粒子群算法(PSO)优化极限学习机ELM回归预测,PSO-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月11日
    浏览(48)
  • 时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)

    预测效果 基本介绍 MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)(完整源码和数据) 模型介绍 PSO-KELM,常用于时间序列预测任务。 PSO是一种基于群体智能的优化算法,它模拟了鸟群觅食的行为。在PSO中,每个个体被称为粒子,代表了解空间

    2024年02月11日
    浏览(38)
  • 【粒子群算法和蝴蝶算法组合】粒子群混沌混合蝴蝶优化算法研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 文献来源

    2024年02月14日
    浏览(76)
  • Matlab实现粒子群算法(附上完整仿真代码)

    粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能算法,通过模拟自然界中鸟群、鱼群等生物群体的行为,来解决优化问题。 在PSO算法中,每个个体被称为粒子,每个粒子的位置表示解空间中的一个解,每个粒子的速度表示其在搜索空间中的方向和速度。算法通过不断

    2024年02月05日
    浏览(55)
  • 多元分类预测 | Matlab粒子群算法(PSO)优化极限学习机(ELM)的分类预测,多特征输入模型。PSO-ELM分类预测模型

    效果一览 文章概述 多元分类预测 | Matlab粒子群算法(PSO)优化极限学习机(ELM)的分类预测,多特征输入模型。PSO-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩

    2024年02月11日
    浏览(81)
  • 基于Matlab实现机器学习算法(附上多个案例源码)

    Matlab是一种功能强大的数学软件,它不仅可以用于数据分析和可视化,还可以用于机器学习。在本文中,我们将介绍如何使用Matlab实现机器学习。 首先,我们需要准备数据。机器学习通常需要大量的数据进行训练和测试。我们可以使用Matlab的数据导入工具来导入数据。Matla

    2024年01月25日
    浏览(44)
  • MATLAB实现多目标粒子群优化算法(MOPSO)

    这里如何用MATLAB实现多目标粒子群优化算法。 本教程参考:MATLAB实现多目标粒子群算法 对其中的优化项、优化目标项进行了简单的修改。优化项由1个修改成了2个,优化目标由2个修改成了3个。 同时,参考MATLAB源码,将该算法在C#上也进行了实现,有需要的可以参考:C#实现

    2024年02月01日
    浏览(50)
  • 【机器学习】主成分分析(PCA)算法及Matlab实现

    【问题引入】 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包