MOEAD-分解型多目标
MOEA/D(Multi-Objective Evolutionary Algorithm based on Decomposition)是一类通过权重向量把多目标问题分解成若干标量子问题、再协同优化的演化算法。本项目的核心实现位于 MOEAD-分解型多目标/core/moea…
MOEAD-分解型多目标
1. 方法概述
MOEA/D(Multi-Objective Evolutionary Algorithm based on Decomposition)是一类通过权重向量把多目标问题分解成若干标量子问题、再协同优化的演化算法。本项目的核心实现位于 MOEAD-分解型多目标/core/moead.py,统一运行与导出入口位于 core/moead_calculator.py。界面层支持基准多目标测试函数和上传数据代理优化两种模式,但算法主体始终以“一个子问题对应一个权重向量”的 MOEA/D 结构执行。
设多目标问题写为
$$ \min_{\boldsymbol{x}\in\Omega}\ \boldsymbol{f}(\boldsymbol{x})= \big(f_1(\boldsymbol{x}),f_2(\boldsymbol{x}),\ldots,f_m(\boldsymbol{x})\big)^\top \tag{1} $$
MOEA/D 将其分解为 \(N\) 个标量子问题:
$$ \min_{\boldsymbol{x}\in\Omega}\ g(\boldsymbol{x}\mid \boldsymbol{w}_i,\boldsymbol{z}), \qquad i=1,\ldots,N \tag{2} $$
其中 \(\boldsymbol{w}_i\) 是第 \(i\) 个权重向量,\(\boldsymbol{z}\) 是理想点。
2. 问题定义与上传代理优化
在内置模式下,项目支持 ZDT1/ZDT2/ZDT3,目标维数固定为 \(m=2\)。在上传模式下,项目并不是只构造一个单目标代理,而是人为构造了一个双目标问题。设训练样本为
$$ \mathcal{D}=\{(\boldsymbol{x}^{(n)},y^{(n)})\}_{n=1}^{N_s} \tag{3} $$
先用 RandomForestRegressor(n_estimators=300) 训练预测目标
$$ \hat f(\boldsymbol{x})=\frac{1}{300}\sum_{b=1}^{300}T_b(\boldsymbol{x}) \tag{4} $$
再定义以样本中心为基准的第二目标
$$ d_c(\boldsymbol{x})= \frac{1}{d}\sum_{j=1}^{d} \left(\frac{x_j-c_j}{s_j}\right)^2 \tag{5} $$
其中 \(c_j\) 是样本均值,\(s_j\) 是边界跨度;若跨度为零,代码会把该维跨度修正为 \(1\)。
于是上传模式下的双目标向量为
$$ \boldsymbol{f}_{up}(\boldsymbol{x})= \begin{bmatrix} \sigma\,\hat f(\boldsymbol{x})\\ d_c(\boldsymbol{x}) \end{bmatrix}, \qquad \sigma= \begin{cases} 1, & \text{min}\\ -1, & \text{max} \end{cases} \tag{6} $$
这意味着上传模式得到的是“预测目标值”和“距离样本中心的归一化偏离”之间的 Pareto 权衡。
3. 核心数学模型
3.1 权重向量与邻域
当 \(m=2\) 时,项目按等距方式生成权重向量
$$ \tilde{\boldsymbol{w}}_i= \left(\frac{i-1}{N-1},1-\frac{i-1}{N-1}\right) \tag{7} $$
随后将每个分量与 \(10^{-6}\) 比较取较大值并归一化,得到真正使用的 \(\boldsymbol{w}_i\)。每个子问题的邻域由权重向量欧氏距离确定:
$$ \mathcal{B}_i=\operatorname{TopT}\Big(\|\boldsymbol{w}_i-\boldsymbol{w}_j\|_2\Big)_{j=1}^{N} \tag{8} $$
其中 TopT 表示取最近的 n_neighbors 个索引。
3.2 理想点与分解函数
设当前种群目标矩阵为 \(\boldsymbol{F}^{(t)}\),则理想点按分量最小值得到
$$ \boldsymbol{z}^{(t)}=\min_{1\le i\le N}\boldsymbol{f}(\boldsymbol{x}_i^{(t)}) \tag{9} $$
若选择 Tchebycheff 分解,则子问题标量函数为
$$ g_{\mathrm{tche}}(\boldsymbol{x}\mid\boldsymbol{w}_i,\boldsymbol{z}) = \max_{1\le j\le m} w_{ij}\left|f_j(\boldsymbol{x})-z_j\right| \tag{10} $$
若选择 PBI 分解,则先计算投影距离
$$ d_1(\boldsymbol{x})= \frac{\left|\big(\boldsymbol{f}(\boldsymbol{x})-\boldsymbol{z}\big)^\top \boldsymbol{w}_i\right|}{\|\boldsymbol{w}_i\|_2} \tag{11} $$
再计算垂直距离
$$ d_2(\boldsymbol{x})= \left\| \boldsymbol{f}(\boldsymbol{x})-\boldsymbol{z}-d_1(\boldsymbol{x})\frac{\boldsymbol{w}_i}{\|\boldsymbol{w}_i\|_2} \right\|_2 \tag{12} $$
从而
$$ g_{\mathrm{pbi}}(\boldsymbol{x}\mid\boldsymbol{w}_i,\boldsymbol{z}) = d_1(\boldsymbol{x})+\theta d_2(\boldsymbol{x}) \tag{13} $$
其中 \(\theta\) 对应参数 theta。
3.3 初始化与繁殖
项目按均匀分布初始化每个子问题对应的解:
$$ \boldsymbol{x}_i^{(0)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}),\qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{14} $$
对第 \(i\) 个子问题,项目从邻域中随机抽取两个索引 \(a,b\in\mathcal{B}_i\),并用差分形式生成子代:
$$ \boldsymbol{y}_i^{(t)}= \boldsymbol{x}_i^{(t)}+\frac{1}{2}\big(\boldsymbol{x}_a^{(t)}-\boldsymbol{x}_b^{(t)}\big) \tag{15} $$
随后对每一维以概率 pm=0.1 做多项式变异。若该维随机数为 \(u\),则变异增量写为
$$ \delta(u)= \begin{cases} (2u)^{\frac{1}{\eta_m+1}}-1, & u\le 0.5\\ 1-\big(2(1-u)\big)^{\frac{1}{\eta_m+1}}, & u>0.5 \end{cases} \tag{16} $$
变异后的第 \(j\) 维为
$$ y_{ij}^{(t)}\leftarrow \operatorname{clip}\!\Big(y_{ij}^{(t)}+\delta(u)(u_j-l_j),\,l_j,\,u_j\Big) \tag{17} $$
其中 eta_m=20。
3.4 邻域更新与质量指标
新子代目标值用于更新理想点:
$$ \boldsymbol{z}^{(t+1)}=\min\big(\boldsymbol{z}^{(t)},\boldsymbol{f}(\boldsymbol{y}_i^{(t)})\big) \tag{18} $$
随后对邻域内每个子问题 \(j\in\mathcal{B}_i\),若
$$ g(\boldsymbol{y}_i^{(t)}\mid \boldsymbol{w}_j,\boldsymbol{z}^{(t+1)}) \le g(\boldsymbol{x}_j^{(t)}\mid \boldsymbol{w}_j,\boldsymbol{z}^{(t+1)}) \tag{19} $$
则用子代替换原解。
在二维情况下,项目还计算 Hypervolume:
$$ \mathrm{HV}(\mathcal{P})= \sum_{k=1}^{|\mathcal{P}|} \big(r_1-p_{k1}\big)\big(\hat r_{2,k}-p_{k2}\big) \tag{20} $$
并在基准函数存在真 Pareto 前沿时计算
$$ \mathrm{IGD}= \frac{1}{|\mathcal{P}^\star|} \sum_{\boldsymbol{q}\in\mathcal{P}^\star} \min_{\boldsymbol{p}\in\mathcal{P}}\|\boldsymbol{q}-\boldsymbol{p}\|_2 \tag{21} $$
4. 算法流程
结合 core/moead.py、core/moead_calculator.py 与上传代理模块,本项目 MOEA/D 的流程为:
- 选择内置
ZDT1/ZDT2/ZDT3或上传代理优化模式。 - 生成权重向量并按式(8)构造邻域。
- 按式(14)初始化每个子问题对应的决策向量。
- 计算初始目标值并建立理想点。
- 对每个子问题按式(15)和式(16)至式(17)生成子代。
- 按式(18)更新理想点,再按式(19)更新邻域解。
- 在二维情况下记录 HV 历史,结束后计算 IGD。
- 导出
ParetoFront、ParetoSolutions、HVHistory、Weights等工作表和复现实验脚本。
5. 关键参数说明
pop_size:子问题数,也是权重向量个数。max_iter:最大迭代次数。n_neighbors:每个子问题的邻域规模。decomp_type:分解类型,取tche或pbi。theta:PBI 罚参数。ref_point:HV 计算参考点;上传模式会自动根据样本数据生成。
6. 评价指标与输出结果解释
项目输出主要包括:
ParetoFront:最终目标值集合;代码中并未额外做一次非支配过滤,而是直接导出最终子问题对应的目标值。ParetoSolutions:对应的决策变量矩阵。HVHistory:二维情况下的 HV 收敛历史。Weights:各子问题的权重向量。Summary:pareto_size、hv_final、igd等指标。
因此,这里的“ParetoFront”更准确地说是“最终近似前沿解集”。在论文结果部分,建议先给出 ParetoFront/ParetoSolutions 形成的前沿图,再报告 Summary 中的 hv_final、igd 等指标,并结合 HVHistory 说明收敛趋势。若采用上传代理模式,还应明确第二目标对应式(6)的样本中心偏离度,因此前沿上的解表示“预测目标值”与“样本可达性”之间的权衡关系。
7. 论文写作模板
可在论文方法部分表述为:
“本文采用 MOEA/D 框架求解双目标优化问题。算法首先使用均匀权重向量将原问题分解为多个标量子问题,并根据权重向量距离构造子问题邻域。每轮迭代通过邻域差分生成子代,再采用 Tchebycheff 或 PBI 标量化函数比较新旧解并更新邻域。对于数据驱动场景,本文并未简单构造单目标代理,而是把随机森林预测目标与距离样本中心的偏离程度共同作为双目标,从而获得更具解释性的 Pareto 解集。”
7.1 结果部分补充模板
若需把实验结果直接写入论文结果部分,可进一步表述为:
“图X展示了算法得到的 Pareto 前沿,表X列出了代表性非支配解及其决策变量和目标函数值。结合 HV、IGD、前沿规模或档案规模等指标可见,该算法在保持解集多样性的同时实现了较好的收敛性能。对于上传代理优化场景,所得前沿刻画了预测目标与样本中心偏离度之间的权衡关系,从而为方案筛选提供了多解备选。”
7.2 写作替换提示
为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:
ParetoFront、Pareto_Front可写为“最终 Pareto 前沿解集”或“非支配解集”;ParetoSolutions可写为“Pareto 前沿对应的决策变量组合”;HVHistory、hv_final可写为“超体积指标及其演化曲线”;igd可写为“反世代距离指标”;- 上传代理模式下的第二目标可写为“预测目标与样本中心偏离度之间的权衡关系”。
7.3 可直接替换的论文结果段落
若需进一步直接落稿,可按以下模板替换其中的表号、图号和数值:
“由表X可知,MOEA/D 在[问题名称]上获得的最终近似 Pareto 解集规模为 [pareto_size],其超体积指标 hv_final 为 [hv_final],反世代距离 igd 为 [igd]。由图X所示 Pareto 前沿可见,算法在两个目标之间形成了较为均匀的权衡分布;由图Y所示 HVHistory 曲线可见,HV 值随迭代逐步提升并在后期趋于稳定,说明解集的收敛性与覆盖性均得到改善。表Y进一步列出了 ParetoSolutions 中若干代表性非支配解对应的决策变量组合,可据此从不同权衡方案中筛选工程可实施解。若采用上传代理优化模式,则该前沿反映的是预测目标与样本中心偏离度之间的折中关系,并可结合 SurrogateMetrics 中的 RMSE、MAE 与 \(R^2\) 等指标说明所得结果具有一定的数据驱动可信度。”
8. 实现说明与注意事项
- 本实现实际聚焦于二维多目标问题,特别是 HV 仅在二维下计算。
- 上传模式下第二目标
distance_to_center不是通用 MOEA/D 标准设置,而是项目为代理优化特意加入的实现细节。 core/moead.py中pc=1.0被定义但未实际参与交叉判断,繁殖主要依赖式(15)的差分更新和多项式变异。- 导出的
ParetoFront未做额外非支配过滤,论文写作时应表述为“最终近似 Pareto 解集”更稳妥。
9. 单篇终审补充
9.1 图题与表题对齐建议
Parameters表可写为:表X MOEA/D 参数设置表。Summary表可写为:表X MOEA/D 运行摘要表。ParetoFront表可写为:表X MOEA/D 最终近似 Pareto 前沿表。ParetoSolutions表可写为:表X MOEA/D Pareto 决策变量表。HVHistory表可写为:表X MOEA/D 超体积历史表。Weights表可写为:表X MOEA/D 子问题权重向量表。UploadedData表可写为:表X MOEA/D 上传样本预览表。Bounds表可写为:表X MOEA/D 决策变量边界表。SurrogateMetrics表可写为:表X MOEA/D 代理模型误差指标表。Charts表可写为:表X MOEA/D 图表索引表。pareto_front.png建议写为:图X MOEA/D Pareto 前沿图。hv_history.png建议写为:图X MOEA/D 超体积演化图。
9.2 终审说明
- 当前代表性结果目录建议优先采用上传代理模式的
results/manual_upload_verify_20260328/moead_sample_upload_real_after_fix/MOEAD-分解型多目标分析结果_20260328_233651。 - 当前上传模式下的真实工作表为
Parameters/Summary/ParetoFront/ParetoSolutions/HVHistory/Weights/UploadedData/Bounds/SurrogateMetrics/Charts;普通 baseline 目录通常只有前 7 张表。论文若讨论数据驱动多目标优化,应固定引用上传模式目录。 - 当前稳定实体图文件为
charts/pareto_front.png与charts/hv_history.png。正文若解释解集多样性和收敛趋势,应把ParetoFront/HVHistory两张表与两张图配套使用。 - 真实 repro 脚本统一命名为
repro_moead.py,并通过INPUT_FILE = Path('repro_inputs/moead_sample.xlsx')或moead_sample.csv读取输入副本。附录应按实际目录中脚本内容写明输入文件后缀,不能混用。 - 当前
ParetoFront未做额外非支配过滤,因此正文更稳妥的写法应是“最终近似 Pareto 解集”,不要直接写成“严格非支配解集”。
9.3 全量强化补充
- 本轮按真实磁盘再次核对,算法目录为
具体的算法3/优化与多目标/MOEAD-分解型多目标,代表性结果目录为具体的算法3/优化与多目标/MOEAD-分解型多目标/results/manual_upload_verify_20260328/moead_sample_upload_real_after_fix/MOEAD-分解型多目标分析结果_20260328_233651。 - 该目录的主工作簿为
MOEAD-分解型多目标分析结果_20260328_233651.xlsx,真实工作表为Parameters、Summary、ParetoFront、ParetoSolutions、HVHistory、Weights、UploadedData、Bounds、SurrogateMetrics、Charts。 - 当前主图目录为
charts/,实体图为hv_history.png与pareto_front.png。这两张图与HVHistory/ParetoFront两张工作表一一对应,是当前最稳定的论文插图证据。 - 当前主目录下存在
repro_inputs/moead_sample.xlsx与repro_moead.py;脚本中明确写有INPUT_FILE = Path('repro_inputs/moead_sample.xlsx'),并通过run_params['data_file'] = str(CURRENT_DIR / INPUT_FILE)把上传样本路径固化到复现参数中。 - 该目录还嵌套保留了一轮复现再生产物:子目录
MOEAD-分解型多目标分析结果_20260328_233728/中再次生成了工作簿、charts/hv_history.png、charts/pareto_front.png、repro_inputs/moead_sample.xlsx与新的repro_moead.py。因此这篇应明确写成“主结果目录 + 嵌套一轮 repro 再生产物”的结构,而不是单层目录。 - 当前上传代理模式是最适合论文与交付引用的目录;
20260213的老目录只有主工作簿与图,没有 repro;pytest_window4只是测试聚合池,不应直接当作一次用户实跑结果。
10. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/MOEAD-分解型多目标。这是多目标算法,不应按单目标“一个最优值”来解释。软件实现支持 多目标优化 和 多目标上传数据代理优化;上传模式将代理预测目标作为目标 1,并构造 distance_to_center 作为目标 2,再由 MOEA/D 搜索近似 Pareto 解集。
当前较新的代表性目录为 results/MOEAD-分解型多目标分析结果_20260517_142049-多目标优化 与 results/MOEAD-分解型多目标分析结果_20260517_142118-多目标上传数据代理优化。主工作簿 MOEAD_results_*.xlsx 在普通多目标模式下包含 结果摘要、结果说明、字段说明、Summary、Problem、MOEAD_Params、Bounds、Pareto_Solutions、Pareto_Objectives、Population_Final、History、History_All、Run_Summary、Quality_Metrics、Weights、Charts;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。Quality_Metrics 中的 HV、IGD 和 Pareto 解数量是解释质量的核心,不应只看 Summary。
当前图表为 pareto_front.png 和 hv_history.png,通常直接位于主结果目录或复现输出目录下。复现代码位于 复现代码/多目标优化/ 或 复现代码/多目标上传数据代理优化/,上传模式输入副本为 repro_inputs/moead_sample.xlsx,复现输出进入 repro_outputs/。旧文中 ParetoFront/ParetoSolutions/HVHistory 是历史表名,当前较新工作簿使用 Pareto_Objectives/Pareto_Solutions/History 等统一表名;写用户说明时应以当前新表名为主。