QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 1252|回复: 3
打印 上一主题 下一主题

[原创] 用粒子群算法求最大值的MATLAB程序

[复制链接]

二级士官

Rank: 2

173

主题

245

帖子

437

积分
跳转到指定楼层
楼主
发表于 2016-3-8 21:05:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 董垚 于 2016-3-8 21:08 编辑

在公元1986年,一个叫Craig Reynolds的呆博士通过对鸟类集体觅食的这个生物行为,发明了一种经典的算法,叫粒子群算法,在我们人还没研究明白的时候,人家都开始研究鸟了,这就是人家的牛X之处啊,他发现一个鸟群外出找食物的时候,刚开始都是杂乱无章的,任意一只鸟都是以任意的速度和方向出发去找东西吃,但是找啊找啊,他们通过彼此的通讯和协作,最后总能全部集中在食物周围,基本上没有掉队的,你说这多神奇,这个呆博士通过天天的研究这些鸟找食物,发明了这种在解的空间里快速寻找全局最优解的一种方法——粒子群算法,没想到这个方法已经提出,在学术界引起了不小的轰动,引来了很多学术大咖们的围观,纷纷赞赏之余,也都纷纷在这个标准粒子群算法进行各种改进,到今天粒子群算法已经在各行各业中得到了广泛的应用,当时包括我们熟悉的机械行业。
下面我们来算一个函数吧,f(x)=1+2.1(1-x+2x^2)exp(-x^2/2),x在[-5,5]范围内,求它的最大值,怎么求,这个问题用粒子群算法来做,简直是得心应手啊,废话少说,上代码!
function main()
clc;clear all;close all;
tic;                              %程序运行计时
E0=0.001;                        %允许误差
MaxNum=100;                    %粒子最大迭代次数
narvs=1;                         %目标函数的自变量个数
particlesize=30;                    %粒子群规模
c1=2;                            %每个粒子的个体学习因子,也称为加速常数
c2=2;                            %每个粒子的社会学习因子,也称为加速常数
w=0.6;                           %惯性因子
vmax=0.8;                        %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs);     %粒子所在的位置
v=2*rand(particlesize,narvs);         %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=1:particlesize
    for j=1:narvs
        f(i)=fitness(x(i,j));
    end
end

Value1=1/globalbest_faval-1; Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x; Value2=num2str(Value2);
disp(strcat('the corresponding coordinate','=',Value2));
x=-5:0.01:5;
y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y,'m-','linewidth',3);
hold on;
plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');xlabel('x');ylabel('y');grid on;toc;





这个代码我调试过,是成功的,大家谁需要用到粒子群解决工程问题的话,可以复制下来,针对自己的目标函数去修改啊。

版权声明  
本人声明此帖为本人原创帖,未经允许,不得转载!

有奖推广贴子: 

回复

使用道具 举报

等待验证会员

8

主题

484

帖子

635

积分
沙发
发表于 2016-3-8 21:42:45 | 只看该作者
牛x。大大的牛x。
回复 支持 反对

使用道具 举报

上等兵

Rank: 1

3

主题

435

帖子

138

积分
板凳
发表于 2016-3-8 22:46:41 | 只看该作者
牛x。大大的牛
回复 支持 反对

使用道具 举报

二级士官

Rank: 2

165

主题

264

帖子

438

积分
地板
发表于 2016-3-9 21:11:14 | 只看该作者
非常好,很有价值:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-11-17 07:00

返回顶部