狼群优化算法WPA的Matlab代码
时间: 2023-12-24 19:54:46 浏览: 173
以下是狼群优化算法WPA的Matlab代码:
```matlab
% 狼群优化算法WPA的Matlab代码
% 作者:CSDN开发者ChitGPT
function [bestSol, bestFit] = WPA(fitnessFunc, dim, lb, ub, maxIter, wolfNum, alpha, beta)
% 参数说明:
% fitnessFunc:适应度函数
% dim:问题的维度
% lb:问题的下界
% ub:问题的上界
% maxIter:最大迭代次数
% wolfNum:狼群数量
% alpha:狼群中猛犸象的影响力
% beta:狼群中灰狼的影响力
% 初始化狼群
wolf = rand(wolfNum, dim) .* (ub - lb) + lb;
wolfFit = feval(fitnessFunc, wolf);
[~, bestIdx] = min(wolfFit);
bestSol = wolf(bestIdx, :);
bestFit = wolfFit(bestIdx);
% 迭代搜索
for iter = 1 : maxIter
% 更新每只狼的位置
for i = 1 : wolfNum
% 计算狼群中每只狼与最优解之间的向量
delta = bestSol - wolf(i, :);
% 计算狼群中每只狼与猛犸象之间的向量
lambda = rand(1, dim) .* (2 * alpha) - alpha;
% 计算狼群中每只狼与灰狼之间的向量
gamma = rand(1, dim) .* (2 * beta) - beta;
% 更新狼的位置
wolf(i, :) = wolf(i, :) + lambda .* delta + gamma;
% 边界处理
wolf(i, wolf(i, :) < lb) = lb(wolf(i, :) < lb);
wolf(i, wolf(i, :) > ub) = ub(wolf(i, :) > ub);
end
% 更新最优解
wolfFit = feval(fitnessFunc, wolf);
[~, bestIdx] = min(wolfFit);
if wolfFit(bestIdx) < bestFit
bestSol = wolf(bestIdx, :);
bestFit = wolfFit(bestIdx);
end
% 显示当前迭代次数和最优解
disp(['Iteration ' num2str(iter) ': Best Fitness = ' num2str(bestFit)]);
end
end
```
使用方法:
1. 定义适应度函数,例如:
```matlab
function fit = fitnessFunc(x)
fit = sum(x .^ 2);
end
```
2. 调用WPA函数进行搜索,例如:
```matlab
[bestSol, bestFit] = WPA(@fitnessFunc, 10, -5, 5, 100, 30, 1, 2);
```
该语句表示使用适应度函数fitnessFunc,搜索10维问题,搜索范围为[-5, 5],最大迭代次数为100,狼群数量为30,猛犸象影响力为1,灰狼影响力为2。搜索结果将保存在bestSol和bestFit中。
阅读全文