用途
该技能用于指导在 Python 中求解多目标优化问题。与只寻找单一最优解的单目标优化不同,多目标优化需要同时优化多个相互冲突的目标,最终得到一组 Pareto 前沿(Pareto front)——即无法在不恶化某一目标的前提下改进另一目标的权衡解集合。其核心价值在于发现竞争目标之间的最优权衡(如成本与性能、风险与收益、速度与精度),并支持决策者在 Pareto 前沿上做出知情选择。
适用场景包括:投资组合优化(最大化收益、最小化风险)、工程设计(最小化成本、最大化性能、最小化重量)、制造(最大化吞吐量、最小化缺陷、最小化能耗)、药物设计(最大化疗效、最小化毒性、最大化生物利用度)、车辆路径(最小化距离、时间与车辆数)。当只有一个目标、目标可合并为已知权重的单一指标、或某一目标远比其他目标重要时,则不应使用多目标优化。
主要能力
技能覆盖以下核心概念与方法:
- Pareto 支配:若解 x 在所有目标上不劣于 y,且至少在一个目标上严格优于 y,则 x 支配 y。
- Pareto 前沿:所有非支配解的集合。前沿上所有点从数学角度同等“最优”,选择需依赖偏好信息。
- 理想点与最低点:理想点是各目标的最佳可能值(通常不可行),最低点是 Pareto 最优解中各目标的最差值。
方法分为两大类:
标量化方法(将多目标问题转化为一系列单目标问题):
- 加权和:简单快速,但无法找到非凸 Pareto 前沿,且对尺度敏感。
- 加权度量(Lp 范数):可找到非凸前沿(p=∞),但需要估计理想点。
- ε-约束法:可找到包括非凸区域在内的完整 Pareto 前沿,但需要大量单目标求解并设定约束边界。
- 目标规划:目标已知时直观,但需要设定目标值。
进化算法(基于种群的元启发式方法,演化出 Pareto 前沿近似):
- NSGA-II:最流行的多目标进化算法,采用快速非支配排序与拥挤距离,稳健且经过充分测试,适合 2-3 个目标,目标数超过 3 时性能下降。
- NSGA-III:NSGA-II 的扩展,基于参考点选择,可扩展到多目标(4 个以上),但参数调优更复杂。
- MOEA/D:将问题分解为标量子问题,效率高,适合多目标,但需要仔细设置分解。
- 其他:SPEA2、PAES、GDE3、SMS-EMOA 等。
使用方式
技能提供了库选择建议与实现模式:
库选择:
- pymoo(推荐):现代、全面的多目标优化库,内置进化算法与性能指标,API 面向对象,安装命令
pip install pymoo。 - platypus:纯 Python 实现,API 简单,依赖轻量,安装命令
pip install platypus-opt。 - DEAP:通用进化计算框架,灵活性强、社区大,但 API 较复杂、多目标专用性较弱,安装命令
pip install deap。 - scipy.optimize:仅需标量化方法、希望最小依赖时使用,但没有内置进化算法,需手动构建 Pareto 前沿。
实现模式(均给出完整代码):
- 使用 pymoo 的 NSGA-II:定义 Problem 子类,实现
_evaluate方法,配置种群大小与终止代数,调用minimize,并用 Scatter 可视化 Pareto 前沿。 - 使用 pymoo 的 NSGA-III 处理多目标:通过
get_reference_directions生成参考方向,种群大小需与参考方向匹配。 - 带约束的问题:在
_evaluate中通过out["G"]返回不等式约束,NSGA-II 自动处理约束,可检查最大约束违反量。 - 加权和标量化:使用 scipy.optimize 的 SLSQP,遍历权重生成 Pareto 前沿。
- ε-约束法:最小化一个目标,将另一个目标约束为 ≤ ε,遍历 ε 值追踪 Pareto 前沿。
- 使用 platypus:定义 Problem 与变量类型,设置评估函数,运行 NSGAII。
- 使用 DEAP:创建 FitnessMin 与 Individual,注册评估、交叉、变异、选择算子,运行 eaMuPlusLambda,提取 Pareto 前沿。
Pareto 分析:
- 非支配排序:提供
find_pareto_front函数,从目标值数组中找出非支配解的索引。 - 超体积指标(Hypervolume):使用 pymoo 的 HV 指标衡量 Pareto 前沿近似质量,需指定参考点,可比较两个前沿的优劣。
- 世代距离(GD):衡量与真实 Pareto 前沿的收敛程度,需要已知真实前沿。
适用场景
该技能适合需要在多个冲突目标间进行权衡分析的工程与科研场景,尤其是决策者需要从一组 Pareto 最优备选方案中进行选择的场合。
限制
资料中未提供关于收费、价格、平台支持范围或具体性能效果的信息。部分代码示例(如世代距离部分)在资料中未完整给出。