混沌映射改进粒子群算法matlab代码
时间: 2023-11-20 22:05:16 浏览: 244
是使用混沌映射改进粒子群算法的MATLAB代码:
```matlab
% 初始化参数
maxgen = 100; % 迭代次数
sizepop = 50; % 种群大小
c1 = 2; % 学习因子1
c2 = 2; % 学习因子2
wmax = 0.9; % 惯性权重上限
wmin = 0.4; % 惯性权重下限
dim = 2; % 变量维度
xmin = -10; % 变量下界
xmax = 10; % 变量上界
% 初始化种群
pop = repmat(struct('x', zeros(1, dim), 'v', zeros(1, dim), 'pbest', zeros(1, dim), 'fitness', 0), sizepop, 1);
for i = 1:sizepop
pop(i).x = xmin + (xmax - xmin) * rand(1, dim);
pop(i).v = rand(1, dim);
pop(i).pbest = pop(i).x;
pop(i).fitness = fitness(pop(i).x);
end
% 初始化全局最优解
gbest = pop(1).x;
for i = 2:sizepop
if pop(i).fitness > fitness(gbest)
gbest = pop(i).x;
end
end
% 开始迭代
for gen = 1:maxgen
% 更新惯性权重
w = wmax - (wmax - wmin) * gen / maxgen;
% 更新粒子位置和速度
for i = 1:sizepop
% 更新速度
pop(i).v = w * pop(i).v + c1 * rand(1, dim) .* (pop(i).pbest - pop(i).x) + c2 * rand(1, dim) .* (gbest - pop(i).x);
% 更新位置
pop(i).x = chaos_map(pop(i).x, xmin, xmax);
% 更新个体最优解
if fitness(pop(i).x) > fitness(pop(i).pbest)
pop(i).pbest = pop(i).x;
end
% 更新全局最优解
if fitness(pop(i).x) > fitness(gbest)
gbest = pop(i).x;
end
end
% 输出当前迭代次数和全局最优解
fprintf('gen = %d, gbest = %f\n', gen, fitness(gbest));
end
% 适应度函数
function f = fitness(x)
f = -20 * exp(-0.2 * sqrt(0.5 * sum(x .^ 2))) - exp(0.5 * sum(cos(2 * pi * x))) + exp(1) + 20;
end
% 混沌映射函数
function y = chaos_map(x, xmin, xmax)
r = 4; % 混沌映射参数
x = (x - xmin) / (xmax - xmin); % 归一化
x = r * x * (1 - x);
y = xmin + x * (xmax - xmin); % 反归一化
end
```
阅读全文