粒子群优化算法 (PSO) 寻找 Shubert 函数全局最优解
粒子群优化算法 (PSO) 寻找 Shubert 函数全局最优解
本代码使用粒子群优化算法 (PSO) 寻找 Shubert 函数的全局最优解,并输出最优解的坐标和函数值。
1. PSO 算法实现
function [xopt, yopt, fopt] = PSO(objfun, np, maxiter, bounds)
% 初始化粒子
x = rand(np, 1) * (bounds(2, 1) - bounds(1, 1)) + bounds(1, 1);
y = rand(np, 1) * (bounds(2, 2) - bounds(1, 2)) + bounds(1, 2);
v = zeros(np, 2);
pbestx = x;
pbesty = y;
pbestf = inf(np, 1);
for i = 1:np
f = objfun(x(i), y(i));
if f < pbestf(i)
pbestf(i) = f;
end
end
gbesti = find(pbestf == min(pbestf));
gbestx = pbestx(gbesti);
gbesty = pbesty(gbesti);
gbestf = pbestf(gbesti);
% 迭代优化
for iter = 1:maxiter
w = 0.5; % 惯性权重
c1 = 2; % 个体学习因子
c2 = 2; % 社会学习因子
for i = 1:np
r1 = rand;
r2 = rand;
v(i, 1) = w * v(i, 1) + c1 * r1 * (pbestx(i) - x(i)) + c2 * r2 * (gbestx - x(i));
x(i) = x(i) + v(i, 1);
if x(i) < bounds(1, 1)
x(i) = bounds(1, 1);
v(i, 1) = -v(i, 1);
elseif x(i) > bounds(2, 1)
x(i) = bounds(2, 1);
v(i, 1) = -v(i, 1);
end
r1 = rand;
r2 = rand;
v(i, 2) = w * v(i, 2) + c1 * r1 * (pbesty(i) - y(i)) + c2 * r2 * (gbesty - y(i));
y(i) = y(i) + v(i, 2);
if y(i) < bounds(1, 2)
y(i) = bounds(1, 2);
v(i, 2) = -v(i, 2);
elseif y(i) > bounds(2, 2)
y(i) = bounds(2, 2);
v(i, 2) = -v(i, 2);
end
f = objfun(x(i), y(i));
if f < pbestf(i)
pbestf(i) = f;
pbestx(i) = x(i);
pbesty(i) = y(i);
end
end
[minf, ind] = min(pbestf);
if minf < gbestf
gbestf = minf;
gbestx = pbestx(ind);
gbesty = pbesty(ind);
end
end
% 返回最优解及其函数值
xopt = gbestx;
yopt = gbesty;
fopt = gbestf;
end
2. Shubert 函数定义
function f = Shubert(x, y)
A = 0;
B = 0;
for i = 1:5
A = A + i * cos((i + 1) * x + i);
B = B + i * cos((i + 1) * y + i);
end
f = A * B;
end
3. 运行程序
% 设置搜索范围和粒子数量
bounds = [-10, -10; 10, 10];
np = 50;
maxiter = 1000;
% 运行PSO算法寻找最优解
[xopt, yopt, fopt] = PSO(@Shubert, np, maxiter, bounds);
% 输出结果
fprintf('最优解为:x = %f, y = %f, f = %f\n', xopt, yopt, fopt);
注意: Shubert 函数有多个局部最优解,PSO 算法无法保证找到全局最优解,需要多次运行并比较结果。 为了找到更多局部最优解,可以尝试以下方法:
- 增加粒子数量和迭代次数
- 设置多个起始点并分别运行 PSO 算法
- 使用其他全局优化算法,例如遗传算法 (GA) 或模拟退火算法 (SA)
通过上述方法,可以更好地探索 Shubert 函数的搜索空间,并找到更多局部最优解。
原文地址: https://www.cveoy.top/t/topic/nrOm 著作权归作者所有。请勿转载和采集!