引力搜索算法 matlab
时间: 2023-09-15 14:23:16 浏览: 30
引力搜索算法(Gravitational Search Algorithm,GSA)是一种基于物理引力和质量互相作用的优化算法,可以用于解决单目标或多目标优化问题。下面是一个基于Matlab的引力搜索算法示例代码:
```matlab
% 引力搜索算法
% 范围:[0, 10]
% 目标函数:f(x) = x1^2 + x2^2
% 最小值:0
clc;
clear;
close all;
% 初始化
n = 10; % 种群大小
G = 100; % 迭代次数
D = 2; % 变量个数
Lb = zeros(1, D); % 下界
Ub = 10 * ones(1, D); % 上界
G0 = 100; % 引力常数
alpha = 20; % 衰减因子
best_f = inf; % 最优值
best_x = zeros(1, D); % 最优解
X = rand(n, D) .* (Ub - Lb) + Lb; % 初始种群
V = zeros(n, D); % 初始速度
for i = 1:n
f(i) = fitness(X(i, :));
if f(i) < best_f
best_f = f(i);
best_x = X(i, :);
end
end
% 迭代
for t = 1:G
for i = 1:n
% 计算引力
F = zeros(1, D);
for j = 1:n
if i ~= j
d = norm(X(i, :) - X(j, :));
F = F + G0 * (X(j, :) - X(i, :)) * f(j) / (d^3 + eps);
end
end
% 计算速度和位置
V(i, :) = alpha * V(i, :) + rand(1, D) .* F;
X(i, :) = X(i, :) + V(i, :);
% 边界处理
X(i, :) = max(X(i, :), Lb);
X(i, :) = min(X(i, :), Ub);
% 更新最优解
f(i) = fitness(X(i, :));
if f(i) < best_f
best_f = f(i);
best_x = X(i, :);
end
end
% 输出结果
fprintf('Iteration %d: f = %f\n', t, best_f);
end
% 目标函数
function y = fitness(x)
y = sum(x .^ 2);
end
```
代码解析:
1. 初始化:设定种群大小、迭代次数、变量个数、变量范围、引力常数、衰减因子等参数,并生成初始种群和速度;计算初始种群中每个个体的适应度,并记录最优解。
2. 迭代:对于每个个体,计算其与其他个体之间的引力,更新速度和位置,并边界处理;更新每个个体的适应度,并记录最优解。
3. 目标函数:本例中为$f(x)=\sum_{i=1}^n x_i^2$。
注意事项:
1. 由于引力搜索算法是一种随机算法,多次运行可能会得到不同的结果。
2. 引力常数和衰减因子的取值对算法的性能有很大影响,需要根据实际问题进行调整。