你人生的第一次装修,就撞上了多目标优化。项目经理摊开预算表:实木地板舒服但贵,赶工期得多请工人,环保漆无毒却干得慢——省钱、省时、舒服,三个目标谁也不让谁。单目标的世界很简单:找最省钱的方案就行。可现实里,我们常常要同时照顾好几个互相打架的目标。多目标优化的智慧在于:它不硬凑一个“万能评分”,而是先把所有“不委屈自己”的方案摊上桌,画出一条取舍曲线。在这条曲线上游走,就是鱼与熊掌之间的理性权衡。本篇文章从装修故事出发,带你认识什么是前沿曲线、进化算法如何搜出整条曲线、加权求和又有什么坑,学会在模型精度、推理速度和复杂度之间找到最佳平衡点。

岗位关联

掌握多目标优化,你就能在模型精度、推理速度与资源消耗之间做系统性权衡,让超参数调优从“拍脑袋”变成“看得见的选择”。

目录
  1. 可视化演示
  2. 问题定义基础
  3. 帕累托支配
  4. 帕累托前沿
  5. 标量化方法
  6. 进化算法
  7. 超参调优实战
  8. 多指标评估
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示帕累托支配关系与前沿、标量化权重扫描、NSGA-II非支配排序分层,切换模式查看。

本节配有交互动效(进入视口后自动加载,约 3KB)。

帕累托前沿:非支配解集 绿点为帕累托最优解,无法被支配 红点为被支配解,存在更优折中 a ≺ b iff ∀i: f_i(a) ≤ f_i(b) and ∃j: f_j(a) < f_j(b) 帕累托前沿是所有非支配解构成的折中边界

问题定义基础

你拽着装修公司项目经理,同时提出三个要求:“预算压到 20 万以内”“三个月内完工”“住进去要舒舒服服”。经理苦笑着说:这三件事根本不可能同时做到最好——进口实木地板舒服但贵,赶工期就得加钱请工人。你第一次意识到,有些目标天生互相打架。

这就是“多目标优化”要处理的典型场景:同时优化多个互相冲突的目标。数学上,每个装修方案是一个“解”,每个目标(花钱、耗时、舒适度)是一个目标函数,所有可行的方案构成“可行域”。与单目标优化“找到唯一最优解”不同,多目标优化通常不存在一个在所有目标上都碾压其他方案的解,它的输出是一个“解集”——把这组解全找出来,再交给决策者挑选。

项目经理听完你的诉求,不再给你一个“唯一答案”,而是拿出一沓方案让你挑。这一沓方案里,没有任何一个方案能在省钱、省时、舒适三个方面全面胜过另一个——这就是你需要的“解集”。

min⁡x∈Ω  F(x)=(f1(x), f2(x), …, fm(x))⊤\min_{\mathbf{x}\in\Omega}\; \mathbf{F}(\mathbf{x}) = \bigl(f_1(\mathbf{x}),\, f_2(\mathbf{x}),\, \ldots,\, f_m(\mathbf{x})\bigr)^\top
通俗地说:多目标优化就是在一个“可行方案仓库”里,同时追求多个目标尽量好,而不是只盯一个指标。
  1. 可行域 \Omega 与决策变量 \mathbf{x}\Omega 是所有合法方案(装修组合)的集合,\mathbf{x} 是其中一个方案(材料、工期、施工队的选择)。
    Ω={x∣gj(x)≤0, j=1,…,p}\Omega = \{\mathbf{x} \mid g_j(\mathbf{x}) \le 0,\ j=1,\ldots,p\}
  2. 目标向量 \mathbf{F}(\mathbf{x})把第 1 到第 m 个目标函数(花钱、耗时、舒适度的相反数)按顺序排成一个向量,统一用“越小越好”衡量。
    F(x)=(f1(x), f2(x), …, fm(x))⊤\mathbf{F}(\mathbf{x}) = \bigl(f_1(\mathbf{x}),\, f_2(\mathbf{x}),\, \ldots,\, f_m(\mathbf{x})\bigr)^\top
  3. 同时最小化(\min)\min 表示让这些目标尽可能小——花钱少、耗时短,舒适度则取负号变成“不舒适度”来最小化。
    min⁡x∈ΩF(x)\min_{\mathbf{x} \in \Omega} \mathbf{F}(\mathbf{x})

帕累托支配

