多目标规划 · 深度手册
分类:优化类 | 难度:★★★ 高阶 | 编号:
mop
一、这是什么(一句话用途)
同时优化冲突目标(成本 vs 质量 / 时间 vs 风险)
二、核心思想
现实决策几乎都是多目标的,而且目标之间常常冲突——便宜就没好货,快了就容易错。多目标规划不追求"唯一最优解"(因为不存在),而是寻找 Pareto 最优解集:在这个集合里,任何方案的改进都必须以牺牲另一目标为代价。决策者再从前沿上按偏好挑一个妥协解。常用方法有三:加权求和(最简单但需归一)、ε-约束(把其他目标当约束)、NSGA-II(进化算法直接求整个前沿)。
三、数学原理与推导
向量目标 。
Pareto 占优:解 支配 ,若 且 。Pareto 最优集 。
加权法:化为单目标 ,(需先归一化量纲)。不同权重扫出前沿。
ε-约束法:优化首要目标,其余转约束 。
Pareto 前沿即目标空间中的权衡曲线;决策者按"满意度/风险偏好"在前沿上选点。NSGA-II 用快速非支配排序 + 拥挤度保持前沿多样性。
四、建模 / 求解步骤
- 列多目标
- 法一:加权求和(需归一)
- 法二:ε-约束转单目标
- 法三:NSGA-II 求 Pareto 集
- 决策选妥协解
五、关键公式速查
min (f1(x),f2(x),…);Pareto: 无改进一目标而不损另一
六、典型示例
供应链: 成本最低 + 时效最高 的权衡解集。
完整算例(数字演示,照着算一遍)
场景:min f1=−x(利润)、max f2=−(1−x)(环保),x∈[0,1] 单变量示意。
帕累托前沿:本例 x∈[0,1] 全为帕累托最优;按权重 w=(0.5,0.5) 得妥协解 x=0.5。
结论:多目标无单一最优,输出前沿 + 妥协解供决策者选。
七、Python 实现示例
import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","mop.csv"))
F = df[["cost","time","quality"]].to_numpy(dtype=float)
# 加权法求妥协解(量纲已归一,cost/time 越小越好 -> 取负)
W = np.array([0.4,0.3,0.3])
score = -(W*[1,1,0] - W*[0,0,1]*0) # 占位,逐行计算
val = F.copy(); val[:,0]=-F[:,0]/F[:,0].max(); val[:,1]=-F[:,1]/F[:,1].max(); val[:,2]=F[:,2]/F[:,2].max()
s = val@W
best = df["alt"][s.argmax()]
print("加权妥协解:", best, "得分=%.3f"%s.max())
配套文件:
py_mop.py(需 numpy / pandas;与下方数据集配套练习)
八、MATLAB 实现示例
%% 多目标加权法示例(MATLAB/Octave)
df = readtable('..\datasets\mop.csv');
F = table2array(df(:,2:4));
v=F; v(:,1)=-F(:,1)/max(F(:,1)); v(:,2)=-F(:,2)/max(F(:,2)); v(:,3)=F(:,3)/max(F(:,3));
W=[0.4,0.3,0.3]; s=v*W';
[~,k]=max(s); fprintf('加权妥协解: %s\n', df.alt{k});
配套文件:
m_mop.m(基础 MATLAB / Octave 即可运行)
九、练手数据集(可下载)
6 个方案在成本/时间/质量三目标上的取值。用于多目标加权法求妥协解、认识 Pareto 权衡。
- 字段:alt, cost, time, quality
- 行数:6 行
- 下载:
mop.csv
十、常见误区与避坑清单
- 目标量纲要归一
- Pareto 解是集合非唯一
- 权重难定可用 ε 约束
十一、结果怎么解读
前沿上每点代表一种权衡。
十二、常与谁搭配
与 GA / PSO 结合。
十三、论文写作技巧(怎么把它写进论文)
把 多目标规划 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。
1. 动机怎么写(为什么用它而不是别的)
先把问题「数学化」:决策变量、目标函数、约束条件——这一步写清楚比算法本身更重要。再说明为何用 多目标规划 求解:连续可导用梯度 / 解析法,组合 / 非凸 / 黑箱用启发式(GA / PSO / SA)。
2. 结果怎么写(图表与指标)
放「收敛曲线(迭代 vs 目标值)」+「最优解参数表」+「约束是否满足」三件套。若是多目标,放 Pareto 前沿散点图。
3. 可直接套用的写作话术
- 中文模板:针对<问题>,本文采用 多目标规划 进行同时优化冲突目标(成本 vs 质量 / 时间 vs 风险)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
- 英文模板:To address
, we adopt 多目标规划 to 同时优化冲突目标(成本 vs 质量 / 时间 vs 风险). Benefiting from its ability to , it outperforms on .
4. 同类易踩的写作坑
务必说明约束是否全部满足、是否陷入局部最优(可多次随机初始化对比);别把无约束结果当约束最优报。
5. 典型论文段落范例(可直接参考 / 改写)
下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。
将配送中心选址建模为带容量约束的总成本最小化问题,本文采用 多目标规划 求解,得到 5 个选址及其服务分配方案,目标值较贪婪启发式降低 12.4%,且全部约束满足。
We formulate the distribution center location as a total-cost minimization problem with capacity constraints and solve it via 多目标规划, yielding 5 sites and their service assignments. The objective is 12.4% lower than a greedy heuristic while satisfying all constraints.
十四、相关手册(延伸阅读)
十五、本手册导航
本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。