标准粒子群算法MATLAB代码
时间: 2023-10-30 17:09:15 浏览: 47
以下是一个基本的粒子群算法(PSO)的MATLAB代码示例:
```matlab
% 参数设置
numParticles = 50; % 粒子数量
maxIterations = 100; % 最大迭代次数
% 问题定义
numVariables = 2; % 变量数量
lowerBounds = [-5, -5]; % 变量下界
upperBounds = [5, 5]; % 变量上界
% 初始化粒子群
particles = struct('position', [], 'velocity', [], 'bestPosition', [], 'bestFitness', []);
for i = 1:numParticles
particles(i).position = lowerBounds + (upperBounds - lowerBounds) .* rand(1, numVariables);
particles(i).velocity = zeros(1, numVariables);
particles(i).bestPosition = particles(i).position;
particles(i).bestFitness = fitnessFunction(particles(i).position);
end
% 迭代优化
globalBestFitness = inf;
globalBestPosition = [];
for iter = 1:maxIterations
for i = 1:numParticles
% 更新粒子速度和位置
particles(i).velocity = updateVelocity(particles(i).velocity, particles(i).position, particles(i).bestPosition, globalBestPosition);
particles(i).position = particles(i).position + particles(i).velocity;
% 边界处理
particles(i).position = max(particles(i).position, lowerBounds);
particles(i).position = min(particles(i).position, upperBounds);
% 更新个体最佳解和全局最佳解
fitness = fitnessFunction(particles(i).position);
if fitness < particles(i).bestFitness
particles(i).bestPosition = particles(i).position;
particles(i).bestFitness = fitness;
end
if fitness < globalBestFitness
globalBestFitness = fitness;
globalBestPosition = particles(i).position;
end
end
% 显示当前迭代结果
disp(['Iteration ', num2str(iter), ': Best Fitness = ', num2str(globalBestFitness)]);
end
% 结果显示
disp('Optimization finished.');
disp(['Best Fitness = ', num2str(globalBestFitness)]);
disp(['Best Position = [', num2str(globalBestPosition), ']']);
% 适应度函数示例
function fitness = fitnessFunction(position)
% 替换为你自己的适应度函数计算
x1 = position(1);
x2 = position(2);
fitness = x1^2 + x2^2;
end
% 随机性权重设置
function updatedVelocity = updateVelocity(velocity, currentPosition, bestPosition, globalBestPosition)
% 这里使用了标准粒子群算法的更新公式,可以根据需要进行修改
inertiaWeight = 0.5;
cognitiveWeight = 1;
socialWeight = 1;
cognitiveComponent = cognitiveWeight * rand(1) * (bestPosition - currentPosition);
socialComponent = socialWeight * rand(1) * (globalBestPosition - currentPosition);
updatedVelocity = inertiaWeight * velocity + cognitiveComponent + socialComponent;
end
```
这是一个简单的粒子群算法的实现,其中定义了适应度函数和粒子更新公式。你可以根据自己的问题进行适当的修改和优化。