用matlab实现,基于自适应权重PSO的资源优化算法的,写出MATLAB代码
时间: 2023-11-27 09:52:10 浏览: 86
以下是基于自适应权重PSO的资源优化算法的 MATLAB 代码:
```matlab
clc;
clear;
close all;
% 设置参数
n = 30; % 粒子数
dim = 10; % 变量数
iter = 100; % 迭代次数
lb = -10; % 下界
ub = 10; % 上界
c1 = 1.5; % 加速度因子1
c2 = 1.5; % 加速度因子2
wmax = 0.9; % 最大惯性权重
wmin = 0.4; % 最小惯性权重
vmax = 0.2*(ub-lb); % 最大速度限制
vmin = -vmax; % 最小速度限制
% 初始化粒子群
x = repmat(lb,n,dim) + rand(n,dim)*(ub-lb); % 初始位置
v = zeros(n,dim); % 初始速度
pbest = x; % 个体最优位置
pbestval = inf(n,1); % 个体最优适应度值
gbest = zeros(1,dim); % 全局最优位置
gbestval = inf; % 全局最优适应度值
% 自适应权重PSO主循环
for t=1:iter
w = wmax - (wmax-wmin)*t/iter; % 计算当前惯性权重
% 更新粒子速度和位置
for i=1:n
v(i,:) = w*v(i,:) + c1*rand(1,dim).*(pbest(i,:)-x(i,:)) +...
c2*rand(1,dim).*(gbest-x(i,:)); % 更新速度
v(i,v(i,:)>vmax) = vmax; % 限制速度范围
v(i,v(i,:)<vmin) = vmin;
x(i,:) = x(i,:) + v(i,:); % 更新位置
x(i,x(i,:)>ub) = ub; % 限制位置范围
x(i,x(i,:)<lb) = lb;
end
% 计算适应度值
f = @(x) sum(x.^2); % 目标函数
for i=1:n
fval = f(x(i,:));
if fval < pbestval(i) % 更新个体最优位置和适应度值
pbest(i,:) = x(i,:);
pbestval(i) = fval;
if fval < gbestval % 更新全局最优位置和适应度值
gbest = x(i,:);
gbestval = fval;
end
end
end
% 更新自适应权重
if t > 1
if gbestval < gbestval_hist(t-1)
alpha = 1.1; % 适应度值下降
else
alpha = 0.9; % 适应度值上升
end
wmax = alpha*wmax;
wmin = alpha*wmin;
end
gbestval_hist(t) = gbestval; % 记录全局最优适应度值
end
% 输出结果
fprintf('最优解:');
disp(gbest);
fprintf('最优适应度值:');
disp(gbestval);
% 绘制适应度值收敛曲线
figure;
plot(gbestval_hist);
xlabel('迭代次数');
ylabel('适应度值');
title('适应度值收敛曲线');
```
阅读全文