项目经理在预算表上画了两个圈:方案 A 花 18 万、耗时 2.5 个月、舒适度 8 分;方案 B 花 20 万、耗时 3 个月、舒适度还是 8 分。你脱口而出:“B 全面被 A 碾压,傻子才选 B!”——这句直觉就是帕累托支配(Pareto Dominance)。

数学上,当方案 x 在每个目标上都不比方案 y 差,并且至少有一个目标严格更好,我们就说“x 支配 y”。被支配的方案可以放心丢进垃圾桶,永远不会出现在最终候选名单上。注意两个细节:第一,互有胜负的方案(A 省钱但慢,C 费钱但快)互不支配,都值得保留;第二,“支配”有强弱之分,这里用的是“弱支配”——允许某些目标打平,只要有一个目标严格更优即可。

你拿着这条规则把方案表从头到尾筛了一遍,凡是“被别人碾压”的统统划掉。剩下的方案虽然各有牺牲,但没有一个能被另一个彻底取代——它们都获得了“待定资格”,进入下一轮 PK。

x⪯y  ⟺  (∀i∈{1,…,m}: fi(x)≤fi(y))∧(∃j: fj(x)<fj(y))\mathbf{x} \preceq \mathbf{y} \iff \bigl(\forall i \in \{1,\ldots,m\}:\ f_i(\mathbf{x}) \le f_i(\mathbf{y})\bigr) \wedge \bigl(\exists j:\ f_j(\mathbf{x}) < f_j(\mathbf{y})\bigr)
支配关系就像“全面碾压”:x 在每个方面都不输给 y,并且至少有一个方面确实赢了,“碾压”成立。
  1. 支配符号 \preceq\mathbf{x} \preceq \mathbf{y} 读作“x 支配 y”,即 x 全面不差且局部更优。
    x⪯y\mathbf{x} \preceq \mathbf{y}
  2. 全称量词 \forall 部分对每一个目标 i,x 的取值都不大于(好于或等于)y,一个短板都不能有。
    ∀i: fi(x)≤fi(y)\forall i:\ f_i(\mathbf{x}) \le f_i(\mathbf{y})
  3. 存在量词 \exists 部分至少存在一个目标 j,x 严格小于(严格优于)y,必须有一点真正赢过对方。
    ∃j: fj(x)<fj(y)\exists j:\ f_j(\mathbf{x}) < f_j(\mathbf{y})

帕累托前沿

把“待定”方案画在一张图上:横轴是花钱,纵轴是耗时,每个点标上舒适度。你惊讶地发现,这些点连成了一条从左上弯向右下的平滑曲线——想再省一点钱,工期就必须加长;想住得更舒服,钱就得多花。这条曲线就是帕累托前沿(Pareto Front)。

数学上,所有“不被任何其他方案支配”的解构成帕累托最优集 \mathcal{P}^\ast,把它们的目标值画在目标空间里,就是帕累托前沿 \mathcal{PF}。帕累托前沿的形状很有讲究:曲线越靠近左下角代表整体越优。工程师拿到前沿后,通常会结合业务偏好(预算红线、工期底线)在曲线上挑一个点,这一步叫“决策”。

项目经理把这条曲线打印出来贴在墙上:你每碰一次这条线,就是在鱼和熊掌之间做一次选择。曲线之外是浪费,曲线之内是妥协,只有曲线本身,代表手头资源的极限。

P∗={x∈Ω∣∄ y∈Ω:y⪯x},PF={F(x)∣x∈P∗}\mathcal{P}^\ast = \{\mathbf{x} \in \Omega \mid \nexists\, \mathbf{y} \in \Omega : \mathbf{y} \preceq \mathbf{x}\}, \qquad \mathcal{PF} = \{\mathbf{F}(\mathbf{x}) \mid \mathbf{x} \in \mathcal{P}^\ast\}
帕累托前沿是“所有不被碾压的方案”在目标空间里连成的曲线或曲面——它是理性选择的边界。
  1. 帕累托最优集 \mathcal{P}^\ast可行域中所有没有被别的方案支配的解,是“幸存者”集合。
    P∗={x∈Ω∣∄ y∈Ω:y⪯x}\mathcal{P}^\ast = \{\mathbf{x} \in \Omega \mid \nexists\, \mathbf{y} \in \Omega : \mathbf{y} \preceq \mathbf{x}\}
  2. 不存在符号 \nexists找不到任何方案 y 能支配 x,这是 x 能留在集合里的“准入门槛”。
    ∄ y∈Ω:y⪯x\nexists\, \mathbf{y} \in \Omega : \mathbf{y} \preceq \mathbf{x}
  3. 帕累托前沿 \mathcal{PF}把最优集里每个 x 代入目标函数得到的点集,就是图上那条曲线。
    PF={F(x)∣x∈P∗}\mathcal{PF} = \{\mathbf{F}(\mathbf{x}) \mid \mathbf{x} \in \mathcal{P}^\ast\}

