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