注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。目前优化算法APP已经更新到了6.0版本,功能越来越丰富啦!
整体集群优化算法(Holistic Swarm Optimization, HSO)是一种不依赖自然隐喻的新型群体智能优化方法。不同于传统算法仅基于个体经验或局部邻域做出搜索决策,HSO转而借助整个种群的信息分布与适应度形态来引导优化路径,就像一幅全面描绘的“群体地图”,每个个体的行动都在这幅全景之上精准调整。该算法在设计上摒弃了特定自然类比或生物启发,而是以理性机制为核心,通过均方根适应度引导的位移系数、模拟退火策略控制的选择过程以及自适应扰动机制,实现了全局探索与局部利用之间的动态平衡。这一结构使得HSO在面对复杂多峰问题时具备更强的鲁棒性与收敛效率,既能跳出局部陷阱,又能精准收敛于最优区域。
该成果于2025年最新发表在中科院一区期刊Computer Methods in Applied Mechanics and Engineering期刊上,影响因子高达7.3,具备出色的实际应用潜力。
整体集群优化算法(Holistic Swarm Optimization, HSO)是一种基于群体全局感知的智能搜索策略,通过融合所有个体的信息来协同更新每个解的位置,从而打破传统算法“局部视角”带来的搜索局限性。HSO强调以完整的种群分布结构与适应度地形为决策依据,实时调整搜索方向,在探索未知区域与开发潜力区域之间实现动态均衡。该算法分为若干核心阶段,下面将对HSO的各阶段流程进行详细介绍与分析。
1、算法原理
(1)初始化
该算法首先初始化一组搜索个体,记作 ,其中 , 表示搜索个体的数量。每个个体的位置在预定义的搜索空间内随机生成。每个搜索个体 表示一个潜在的优化问题解,该问题本身为 维。
(2)适应度评估与系数计算
每个搜索个体的适应度通过目标函数 进行评估。所有适应度值的均方根(RMS),记作 ,其计算公式如下:
其中, 表示搜索个体 的适应度。接下来,通过比较各个体的适应度值与整体适应度均方根(RMS)之间的差异,来确定用于位移向量计算的系数。对于个体 ,该差值计算如下:
系数 的设定依据个体适应度与整体 RMS 差值的方向:若个体适应度优于 RMS(差值较小),则赋予正系数;反之则赋予负系数。随后对所有系数进行归一化,使其绝对值总和为 1,从而在整体更新中实现有向控制与平衡。
其中, 为符号函数,指示每个搜索代理的移动方向。
(3)位置更新
搜索个体的位置通过迭代方式更新。个体𝐱𝑖的新位置𝐱′𝑖由其当前坐标与其他所有个体位置差异的加权和决定。具体更新公式如下:
其中,𝛼为固定参数,𝑟𝑖𝑗为随机变量,确保搜索过程具有足够的变异性,从而实现对搜索空间的广泛探索。
(4)基于自适应模拟退火的选择机制
基于模拟退火(SA)的选择过程包含每次迭代的动态温度更新。温度𝑇的更新公式如下:
如果新的适应度值 优于之前的适应度值 ,算法以贪婪策略接受新解,替换旧解。反之,若新的适应度值 劣于之前的适应度值 ,则按以下准则进行选择:
新位置以概率 被接受, 由下式给出:
若 大于从均匀分布 中抽取的随机数,则尽管适应度下降,新的位置仍被接受:
і
综上所述,基于模拟退火(SA)的选择算子使得在某次迭代中,某一解接受适应度较之前下降的新位置的概率与该适应度下降的幅度成反比,且该概率会随着迭代的推进逐步减小。此机制有效地实现了搜索过程中的探索与利用之间的动态平衡。
(5)自适应变异
为了进一步增强算法的探索能力,变异算子采用自适应方式设计,其变异率和变异步长会根据当前迭代动态调整。变异率 和变异步长 的计算公式如下:
其中, 表示第 次迭代的变异率, 表示初始变异率, 是最终变异率, 为当前迭代次数, 为最大迭代次数。
其中, 表示第次迭代的变异步长, 是初始变异步长, 是最终变异步长。变异率决定了第次迭代中发生变异的概率。随着迭代次数的增加, 线性地从初始值递减至最终值。同样,变异步长控制施加于搜索代理位置扰动的幅度,随着算法的进行,也从初始值线性递减至最终值。该配置使得 HSO 算法在初始迭代阶段能够更广泛地探索搜索空间,而随着迭代次数接近最大值,逐步集中于对当前解的局部开发。
当发生变异(概率为 )时,会向种群的位置添加一个随机扰动 ,其表达式为:
其中, 表示标准正态分布, 是变异向量,用于调整代理 的当前位置。代理 的更新位置计算如下:
其中, 是代理变异后的新位置。
通过上述步骤,HSO算法有效地平衡了全局搜索与局部搜索策略,确保在各种问题域中实现稳健的优化性能。HSO算法采用整体集群视角,结合自适应机制,构建了一个稳健的框架,能够有效解决优化问题,确保搜索空间的充分探索与高效利用。HSO算法的流程图如下所示:
HSO优化算法的伪代码如下所示:
2、结果展示