标量化方法

可你是个急脾气,不想看一墙的曲线,只想要一个“最终方案”。项目经理拿出计算器:“把省钱、省时、舒适度按你的重视程度打个分,加权求和,总分最高就是它。”——这是最朴素也最常用的标量化方法(Scalarization)。

加权求和法把多目标压成单目标:给每个目标一个权重 w_i,目标变成最小化加权和。权重反映你的偏好——预算吃紧就把“钱”的权重调大。另一个常用招数叫 ε-约束法:只看重一个目标(比如省钱),把其他目标(工期、舒适度)设成硬性上限 ε。这两类方法统称“先决策后搜索”:必须先给出权重或阈值,再搜索得到一个解;缺点是权重拍脑袋容易偏,而且在凹前沿上可能漏掉中间的好方案。

项目经理按你的权重算出“最佳方案”,你却犯嘀咕:如果老板下周突然说预算砍半,这方案就得推翻重来。标量化方法快,但把偏好焊死在权重里,换个偏好就要重算一遍。

min⁡x ∑i=1mwifi(x),s.t.  ∑i=1mwi=1,  wi≥0\min_{\mathbf{x}}\ \sum_{i=1}^{m} w_i f_i(\mathbf{x}), \qquad \text{s.t.}\; \sum_{i=1}^{m} w_i = 1,\; w_i \ge 0
min⁡x fk(x),s.t.  fi(x)≤εi, i≠k\min_{\mathbf{x}}\ f_k(\mathbf{x}), \qquad \text{s.t.}\; f_i(\mathbf{x}) \le \varepsilon_i,\ i \ne k
加权求和像“按权重打分排名”;ε-约束法像“只优一个指标,其他设底线”。
  1. 加权求和将 m 个目标乘以权重后相加,变成一个单目标分数。
    min⁡x ∑i=1mwifi(x)\min_{\mathbf{x}}\ \sum_{i=1}^{m} w_i f_i(\mathbf{x})
  2. 权重归一化所有权重非负且和为 1,表示在“重视程度蛋糕”上切分偏好。
    ∑i=1mwi=1,wi≥0\sum_{i=1}^{m} w_i = 1,\quad w_i \ge 0
  3. ε-约束法只优化第 k 个目标,其余目标以 \varepsilon_i 为界转为约束条件。
    min⁡x fk(x),s.t.  fi(x)≤εi\min_{\mathbf{x}}\ f_k(\mathbf{x}), \quad \text{s.t.}\; f_i(\mathbf{x}) \le \varepsilon_i

进化算法

老道的施工队头子有另一套本事:他不看计算器,而是让工头“试”——先照着过往经验出 50 个方案,留下不被别人碾压的“尖子生”,让他们互相借鉴、略微变异,生出一批新方案,再筛再生。几十代下来,墙上的帕累托曲线越来越清晰。

这就是多目标进化算法(MOEA)的核心思想,最出名的是 NSGA-II。它模拟自然选择:种群不断进化,每代都保留优秀个体,同时在目标空间里“均匀撒点”,防止所有方案挤成一团。NSGA-II 有三个关键操作:非支配排序把种群按“支配层级”分层,第一层就是当前帕累托前沿;拥挤度距离保证同一层里选那些“边上没人”的个体,维持多样性;精英保留策略让父代里的最优解直接进入下一代,防止好方案丢失。

几十代进化后,施工队头子递过来的方案表跟“计算器方案”最大的不同是:他没有提前问你偏好,而是把整条帕累托曲线原原本本交到你手里——信息量完全不同,选择权也回到了你的手中。

