前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >粒子群算法求函数最小值

粒子群算法求函数最小值

作者头像
mwangblog
发布2018-12-19 10:19:47
发布2018-12-19 10:19:47
2.6K0
举报
文章被收录于专栏:mwangblogmwangblog

求下面函数的最小值:

程序运行结果如下:

函数最小值:-182.160634

主函数

主函数首先初始化种群,对于第1代种群,个体极值和全局极值都在本代种群中;之后进行迭代,每次迭代根据公式更新速度和位置,并更新个体极值和全局极值,重复此过程直至迭代结束。

functionmain()

popsize= 50; % 种群规模

birdsize= 30; % 粒子数量

w= 0.5; % 惯性权重

c1= 1.0; % 认知因子

c2= 2.0; % 社会因子

maxgen= 100; % 最大迭代次数

%初始化

x =randn(popsize, birdsize);

v =randn(popsize, birdsize);

%初始化pid,pgd

fitness =calfitness(x);

pid = x;

pidfit =fitness;

[bfit, bfiti]= min(fitness);

pgd =x(bfiti, :);

pgdfit =bfit;

%记录每代最优值

bestpidfit =zeros(popsize, 1);

for gen =1:maxgen

% 更新速度和位置

v = w .* v + c1 .* rand .* (pid - x) + ...

c2 .* rand .* (repmat(pgd, popsize, 1)- x);

x = x + v;

% 更新pid,pgd

fitness = calfitness(x);

index = find(fitness < pidfit);

pid(index, :) = x(index, :);

pidfit(index, 1) = fitness(index, 1);

[bfit, bfiti] = min(fitness);

bestpidfit(gen, 1) = bfit;

if bfit < pgdfit

pgd = x(bfiti, :);

pgdfit = bfit;

end

end

fprintf("函数最小值: %f\n", pgdfit);

figure(1);

plot(1:maxgen,bestpidfit);

title("每代最优适应度值变化曲线");

end

适应值函数

functionfitness = calfitness(x)

%计算适应度值

% f =sum(x^2+x-6)

%x input 种群

%fitness output 适应度值

x = x .^ 2 +x - 6;

fitness =sum(x, 2);

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主函数
  • 适应值函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档