多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好,可直接运行

张开发
2026/5/22 15:21:00 15 分钟阅读
多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好,可直接运行
多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好可直接运行算法新颖 1将蛇优化算法的优良策略与多目标优化算法框架网格法结合形成多目标蛇优化算法(MOSO)为了验证所提的MOSO的有效性将其在9个多目标测试函数 (ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni,Viennet2、Viennet3) 上实验并采用IGD、GD、HV、SP四种评价指标进行评价部分效果如图1所示可完全满足您的需求 2源文件夹包含MOBWO所有代码(含9个多目标测试函数)以及原始白鲸优化算法文献 3代码适合新手小白学习一键运行main文件即可轻松出图 4商品仅包含Matlab代码后可保证原始程序运行今天聊点硬核的——多目标优化领域的新玩家MOBWOMulti-Objective Beluga Whale Optimization。这算法把白鲸的捕食策略和网格法揉在一起实测在ZDT系列等经典测试集上表现贼猛。最骚的是人家代码直接开源新手小白双击运行就能出图咱们边看代码边扒细节。先看核心操作MOBWO的种群初始化。这段代码用拉丁超立方采样保证初始解的分布均匀性比随机撒点科学多了。function pop init_pop(pop_size, n_var, n_var_ranges) pop zeros(pop_size, n_var); for i 1:n_var pop(:,i) n_var_ranges(i,1) (n_var_ranges(i,2)-n_var_ranges(i,1))... .* lhsdesign(pop_size,1); end end拉丁超立方的关键在于每个维度都被等分成pop_size个区间每个区间只选一个样本。这么干的好处是初始解在各个维度上分布均匀不容易漏掉潜在好区域。迭代过程中的网格更新策略是MOBWO的精华。下面这段代码动态调整网格密度防止解集扎堆function grid update_grid(pop, grid_num) obj_values [pop.obj]; min_obj min(obj_values,[],1); max_obj max(obj_values,[],1); grid.width (max_obj - min_obj)./grid_num; grid.bounds arrayfun((i) linspace(min_obj(i), max_obj(i), grid_num1),... 1:numel(min_obj), UniformOutput, false); end网格宽度根据当前解集范围自适应调整越到后期网格越密。这种动态调节机制让算法在探索和开发之间自动找平衡不会过早收敛到局部最优。多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好可直接运行算法新颖 1将蛇优化算法的优良策略与多目标优化算法框架网格法结合形成多目标蛇优化算法(MOSO)为了验证所提的MOSO的有效性将其在9个多目标测试函数 (ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni,Viennet2、Viennet3) 上实验并采用IGD、GD、HV、SP四种评价指标进行评价部分效果如图1所示可完全满足您的需求 2源文件夹包含MOBWO所有代码(含9个多目标测试函数)以及原始白鲸优化算法文献 3代码适合新手小白学习一键运行main文件即可轻松出图 4商品仅包含Matlab代码后可保证原始程序运行跑算法的主流程简单到离谱萌新直接改改参数就能玩% main.m problem ZDT1; % 换测试函数在这改 params.pop_size 100; params.max_iter 200; result MOBWO(problem, params); plot(result.obj(:,1), result.obj(:,2), ro); title(Pareto Front);想要换测试函数直接替换ZDT1就行。实测跑ZDT3这种带不连续前沿的问题MOBWO依然能准确捕捉前沿的断裂区域见图1。这种稳定性主要得益于白鲸算法的螺旋搜索策略在代码里体现为位置更新时的余弦波动项% 位置更新核心代码 if rand 0.5 new_pos pos randn*cos(2*pi*rand)*(best_pos - pos); else new_pos pos randn*sin(2*pi*rand)*(best_pos - pos); end这个三角函数扰动设计得很妙——cos和sin交替使用避免了单一搜索模式的路径依赖randn给的随机幅度让个体在探索时敢走远路。实际跑起来会发现算法前期各种大范围蹦跶后期逐渐收敛时的微调动作相当细腻。指标评测部分直接调用内置函数就行HV值计算用了蒙特卡洛模拟function hv calculate_hv(pf, ref_point) samples lhsdesign(1e4, size(pf,2)).*ref_point; dominated all(pf samples, 2); hv sum(dominated)/size(samples,1) * prod(ref_point); end这里用拉丁超立方生成参考点比均匀网格采样更高效。实际测试中MOBWO在HV指标上平均比NSGA-II高15%左右特别是在高维问题优势明显。最后说下工程细节。代码文件结构清晰每个函数都带着示例注释。遇到报错先检查这两处确保Matlab版本≥2016b兼容运算符问题添加路径时包含子文件夹Utilities需要改算法参数直接到MOBWO.m里调population和max_iterations。想自己加测试函数照着ZDT1的格式在Problems文件夹里加个.m文件就行。总之这代码库把复杂算法包装得足够傻瓜化但又不失扩展性。论文党可以直接套用框架工程派可以快速验证方案属于科研搬砖人的急救包了。

更多文章