di=∑k=1mfk(i+1)−fk(i−1)fkmax⁡−fkmin⁡d_i = \sum_{k=1}^{m} \frac{f_k(i+1) - f_k(i-1)}{f_k^{\max} - f_k^{\min}}
拥挤度距离衡量“这个点周围有多空旷”,越空旷越值得保留,避免所有解挤成一团。
  1. 拥挤度距离 d_i衡量点 i 在目标空间里的“周邻稀疏程度”,值越大代表越孤立、越有保留价值。
    di=∑k=1mfk(i+1)−fk(i−1)fkmax⁡−fkmin⁡d_i = \sum_{k=1}^{m} \frac{f_k(i+1) - f_k(i-1)}{f_k^{\max} - f_k^{\min}}
  2. 分子 f_k(i+1) - f_k(i-1)按第 k 个目标排序后,点 i 前后两个邻居的差值,表示自己周围有多“空”。
    fk(i+1)−fk(i−1)f_k(i+1) - f_k(i-1)
  3. 分母 f_k^{\max} - f_k^{\min}用该目标在整个种群的取值范围做归一化,消除“钱”和“月”单位不同的影响。
    fkmax⁡−fkmin⁡f_k^{\max} - f_k^{\min}

超参调优实战

装修的戏码换到了机器学习的工地上:你是个调参工程师,面对一个图像分类模型。层数加多,准确率上去了,但训练时间暴涨、部署时推理变慢;数据增强加猛,泛化好了,可每一轮训练都磨人。这不就是“省钱 vs 省时 vs 舒适”吗?

在超参数优化(HPO)里,多目标优化把“验证集误差”和“模型复杂度/推理延迟”同时作为目标。每个超参数组合(学习率、层数、dropout)就是一个装修方案,多目标进化算法负责在超参数空间里搜索帕累托前沿。一个典型的双目标问题是最小化“1 - 准确率”和“推理延迟”:两者天然冲突,大模型准但慢,小模型快但糙。搜索结束后,你会得到一串“最优折中”的模型配置,而不是唯一模型——这是多目标 HPO 与常规“调一次参出唯一模型”的本质区别。

模型上线那天,你把帕累托前沿上的三个配置摆上会议桌:旗舰版(最准最慢)、均衡版、极速版(最快略糙)。产品经理当场拍板:用户端用极速版,离线分析用旗舰版——鱼与熊掌不再是单选题,而是整个套餐。

F(λ)=(1−Acc(λ), Latency(λ))⊤\mathbf{F}(\boldsymbol\lambda) = \bigl(1 - \text{Acc}(\boldsymbol\lambda),\ \text{Latency}(\boldsymbol\lambda)\bigr)^\top
超参调优被改写成双目标问题:误差要小,延迟也要小,不再只盯着准确率一个数。
  1. 超参数向量 \boldsymbol\lambda一次实验的超参数组合,比如学习率、网络层数、dropout 率。
    λ=(lr, layers, dropout)\boldsymbol\lambda = (\text{lr},\ \text{layers},\ \text{dropout})
  2. 1 - \text{Acc}(\boldsymbol\lambda)把“准确率越高越好”翻转为“误差越小越好”,方便统一做最小化。
    1−Acc(λ)1 - \text{Acc}(\boldsymbol\lambda)
  3. 推理延迟 \text{Latency}(\boldsymbol\lambda)第二个目标,衡量模型在真实设备上的响应速度,与大模型高精度天然冲突。
    Latency(λ)\text{Latency}(\boldsymbol\lambda)

多指标评估

前沿是画出来了,可桌上还摆着几十个方案,谁上生产?装修的收尾阶段,你终于要面对多指标评估:不能只挑“最便宜的”或“最快的”,得把指标拉到同一把尺子上量,再按家庭偏好做最终决策。

常见的做法是“理想点法”:先算出每个目标的理想值(单独优化该目标能得到的最优值)和最差值(前沿上的极端值),然后看每个候选方案离理想点有多近。离得最近的那个,就是“没有明显短板”的均衡方案。这其实也是很多 AutoML 平台内部的做法:先用进化算法生成整条前沿,再用归一化距离或业务权重从里面挑最终解。评估多目标算法本身也不只看一个点,而是看整条前沿的质量——覆盖率、均匀度、收敛性,这些统称为多指标评估。

你和家人围坐在餐桌前,对着那张帕累托曲线,终于达成一致:预算 20 万、工期 2.5 个月、舒适度 7 分——理想点法的“均衡解”正好落在这个区间。多目标优化的最后一步,永远是“人”来做决定。

