Линейная оптимизация дает ошибку, но возвращает верное решение - PullRequest
0 голосов
/ 11 июля 2019

У меня есть следующий фрейм данных:

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, поэтому я определил справочную vecotr x_1, целевой вектор x_0 заменит столбец Kosten A.

Таким образом, единственным условием является то, что для каждого действует:

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 правильный, но почему я получаю неудачный массаж?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...