存在一个三维面,其函数表达式为y = x1^2 + (1+x1).sin(x2) - 5x1+ 8*x2 + 373;
x1、x2的定义域均为[-20,20],
通过粒子群算法求出最小值

可以看出,最小值大体位于红圈的区域。
代码(主函数):
%% 自适应权重与压缩因子PSO
clear; clc
%% 绘制函数的图形
x1 = -20:1:20;
x2 = -20:1:20;
[x1,x2] = meshgrid(x1,x2);
y = x1.^2 + (1+x1).*sin(x2) - 5*x1 + 8*x2 + 373;
mesh(x1,x2,y)
xlabel('x1'); ylabel('x2'); zlabel('y'); % 加上坐标轴的标签
axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
hold on % 不关闭图形,继续在上面画图
%% 粒子群算法中的预设参数(参数的设置不是固定的,可以适当修改)
n = 44; % 粒子数量
narvs = 2; % 变量个数
c1 = 2.2; % 每个粒子的个体学习因子,也称为个体加速常数
c2 = 2.2; % 每个粒子的社会学习因子,也称为社会加速常数
C=c1+c2;
fi = 2/abs((2-C-sqrt(C^2-4*C))); % 收缩因子
w_1 = 0.9; % 开始的惯性权重
w_2 = 0.4; % 结束的惯性权重
K = 100; % 迭代的次数
vmax = [6 6]; % 粒子的最大速度
x_lb =

本文通过一个三维函数y = x1^2 + (1+x1).sin(x2) - 5x1+ 8*x2 + 373,介绍如何运用粒子群算法在x1和x2的定义域[-20,20]内找到该函数的最小值。示例代码展示了算法的实现,并给出了运行结果。"
107662701,9170203,深入理解JavaWeb:JSP技术详解,"['JavaWeb', 'JSP', 'Web开发', 'Servlet']
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