p∗=arg⁡min⁡p∈PF∑i=1m(fi(p)−fiidealfinadir−fiideal)2p^{\ast} = \arg\min_{p \in \mathcal{PF}} \sqrt{\sum_{i=1}^{m} \left( \frac{f_i(p) - f_i^{\text{ideal}}}{f_i^{\text{nadir}} - f_i^{\text{ideal}}} \right)^2}
理想点法先给每个目标定“天花板”和“地板”,再找离天花板最近的那个均衡方案。
  1. 理想点 f_i^{\text{ideal}}第 i 个目标单独优化所能达到的最优值,是理论上限,可望而不可即。
    fiideal=min⁡x∈Ωfi(x)f_i^{\text{ideal}} = \min_{x \in \Omega} f_i(x)
  2. 最差点 f_i^{\text{nadir}}帕累托前沿上第 i 个目标可能碰到的最差值,用来当“地板”做归一化。
    finadir=max⁡p∈PFfi(p)f_i^{\text{nadir}} = \max_{p \in \mathcal{PF}} f_i(p)
  3. 归一化欧氏距离把每个目标缩放到同一尺度后求距离,距离最小者即“最均衡”方案。
    ∑i=1m(fi(p)−fiidealfinadir−fiideal)2\sqrt{\sum_{i=1}^{m} \left( \frac{f_i(p) - f_i^{\text{ideal}}}{f_i^{\text{nadir}} - f_i^{\text{ideal}}} \right)^2 }

AI 应用场景

云端模型超参调优的精度-速度平衡

阶段:超参数优化与模型选型

解决的问题:传统网格/贝叶斯调参只认“验证集准确率”一个指标,容易选出又大又慢的模型,上线后推理延迟超预算、GPU 成本飙升。多目标 HPO 同时以“验证误差”和“推理延迟”为目标,输出帕累托前沿,让同一套搜索结果为不同业务线提供不同配置。

具体案例:某电商推荐团队用 NSGA-II 搜索排序模型超参数,前沿上同时产出“高精度离线重排版”和“低延迟在线召回版”,线上点击率提升 8%、延迟下降 40%。

移动端神经架构搜索的多目标权衡

阶段:模型结构设计与压缩

解决的问题:NAS 每次迭代都要评估候选网络,单目标搜索会忽视模型体积和能耗;把“准确率”与“参数量”同时优化,才能兼顾上架包体限制和终端续航。

具体案例:手机人脸识别团队用多目标进化算法搜网络结构,在精度仅损失 0.5% 的前提下将模型压缩 4 倍,顺利通过 App 包体积红线。

推荐系统的多业务指标平衡

阶段:离线评估与在线策略调优

解决的问题:点击率、多样性、停留时长互相牵制,只调一个指标会伤及另外两个;多目标优化把“矛盾”摊到明面上,让业务方看到每一条可行的权衡路径。

具体案例:信息流产品以“点击率”和“推荐多样性”为双目标跑出前沿,再按内容生态策略选中庸配置,人均时长提升 12%。

Python 演示

python50 行
import random  # 两个冲突目标:想让 x 同时靠近 (0,0) 和 (1,1),两者不可兼得def f1(x):    return x[0] ** 2 + x[1] ** 2  def f2(x):    return (x[0] - 1) ** 2 + (x[1] - 1) ** 2  def obj(x):    return [f1(x), f2(x)]  def dominates(u, v):    """u 支配 v:u 每个目标都不差,且至少一个严格更好(求最小)"""    return all(a <= b for a, b in zip(u, v)) and any(a < b for a, b in zip(u, v))  def non_dominated(pop):    """筛选所有不被支配的个体,构成当前帕累托前沿"""    return [x for i, x in enumerate(pop)            if not any(dominates(obj(y), obj(x)) for j, y in enumerate(pop) if j != i)]  def evolve(gen=40, size=60, dim=2, step=0.15):    pop = [[random.uniform(-2, 2) for _ in range(dim)] for _ in range(size)]    for _ in range(gen):        pf = non_dominated(pop)        children = []        for _ in range(size):            parent = random.choice(pf)            child = [v + random.gauss(0, step) for v in parent]            children.append(child)        pop = non_dominated(pop + children)    return non_dominated(pop)  def main():    pf = evolve()    print("帕累托前沿解 (f1: 到原点距离, f2: 到(1,1)距离)")    for x in sorted(pf, key=f1):        print("  x=(%.2f, %.2f)  f1=%.2f  f2=%.2f" % (x[0], x[1], f1(x), f2(x)))    print("解的数量: %d" % len(pf))  if __name__ == "__main__":    main()
目的:从零实现一个极简多目标进化算法,在“到原点”和“到 (1,1)”两个互相冲突的目标上搜索帕累托前沿,直观感受“先求前沿、再选方案”的完整流程。
  1. return all(a <= b for a, b in zip(u, v)) and any(a < b for a, b in zip(u, v))支配的两半:所有目标不差 + 至少一个更优,缺一不可
  2. if not any(dominates(obj(y), obj(x)) for j, y in enumerate(pop) if j != i)找不到能支配它的个体,才把它保留为前沿解
  3. pf = non_dominated(pop)每代先选出当前“精英方案”(前沿)
  4. parent = random.choice(pf)只从精英方案里挑父代,保证进化方向正确
  5. child = [v + random.gauss(0, step) for v in parent]高斯噪声做“轻变异”,在前沿附近小步探索
  6. pop = non_dominated(pop + children)新旧合并统一筛选,精英永远不会丢失

