一、MMOCOA-SC介绍
基于谱聚类的多模态多目标浣熊优化算法(Multimodal Multi-Objective Coati Optimization Algorithm Based on Spectral Clustering,MMOCOA-SC)是2024年提出的一种多模态多目标优化算法,该算法的核心在于使用谱聚类方法来创建多个稳定的子种群,每个子种群包含相似的个体。然后,通过改进的Coati优化算法增加种群的多样性,并持续搜索近Pareto最优解。最后,使用改进的拥挤距离方法结合非支配排序方法来维护和保留多个近Pareto最优解。
输入参数:种群大小N,子种群数量K,最大迭代次数MaxGen,存档A,历史Pareto最优解数量S。
初始化种群P:使用好点集初始化方法。
计算适应度:为存储在P中的个体计算适应度值。
存档A:将初始种群P作为存档A。
迭代过程:
- 使用非支配排序方法对种群P进行排序。
- 根据谱聚类算法形成K个子种群。
- 对每个子种群中的个体进行更新,使用改进的浣熊优化算法。
- 更新存档A,并使用改进的拥挤距离方法进行非支配排序。
- 如果存档A中的个体数量达到S,只保留前S个个体。
种群P更新:根据改进的浣熊优化算法更新整个种群P。
存档A更新:将更新后的种群P中的个体加入存档A。
迭代结束:重复迭代过程,直到迭代次数达到MaxGen。
输出结果:使用改进的拥挤距离方法对存档A中的个体进行非支配排序,输出前N个非支配个体作为最终解。
参考文献:
[1]Deng W, Mo Y, Deng L. A Multimodal Multi-Objective Coati Optimization Algorithm Based on Spectral Clustering. Symmetry. 2024; 16(11):1474. https://doi.org/10.3390/sym16111474
二、MMOCOA-SC求解ZDT系列函数及工程应用
将MMOCOA-SC应用于求解ZDT1-ZDT4,ZDT6和工程应用–以盘式制动器优化,并采用六种不同的性能度量指标:GD、IGD、HV、Spacing、Spread和Coverage评估算法的收敛性和解的多样性
原文链接:https://blog.csdn.net/weixin_46204734/article/details/144096073
工程应用以盘式制动器优化为例,其数学模型如下:
盘式制动器模型参考文献:
[1]Ray, Tapabrata, and K.M. Liew. 2002. “A Swarm Metaphor for Multiobjective Design Optimization.” Engineering Optimization 34 (2): 141–53. doi:10.1080/03052150210915.
[2]Jangir, Pradeep and Narottam Jangir. “Non-Dominated Sorting Whale Optimization Algorithm (NSWOA): A Multi-Objective Optimization algorithm for Solving Engineering Design Problems.” Global Journal of Research In Engineering (2017): n. pag.
三、部分MATLAB代码及结果
[Xbest,Fbest]=SSMOCOASC(obj,lb,ub,numObj,SearchAgents_no,Max_iter);
%% 画图
figure
if ~isempty(TruePF)
if numObj==3
scatter3(Fbest(:, 1), Fbest(:, 2),Fbest(:,3),'ro');
hold on
scatter3(TruePF(:, 1), TruePF(:, 2),TruePF(:,3),'k.');
xlabel('f1');
ylabel('f2');
zlabel('f3');
legend(AlgorithmName,'TruePF')
title(Name)
figure
scatter3(TruePF(:, 1), TruePF(:, 2),TruePF(:,3),'k.');
xlabel('f1');
ylabel('f2');
zlabel('f3');
legend('TruePF')
title(Name)
else
scatter(Fbest(:, 1), Fbest(:, 2),'ro');
hold on
scatter(TruePF(:, 1), TruePF(:, 2),'k.');
xlabel('f1');
ylabel('f2');
legend(AlgorithmName,'TruePF')
title(Name)
end
else
if numObj==3
scatter3(Fbest(:, 1), Fbest(:, 2),Fbest(:,3),'ro');
xlabel('f1');
ylabel('f2');
zlabel('f3');
legend(AlgorithmName)
title(Name)
else
scatter(Fbest(:, 1), Fbest(:, 2),'ro');
xlabel('f1');
ylabel('f2');
legend(AlgorithmName)
title(Name)
end
end
%% 存在真实pareto前沿时,计算评价指标
if ~isempty(TruePF)
Result.IGD=IGD(Fbest,TruePF);
Result.GD=GD(Fbest,TruePF);
Result.HV=HV(Fbest,TruePF);
Result.Spacing=Spacing(Fbest,TruePF);
Result.Spread=Spread(Fbest,TruePF);
Result.Coverage=Coverage(Fbest,TruePF);
else
Result.Spacing=Spacing(Fbest,TruePF);
end