#python #numpy
#python #numpy
Вопрос:
Это код, который я выполняю:
import numpy as np
z = np.array([170, 160, 175, 180, 195])
a = np.array([[1, 0, 0, 0, 0], [1, 1, 0, 0, 0], [1, 1, 0, 0, 0], [1, 1, 1, 0, 0], [0, 1, 1, 0, 0], [0, 0, 1, 1, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]])
b = np.array([48, 79, 65, 87, 64, 73, 82, 43, 52, 15])
x1_bound = x2_bound = x3_bound = x4_bound = x5_bound =(0, None)
from scipy import optimize
res = optimize.linprog(z, A_ub=-a, b_ub=-b,bounds=(x1_bound, x2_bound, x3_bound, x4_bound, x5_bound))
print(res)
Вот что я получаю.
>ValueError: Invalid input for linprog: b_ub must be a 1-D array; b_ub must not have more than one non-singleton dimension and the number of rows in A_ub must equal the number of values in b_ub
Как я могу это исправить?
Ответ №1:
Вам нужно добавить еще одну строку в a
массив или удалить одно значение из b
массива
a = np.array([[1, 0, 0, 0, 0], [1, 1, 0, 0, 0], [1, 1, 0, 0, 0], [1, 1, 1, 0, 0], [0, 1, 1, 0, 0], [0, 0, 1, 1, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]])
b = np.array([48, 79, 65, 87, 64, 73, 82, 43, 52])
Вывод:
con: array([], dtype=float64)
fun: 37824.99999983183
message: 'Optimization terminated successfully.'
nit: 6
slack: array([ 1.29979583e-10, -4.48082460e-10, 1.40000000e 01, 3.10000000e 01,
6.00000000e 00, 9.00000000e 00, -5.65137270e-10, 6.44249099e-11,
4.09272616e-12])
status: 0
success: True
x: array([48., 31., 39., 43., 52.])