常见误区

误区我把精度和速度按 7:3 加权得到一个分数,挑分数最高的模型不就行了吗?多目标优化是不是多此一举?

正解加权求和是“标量化方法”的一种,只有在你已经明确知道权重时才合适。它有两个隐患:权重是拍脑袋定的,换个老板就得重算;在凹的帕累托前沿上,无论怎么调权重都会漏掉中间区域的好方案。正确姿势是先用多目标进化算法把整条前沿算出来,再结合业务偏好选点。

为何常见:单目标优化的思维惯性太强,总想用一个数字给所有方案排队,忽略了“权重本身就是一种昂贵决策”。

误区帕累托前沿上的解都是“最优”的,那随便挑一个就行了吧?

正解帕累托最优只保证“没有一个解能全面替代它”,并不代表它们价值等价。同一个前沿上,一个解可能极快但精度一般,另一个极准但很慢——具体选哪个,取决于业务场景(实时推荐 vs 离线分析)。“先求前沿,再做决策”是两个独立步骤,决策阶段还要引入偏好。

为何常见:把数学上的“不可比较”误解成“无差别”,忽略了决策者的偏好才是最后一锤。

误区既然要多目标,那我加上训练时间、内存占用、模型体积、可解释性、鲁棒性……目标越多越全面。

正解目标维度升高后会出现“维度灾难”:高维空间里几乎所有解都互不支配,前沿退化成“几乎全是前沿”,反而失去筛选能力,决策无从下手。实践中通常控制在 2-4 个目标,相关目标先做聚合(如把内存和耗时合成“资源消耗”)。

为何常见:把“全面评估”错当成“目标函数越多越好”,忽略了高维空间中支配关系变得极其稀疏的事实。

误区进化算法听着就高级,加权求和是过时的方法,我全部用 NSGA-II 就行。

正解两者解决不同阶段的问题:标量化是“先定偏好再搜索”,适合目标明确、权重固定的生产流水线,计算快;进化算法是“先搜索再定偏好”,适合探索阶段,算整条前沿但代价高。成熟团队通常两者结合:进化算法出前沿,标量化做最终决策。

为何常见:工具攀比心理,忽略了“决策方式应与问题结构匹配”这一基本原则。

面试题

Q1. 下列关于多目标优化与单目标优化区别的说法,正确的是?

单选题 · easy

  • A.多目标优化一定能找到唯一最优解
  • B.多目标优化输出的是一个解集← 正确答案
  • C.多目标优化不需要考虑目标冲突
  • D.单目标优化更适合工程落地

答案:B。多目标问题中目标互相冲突,通常不存在唯一“全能最优”解,输出是整个不被支配的解集(帕累托前沿),再由决策者选择。A 把多目标当单目标处理,C 忽略了冲突这个前提,D 与问题无关。

Q2. 最小化两个目标 f1、f2 时,方案 A 的 (f1, f2) = (0.5, 0.8),方案 B = (0.6, 0.7),则下列说法正确的是?

单选题 · easy

  • A.方案 A 支配方案 B
  • B.方案 B 支配方案 A
  • C.两个方案互为支配关系
  • D.两个方案互不支配← 正确答案

答案:D。支配要求一方在每个目标上都不差且至少一个严格更优。A 的 f1=0.5 优于 B 的 0.6,但 A 的 f2=0.8 劣于 B 的 0.7,二者互有胜负,所以互不支配,两个方案都值得保留。

