线性优化出错,但给出正确的解b

2024-10-03 15:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

Erlös   Kosten A    Kosten B
100     30  10
200     30  15
300     30  20
50      30  10
75      30  15
100     30  10
90      30  20

我想在目标列上运行一个线性优化:Kosten A,并借助from scipy.optimize import linprog 根据我的理解,linprog需要一个二维矩阵a,所以我定义了一个helpvecotr x_1,目标向量x_0将替换列Kosten A

所以唯一的条件是everyrow有效:

df['Erlös']-df['Kosten A/x_0']-df['Kosten B'] >=0

x_0>=0 因此,我构建了以下优化:

def linear_optimization(data):
    #define c for x values: min -c *x
    c = [-len(df), 0]
    #define condition for x values Ax <= b
    b1 = df[['Erlös']].to_numpy()
    b2 = df[['Kosten B']].to_numpy()
    b = (b2-b1).T.tolist()[0]
    #define matrix A for condition
    A1 = np.array([-1]*len(df)).tolist()
    A2 = np.array([0]*len(df)).tolist()
    A = np.stack((A1, A2), axis=-1).tolist()
    #define condtions for x >=0
    x0_bounds = (0, None)
    x1_bounds = (0,0)
    #run linear optimization
    return linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds, x1_bounds]), b, A, c

结果是:

fun: -1960.0
 message: 'Optimization failed. The problem appears to be unbounded.'
     nit: 8
   slack: array([190.,  95.,   0., 240., 220., 190., 210.,   0.])
  status: 3
 success: False
       x: array([280.,   0.])

向量x是正确的,但是为什么我接受失败的按摩


Tags: to目标dfforlennparray向量