帕累托最优化

时间:2019-03-08 15:54:45

标签: python pandas optimization

我有一个这样的数据集:

import pandas as pd
Data = {'N':[106, 193, 87, 206, 32, 275, 14, 154, 55, 53],
        'M':[25, 250, 100, 82, 17, 162, 8, 148, 6, 100],
        'P':[131, 443, 187, 288, 48, 437, 22, 301, 61, 153],
        'C':[0.20, 0.07, 0.03, 0.78, 0.80, 0.55, 0.83, 0.10, 0.15, 0.05],
        'E':[-2.02, -1.59, -4.26, -0.32, -0.55, -0.77, -0.13, -1.34, -1.99, -2.89]
        }
df = pd.DataFrame (Data, columns = ['N','M','P','C','E'])

最初,我想计算一个值X的向量,它将使方程最大化:

df["R"] = (df["P"] * df["C"] * df["X"] ) + (df["M"] * df["C"] * df["E"] * df["X"] ) + (df["P"] * df["C"] * df["E"] * df["X"]* df["X"] )

我在excel中通过微分发现了一个X值向量,该向量使上述等式最大化:

X = pd.DataFrame({'X': [0.15, 0.03, -0.15, 1.44, 0.74, 0.46, 3.70, 0.13, 0.21, -0.15]})
df = df.join(X)

然而,尽管这使每一行的R值最大化,但我需要考虑的另一个方程式是C_N的平均值,根据方程式:

df["C_N"] =  df["C"] + (df["C"] * df["E"] * df["X"])  
df.loc['Average Metrics'] = df.mean() 
df.loc['Sum Metrics'] = df[:-1].sum() 

使用这组X值,行中C_N的平均值为0.217774,R的总和为231.707。

我正在寻找:

  1. 针对0至1(即帕累托最优阵线)之间的每个平均C_N值,绘制R总和的最大值是什么。

  2. 对于该前沿的每个点(即边界上的非支配点),我希望能够找到所使用的X值的向量。

对此将提供任何帮助。

0 个答案:

没有答案