跳到主要内容

加权法

一、直观理解:把多个分数按重要性合成一张成绩单​

多目标规划中,常要同时优化若干相互冲突的指标,例如:成本尽可能低、服务质量尽可能高、排放尽可能少。它们往往不可能在同一点上各自达到单目标最优。

加权法(Weighted Sum Method)的做法是:给每个目标一个非负权重,把多目标合成单一标量目标,再当普通单目标优化来求。权重像成绩单上的「学分」:学分高的科目更能拉动总分。

例如成本 f1f_1 与污染 f2f_2 都希望最小化,可解:

min⁡w1f1(x)+w2f2(x),w1,w2≥0, w1+w2=1\min\quad w_1 f_1(x)+w_2 f_2(x),\quad w_1,w_2\ge 0,\ w_1+w_2=1

改变权重,相当于改变偏好,得到不同的折中解。把这些解画在目标空间中,可近似帕累托前沿的一部分。

加权法简单、好实现,是多目标问题的第一试探工具,但并非总能扫全整条前沿。

二、适用场景与优缺点​

类型说明
适用场景目标可公度或可标准化;决策者能给出相对重要性;需要快速得到若干折中方案;单目标求解器已成熟(LP/NLP/MILP)。
核心优点实现成本低;可直接复用 linprog/fmincon/intlinprog;权重含义直观;便于做偏好敏感性分析。
局限与缺点非凸前沿的凹陷处可能扫不到;权重与偏好非线性对应,调权不直观;量纲不同时权重大小被尺度绑架;不能代替真正的多目标交互决策。

使用前确认:

  1. 各目标是 min 还是 max,符号是否统一;
  2. 是否先做无量纲化(归一化);
  3. 权重来源(专家打分、层次分析、情景假设);
  4. 需要一个解还是一组代表性解。

三、核心原理:标量化与帕累托最优​

1. 多目标原问题​

min⁡x∈XF(x)=(f1(x),…,fm(x))\min_{x\in X}\quad F(x)=\bigl(f_1(x),\ldots,f_m(x)\bigr)

x1x_1 支配 x2x_2:所有目标都不劣,且至少一个更优。帕累托最优解:不存在其它可行解支配它。

2. 加权标量化​

min⁡x∈X∑k=1mwkf~k(x),wk≥0, ∑kwk=1\min_{x\in X}\quad \sum_{k=1}^{m} w_k \tilde f_k(x),\quad w_k\ge 0,\ \sum_k w_k=1

在适当条件下,正权重(wk>0w_k>0)得到的最优解是帕累托最优的。权重为 0 的目标可能被牺牲到非有效边界。

3. 归一化(强烈建议)​

不同目标数量级可能差几个数量级。常用理想点-劣点缩放:

f~k(x)=fk(x)−fkmin⁡fkmax⁡−fkmin⁡+ε\tilde f_k(x)=\frac{f_k(x)-f_k^{\min}}{f_k^{\max}-f_k^{\min}+\varepsilon}

其中 fkmin⁡f_k^{\min} 为单目标最优,fkmax⁡f_k^{\max} 可用其它单目标最优处的取值或劣点估计。

4. 与凸性的关系​

若可行域与目标使可达目标集为凸,加权法理论上可得到任意帕累托点(通过遍历权重)。目标集非凸时,凹陷区无法由加权和得到,需 ε-约束等方法。

四、关键决策​

1. 先单目标再加权​

分别优化每个 fkf_k,得到理想点,既用于归一化,也让决策者看到「极致方案」的代价。

2. 权重扫描策略​

二维目标可用 w=0,0.1,…,1w=0,0.1,\ldots,1 扫描;三维以上用单纯形网格或随机权重,注意点的分布可能不均匀。

3. 权重解释​

「w1=0.7w_1=0.7」并不总意味着「目标 1 占 70% 重要性」,尤其在未归一化时。报告时应同时给出权重与对应目标向量 (f1,…,fm)(f_1,\ldots,f_m)。

4. 整数与非线性​

标量化后模型类不变:原是 MILP 则仍 MILP。不要因为多目标就改用遗传算法,除非标量化后仍极难解。

五、MATLAB 示例​

双目标线性规划:最小化成本与最小化时间。

min⁡f1=4x1+x2,f2=x1+3x2s.t.x1+x2≥4,x1,x2≥0\begin{aligned} \min\quad & f_1=4x_1+x_2,\quad f_2=x_1+3x_2 \\ \text{s.t.}\quad & x_1+x_2\ge 4,\quad x_1,x_2\ge 0 \end{aligned}
% 单目标极端解,用于归一化
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. 每个权重下的决策 xx 与目标向量 F(x)F(x);
  5. 目标空间图或表,展示权衡趋势;
  6. 推荐折中解及「再增加一点成本可换多少时间」的边际叙述;
  7. 若前沿可能非凸,声明加权法可能遗漏部分有效解,并建议 ε-约束验证。

七、常见误区​

1. 不归一化直接加权​

成本 10610^6 与满意度 0∼100\sim 10 直接加,权重几乎只作用在成本上。

2. 只给一个权重就宣称「综合最优」​

综合最优依赖于偏好。应做权重敏感性,或明确决策者偏好来源。

3. 以为加权能扫到所有帕累托点​

非凸时不能。需要 ε-约束、目标规划或专门多目标算法补全。

4. 最大化与最小化混用未统一​

应把所有目标化成同向(全 min 或全 max)再加权。

5. 用智能多目标算法炫耀​

在 LP/MILP 多目标上,先加权/ε-约束 + 精确求解器通常更干净可复现。

八、小结​

加权法的核心思想可以概括为:

将多个目标线性组合成单一标量目标,通过调整权重生成不同偏好下的折中解,从而近似帕累托前沿。

它是多目标优化中最容易落地的标量化方法,适合作为第一分析工具。使用时务必归一化、扫描权重、用目标向量而不是只报标量值,并在怀疑非凸时用 ε-约束等方法交叉验证。