Ошибка значения: недопустимый ввод для linprog

#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.])