采煤机与刮板输送机多目标协同速度优化研究复现
部分代码展示
close all; clc;
% 粒子群算法参数设置
num_particles = 50; % 粒子数量
max_iter = 200; % 最大迭代次数
w = 0.5; % 惯性权重
c1 = 1.5; % 个体学习因子
c2 = 1.5; % 社会学习因子
% 优化变量的上下限
v_s_min = 1; % 最小牵引速度
v_s_max = 3; % 最大牵引速度
v_c_min = 40; % 最小运输速度
v_c_max = 90; % 最大运输速度
t_min = 0.5;
t_max = 90;
D = 3; % 变量维数 (v_s, v_c, t)
M = 7; % 调速次数
dim = D * M; % 扁平化后的维度
% 初始化粒子位置和速度
particles = initialize_particles(num_particles, dim, v_s_min, v_s_max, v_c_min, v_c_max, t_min, t_max);
velocities = zeros(num_particles, dim);
% 初始化个体和全局最优解
p_best = particles;
p_best_fitness = inf(num_particles, 1);
g_best = particles(1, :);
g_best_fitness = inf;
% 保存每次迭代的最优适应度值
best_fitness_iter = zeros(max_iter, 1);
% 粒子群优化迭代
for iter = 1:max_iter
for i = 1:num_particles
% 计算适应度和约束
[W, W_k] = compute_resistances(reshape(particles(i, :), M,D)');
fitness = objective_function(reshape(particles(i, :), M,D)', W, W_k);
c = constraints(reshape(particles(i, :), M,D)');
% 处理约束
if sum(c <= 0) >= 8
% 更新个体最优
if fitness < p_best_fitness(i)
p_best(i, :) = particles(i, :);
p_best_fitness(i) = fitness;
end
% 更新全局最优
if fitness < g_best_fitness
g_best = particles(i, :);
g_best_fitness = fitness;
end
end
end
% 保存当前迭代的最佳适应度值
best_fitness_iter(iter) = g_best_fitness;
% 更新粒子速度和位置
for i = 1:num_particles
r1 = rand(1, dim/3);
r2 = rand(1, dim/3);
velocities(i, 8:14) = w * velocities(i, 8:14) + ...
c1 * r1 .* (p_best(i, 8:14) - particles(i, 8:14)) + ...
c2 * r2 .* (g_best(8:14) - particles(i, 8:14));
particles(i, 8:14) = particles(i, 8:14) + velocities(i, 8:14);
% 边界处理
particles(i, 1:M) = max(min(particles(i, 1:M), v_s_max), v_s_min);
particles(i, M+1:2*M) = max(min(particles(i, M+1:2*M), v_c_max), v_c_min);
particles(i, 2*M+1:3*M) = max(min(particles(i, 2*M+1:3*M), t_max), t_min);
end
% 显示迭代信息
fprintf('迭代 %d: 最优适应度 = %f\n', iter, g_best_fitness);
end