3、MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 整体集群优化算法(Holistic Swarm Optimization, HSO)
%% Algorithm Parameters
nPop = 30; % Population size
maxIt = 10000; % Maximum number of iterations
alpha = 3; % Scaling factor for position updates
% Simulated Annealing parameters
initialTemp = 10000;
coolingRate = 0.995;
% Adaptive Mutation parameters
initialMutationRate = 0.5;
finalMutationRate = 0.1;
initialMutationStep = 0.3;
finalMutationStep = 0.1;
%% Problem Definition
nVar = 30; % Number of decision variables
varMin = -100; % Lower bound
varMax = 100; % Upper bound
%% Initialization
bestSol.position = zeros(1, nVar);
bestSol.cost = inf;
positions = rand(nPop, nVar) * (varMax - varMin) + varMin;
positionsNew = positions;
fitness = inf(1, nPop);
fitnessNew = fitness;
bestCosts = zeros(1, maxIt);
iter = 0;
%% Main Loop
while iter < maxIt
temp = initialTemp * (coolingRate ^ iter);
% Update adaptive mutation parameters
mutationRate = initialMutationRate - iter * ((initialMutationRate - finalMutationRate) / maxIt);
mutationStep = initialMutationStep - iter * ((initialMutationStep - finalMutationStep) / maxIt);
for i = 1:nPop
% Ensure positions remain within bounds
positionsNew = max(min(positionsNew, varMax), varMin);
% Evaluate fitness of each agent
fitnessNew(i) = CostFunction(positionsNew(i, :));
% Selection using greedy and SA-based criteria
if fitnessNew(i) < fitness(i)
positions(i, :) = positionsNew(i, :);
fitness(i) = fitnessNew(i);
else
delta = fitnessNew(i) - fitness(i);
if exp(-delta / temp) > rand
positions(i, :) = positionsNew(i, :);
fitness(i) = fitnessNew(i);
end
end
end
% Sort and archive best solution
[fitness, idx] = sort(fitness);
positions = positions(idx, :);
if fitness(1) < bestSol.cost
bestSol.cost = fitness(1);
bestSol.position = positions(1, :);
end
%% Coefficient Calculation (simplified, without sign)
fitnessVector = fitness(:);
differences = rms(fitnessVector) - fitnessVector;
updateCoef = differences / sum(abs(differences));
%% Position Update
for i = 1:nPop
for j = 1:nVar
randWeights = rand(nPop, 1);
displacement = alpha * sum(randWeights .* updateCoef .* (positions(:, j) - positions(i, j)));
positionsNew(i, j) = positions(i, j) + displacement;
end
end
%% Adaptive Mutation
for i = 1:nPop
if rand < mutationRate
mutationVector = mutationStep * randn(1, nVar);
positionsNew(i, :) = positionsNew(i, :) + mutationVector;
end
end
iter = iter + 1;
bestCosts(iter) = bestSol.cost;
fprintf('Iter = %d, Best Cost = %.10f\n', iter, bestSol.cost);
end
%% Convergence Plot
figure;
semilogy(1:iter, bestCosts, 'LineWidth', 1.5);
xlabel('Iteration');
ylabel('Best Cost');
title('Convergence Curve of HSO');
grid on;
参考文献
[1] Akbari E, Rahimnejad A, Gadsden S A. Holistic swarm optimization: A novel metaphor-less algorithm guided by whole population information for addressing exploration-exploitation dilemma[J]. Computer Methods in Applied Mechanics and Engineering, 2025, 445: 118208.
完整代码获取
3568

被折叠的 条评论
为什么被折叠?