Q3. 用加权求和法把 m 个目标化为单目标时,权重通常需要满足什么条件?

单选题 · easy

  • A.权重全为正且和为 1← 正确答案
  • B.权重可以任意取值
  • C.所有权重必须完全相等
  • D.权重与目标方差成反比

答案:A。加权求和要求权重非负且归一化和为 1,表示在目标之间分配重视程度,权重为 0 表示不关心该目标。B 会导致结果无意义,C 抹杀了偏好,D 与权重定义无关。

Q4. 加权求和法输出单个解,它最主要的局限是什么?

单选题 · mid

  • A.计算复杂度远高于进化算法
  • B.在凹帕累托前沿上会漏掉方案← 正确答案
  • C.无法处理连续目标函数
  • D.只能用于两个目标的问题

答案:B。加权求和本质是用一组平行等权线去“切”可行域,当帕累托前沿呈凹形时,中间区域的方案永远切不到,无论怎么调权重都会漏解。它计算简单而非复杂,也支持连续函数和多目标,故 A、C、D 都不对。

Q5. ε-约束法处理多目标问题的基本思路是什么?

单选题 · mid

  • A.把所有目标加权相加为一个分数
  • B.只优化一个目标其余设上限← 正确答案
  • C.每代随机换一个目标进行优化
  • D.把所有目标设成完全相等

答案:B。ε-约束法只对某一个目标做优化,把其余目标分别加上阈值 ε 变成约束,适合“有一个主目标、其他只是底线”的场景,比如“最省钱的方案且工期不超过 3 个月”。

Q6. 关于 NSGA-II 的机制,下列说法正确的有哪些?

多选题 · mid

  • A.非支配排序将种群按支配层级分层← 正确答案
  • B.拥挤度距离用于维持解的多样性← 正确答案
  • C.精英保留防止优秀解在进化中丢失← 正确答案
  • D.它只能优化两个目标函数

答案:ABC。非支配排序分层、拥挤度距离保多样性、精英保留防丢失是 NSGA-II 的三大核心机制。D 错误:NSGA-II 可处理任意多个目标,并非只限两个。

Q7. 当多目标优化的目标数量过多(如 20 个)时,可能发生哪些问题?

多选题 · hard

  • A.帕累托前沿解的数量会爆炸← 正确答案
  • B.几乎所有解都不被支配← 正确答案
  • C.最终决策反而变得更加简单
  • D.算法难选出有指导意义的解← 正确答案

答案:ABD。目标维度升高时,高维空间中几乎每个解都互不支配,前沿规模爆炸,算法和决策者都失去判断力,这正是“维度灾难”。C 错误:解变多、权衡变复杂,决策不是更简单而是更难。

Q8. 关于帕累托前沿上任意两个解之间的关系,下列说法正确的是?

单选题 · hard

  • A.一个解必然支配另一个解
  • B.互不支配且各有优劣← 正确答案
  • C.两个解的目标值完全相同
  • D.都在可行域的几何中心位置

答案:B。前沿上的解互不支配,各有长短板——一个更准、另一个更快,这正是它们共同留在前沿的原因。A 与前沿定义矛盾,C 把“同一前沿”误认为“同一个点”,D 与前沿“边界”属性冲突。

Q9. 用理想点法从帕累托前沿中挑选最终方案时,选取依据是什么?

单选题 · hard

  • A.距理想点归一化距离最近← 正确答案
  • B.距最差点最远的极端解
  • C.各目标数值之和最小的解
  • D.第一个目标取值最小的解

答案:A。理想点法先把各目标用理想点和最差点归一化到同一尺度,再比较候选点到理想点的欧氏距离,距离最小者代表“最均衡”、没有明显短板。B 只看最差基准,C 忽略了权重与归一化,D 只盯单个目标。

Q10. 多目标优化在超参数调优中的典型目标组合包括哪些?

多选题 · mid

  • A.最小化验证集上的误差← 正确答案
  • B.最小化模型的推理延迟← 正确答案
  • C.最小化模型的参数量← 正确答案
  • D.最大化随机种子的取值

答案:ABC。超参调优常同时最小化验证误差、推理延迟和参数量,三者天然冲突,构成典型的多目标问题。D 中随机种子是固定实验的变量,不是需要优化的业务目标。