加权法
一、直观理解:把多个分数按重要性合成一张成绩单
多目标规划中,常要同时优化若干相互冲突的指标,例如:成本尽可能低、服务质量尽可能高、排放尽可能少。它们往往不可能在同一点上各自达到单目标最优。
加权法(Weighted Sum Method)的做法是:给每个目标一个非负权重,把多目标合成单一标量目标,再当普通单目标优化来求。权重像成绩单上的「学分」:学分高的科目更能拉动总分。
例如成本 与污染 都希望最小化,可解:
改变权重,相当于改变偏好,得到不同的折中解。把这些解画在目标空间中,可近似帕累托前沿的一部分。
加权法简单、好实现,是多目标问题的第一试探工具,但并非总能扫全整条前沿。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 目标可公度或可标准化;决策者能给出相对重要性;需要快速得到若干折中方案;单目标求解器已成熟(LP/NLP/MILP)。 |
| 核心优点 | 实现成本低;可直接复用 linprog/fmincon/intlinprog;权重含义直观;便于做偏好敏感性分析。 |
| 局限与缺点 | 非凸前沿的凹陷处可能扫不到;权重与偏好非线性对应,调权不直观;量纲不同时权重大小被尺度绑架;不能代替真正的多目标交互决策。 |
使用前确认:
- 各目标是 min 还是 max,符号是否统一;
- 是否先做无量纲化(归一化);
- 权重来源(专家打分、层次分析、情景假设);
- 需要一个解还是一组代表性解。
三、核心原理:标量化与帕累托最优
1. 多目标原问题
支配 :所有目标都不劣,且至少一个更优。帕累托最优解:不存在其它可行解支配它。
2. 加权标量化
在适当条件下,正权重()得到的最优解是帕累托最优的。权重为 0 的目标可能被牺牲到非有效边界。
3. 归一化(强烈建议)
不同目标数量级可能差几个数量级。常用理想点-劣点缩放:
其中 为单目标最优, 可用其它单目标最优处的取值或劣点估计。
4. 与凸性的关系
若可行域与目标使可达目标集为凸,加权法理论上可得到任意帕累托点(通过遍历权重)。目标集非凸时,凹陷区无法由加权和得到,需 ε-约束等方法。
四、关键决策
1. 先单目标再加权
分别优化每个 ,得到理想点,既用于归一化,也让决策者看到「极致方案」的代价。
2. 权重扫描策略
二维目标可用 扫描;三维以上用单纯形网格或随机权重,注意点的分布可能不均匀。
3. 权重解释
「」并不总意味着「目标 1 占 70% 重要性」,尤其在未归一化时。报告时应同时给出权重与对应目标向量 。
4. 整数与非线性
标量化后模型类不变:原是 MILP 则仍 MILP。不要因为多目标就改用遗传算法,除非标量化后仍极难解。
五、MATLAB 示例
双目标线性规划:最小化成本与最小化时间。
% 单目标极端解,用于归一化
A = [-1, -1];
b = -4;
lb = [0; 0];
[x1opt, f1min] = linprog([4; 1], A, b, [], [], lb, []);
[x2opt, f2min] = linprog([1; 3], A, b, [], [], lb, []);
f1_at_f2 = [4, 1] * x2opt; % 在 f2 最优处的 f1
f2_at_f1 = [1, 3] * x1opt;
f1max = f1_at_f2;
f2max = f2_at_f1;
fprintf("理想点近似: f1min=%.4f, f2min=%.4f\n", f1min, f2min);
% 权重扫描
ws = 0:0.1:1;
results = zeros(numel(ws), 4); % w, f1, f2, 合成目标
for t = 1:numel(ws)
w = ws(t);
% 归一化后加权:w*f1_tilde + (1-w)*f2_tilde
% 等价于线性目标系数的加权组合
c1 = [4; 1];
c2 = [1; 3];
% 将 f 映射到 [0,1] 后的等效:系数 / (fmax-fmin)
scale1 = max(f1max - f1min, 1e-8);
scale2 = max(f2max - f2min, 1e-8);
c = w * (c1 / scale1) + (1 - w) * (c2 / scale2);
[x, ~] = linprog(c, A, b, [], [], lb, []);
f1 = c1' * x;
f2 = c2' * x;
results(t, :) = [w, f1, f2, c' * x];
end
disp(array2table(results, ...
"VariableNames", ["w", "f1_cost", "f2_time", "scalar_obj"]));
% 目标空间折中曲线
figure;
plot(results(:, 2), results(:, 3), "-o", "LineWidth", 1.2);
xlabel("f_1 成本");
ylabel("f_2 时间");
title("加权法得到的折中解(近似帕累托前沿)");
grid on;
若原问题是非线性,只需把 linprog 换成 fmincon,目标改为 w*f1+(1-w)*f2。
六、如何解释结果
应报告:
- 各单目标最优值与对应方案(理想点);
- 归一化方式;
- 采用的权重及理由(情景:成本优先 / 均衡 / 时间优先);
- 每个权重下的决策 与目标向量 ;
- 目标空间图或表,展示权衡趋势;
- 推荐折中解及「再增加一点成本可换多少时间」的边际叙述;
- 若前沿可能非凸,声明加权法可能遗漏部分有效解,并建议 ε-约束验证。
七、常见误区
1. 不归一化直接加权
成本 与满意度 直接加,权重几乎只作用在成本上。
2. 只给一个权重就宣称「综合最优」
综合最优依赖于偏好。应做权重敏感性,或明确决策者偏好来源。
3. 以为加权能扫到所有帕累托点
非凸时不能。需要 ε-约束、目标规划或专门多目标算法补全。
4. 最大化与最小化混用未统一
应把所有目标化成同向(全 min 或全 max)再加权。
5. 用智能多目标算法炫耀
在 LP/MILP 多目标上,先加权/ε-约束 + 精确求解器通常更干净可复现。
八、小结
加权法的核心思想可以概括为:
将多个目标线性组合成单一标量目标,通过调整权重生成不同偏好下的折中解,从而近似帕累托前沿。
它是多目标优化中最容易落地的标量化方法,适合作为第一分析工具。使用时务必归一化、扫描权重、用目标向量而不是只报标量值,并在怀疑非凸时用 ε-约束等方法交叉验证。