You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中为多目标优化结果绘制Pareto Front Line?

实现帕累托前沿(Pareto Front)绘制方案

核心思路

先从数据中筛选出帕累托最优的点,再在原有散点图基础上叠加前沿折线。以下是针对最小化fun1和fun2目标的实现逻辑(最大化目标只需调整判断条件):

完整代码

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 读取Excel数据
df = pd.read_excel('file path')

# 提取帕累托前沿点(最小化双目标场景)
# 先按fun1升序排序
df_sorted = df.sort_values(by='fun1', ascending=True)
pareto_front = []
min_fun2 = float('inf')

# 遍历筛选:仅保留fun2比之前所有点更小的记录
for _, row in df_sorted.iterrows():
    if row['fun2'] < min_fun2:
        pareto_front.append(row)
        min_fun2 = row['fun2']

df_pareto = pd.DataFrame(pareto_front)

# 绘制原始散点图
sns.scatterplot(x='fun1', y='fun2', data=df, hue='alpha', legend=False)
# 叠加帕累托前沿折线
plt.plot(df_pareto['fun1'], df_pareto['fun2'], color='red', linewidth=2, label='Pareto Front')

# 配置图表样式
plt.xlabel('fun1', fontsize=16)
plt.ylabel('fun2', fontsize=16)
plt.legend(fontsize=12)
plt.show()

适配最大化目标的修改

如果你的需求是最大化fun1和fun2,只需调整以下两处:

  1. 排序改为降序:df_sorted = df.sort_values(by='fun1', ascending=False)
  2. 初始化和判断条件改为:max_fun2 = -float('inf')、if row['fun2'] > max_fun2:

内容的提问来源于stack exchange,提问作者Yousef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:35:18