麻雀搜索算法matlab
时间: 2023-07-13 12:30:17 浏览: 33
以下是麻雀搜索算法的MATLAB实现示例:
```matlab
function x = sparrow_search(dim, n, iter_max, lb, ub)
% dim: 变量维度
% n: 鸟群大小
% iter_max: 迭代次数
% lb: 变量下界
% ub: 变量上界
rng('shuffle');
x = rand(n, dim) .* (ub - lb) + lb;
f = obj_function(x);
v = zeros(n, dim);
pbest = f;
pbest_x = x;
[gbest, idx] = min(f);
gbest_x = x(idx, :);
c1 = 1.0;
c2 = 1.0;
w = 0.5;
for iter = 1:iter_max
for i = 1:n
r1 = rand();
r2 = rand();
for j = 1:dim
v(i, j) = w * v(i, j) + c1 * r1 * (pbest_x(i, j) - x(i, j)) + c2 * r2 * (gbest_x(j) - x(i, j));
x(i, j) = x(i, j) + v(i, j);
if x(i, j) < lb
x(i, j) = lb;
v(i, j) = -v(i, j);
elseif x(i, j) > ub
x(i, j) = ub;
v(i, j) = -v(i, j);
end
end
f(i) = obj_function(x(i, :));
if f(i) < pbest(i)
pbest(i) = f(i);
pbest_x(i, :) = x(i, :);
if f(i) < gbest
gbest = f(i);
gbest_x = x(i, :);
end
end
end
end
function y = obj_function(x)
% 目标函数
y = sum(x.^2, 2);
end
end
```
使用示例:
```matlab
dim = 10; % 变量维度
n = 20; % 鸟群大小
iter_max = 100; % 迭代次数
lb = -10.0; % 变量下界
ub = 10.0; % 变量上界
x = sparrow_search(dim, n, iter_max, lb, ub);
disp(['Solution: ', num2str(x)]);
disp(['Objective function value: ', num2str(obj_function(x))]);
```