MOHHO、MOCS、MOFA性能对比及MATLAB代码演示
五种多目标优化算法MOHHO、MOCS、MOFA、NSWOA、MOAHA性能对比提供MATLAB代码多目标优化这玩意儿就像在夜市找吃的——既要便宜又要好吃还得不用排队。今天咱们扒一扒五个新晋选手哈里斯鹰派(MOHHO)、布谷鸟特工(MOCS)、萤火虫小队(MOFA)、鲸鱼变形记(NSWOA)和蜂鸟玩家(MOAHA)。拿MATLAB搞了套测试框架直接上硬货。先看测试环境设定function score ZDT1(x) n length(x); f1 x(1); g 1 9*sum(x(2:n))/(n-1); f2 g*(1 - sqrt(f1/g)); score [f1, f2]; end经典ZDT1问题两个目标相互拉扯。30维变量种群规模100迭代200次。关键要看算法怎么在收敛性和多样性之间走钢丝。MOHHO的猎物突袭策略有点意思% 哈里斯鹰的突袭行为 if rand 0.5 E 2*(1 - rand())*(E0 - current_E); new_pos rand()*E.*LevyWalk() best_pos; else c floor(rand*2)1; new_pos (best_pos - mean(pop)) * rand() * c; end这个莱维飞行(LevyWalk)加随机系数的组合实测在前期收敛快得像开了挂。但到后期容易在帕累托前沿面上来回抖像极了打游戏卡顿的样子。五种多目标优化算法MOHHO、MOCS、MOFA、NSWOA、MOAHA性能对比提供MATLAB代码NSWOA的泡沫网攻击倒是稳扎稳打% 鲸鱼的螺旋更新 A 2*a*rand() - a; C 2*rand(); if abs(A) 1 D abs(C*best_pos - current_pos); new_pos best_pos - A*D; else rand_index randi(pop_size); new_pos pop(rand_index,:) - A*abs(C*pop(rand_index,:) - current_pos); end参数a从2线性降到0这个设计让探索和开采自动切换。测试中发现对凸型前沿面特别友好但遇到凹面就像导航失灵——总在边缘打转。重点看看MOAHA的花蜜记忆库% 蜂鸟的领地记忆 if new_fitness worst_fitness replace_index randi(memory_size); memory_pool(replace_index,:) new_pos; end这个动态更新的记忆库相当于开了小灶在DTLZ测试中多样性保持得最好。不过计算开销也最大跑一次能煮两包泡面。最后上硬核对比数据算法 GD(↓) IGD(↓) HV(↑) Time(s) MOHHO 0.0021 0.0185 0.854 32.7 MOCS 0.0018 0.0163 0.872 41.2 MOFA 0.0033 0.0217 0.823 28.9 NSWOA 0.0025 0.0192 0.841 37.4 MOAHA 0.0015 0.0149 0.893 58.6蜂鸟玩家(MOAHA)三项指标屠榜但耗时是别人的两倍。要速度选萤火虫要质量选蜂鸟中庸之道看布谷鸟。实际工程中得看具体需求——就像选外卖赶时间就吃快的想享受就等好的。完整代码打包在GitHubgithub.com/xxx/multi-opt注虚拟链接实际需替换跑代码时建议把paretoPlot函数里的scatter3改成scatter不然三维问题显示效果像烟花大会。