Минимизация 6-мерной задачи с 3 ограничениями в python - PullRequest
0 голосов
/ 02 февраля 2020

Нам дана проблема, которая требовала минимизации стоимости еды для студента. Она должна иметь калории (2000 ккал), белок (55 г) и кальций (800 мг). и есть шесть видов пищи в общей сложности. Мы должны решить эту проблему с помощью пакета Python CVXPY. Вот мой код, но он возвращает ошибку ValueError: Cannot broadcast dimensions (3,) (3, 1). Вот код моей матрицы.

A=np.array([[110,205,160,160,420,260],[4,32,13,8,4,14],[2,12,54,285,22,80]) 
//Note:A is the matrix with the contents of all the foods//
b=np.array([[2000,55,800]])
//Note: b represents the desired value for calories, protein and calcium.//
c=np.array([[3,24,13,9,20,19]])
//Note c represents the price of the 6 types of food. //

Был добавлен дополнительный критерий, когда требовалась максимальная порция каждого вида пищи. и мой код для этого выглядел так:

d= np.array([[4,3,2,8,2,2]])
x_vec = cp.Variable(6)
//where d represented the max serving constraints on each of the six types of foods.//

Наконец, я должен написать код для минимизации и решения проблем, которые по какой-то причине просто не работают

matrix_prob = cp.Problem(cp.Minimize(cp.sum(c.T @ x_vec)),
                        constraints=[A@x_vec <= b, x_vec <= d])
//Note:here I minize the sum of matrix c while considering the constraints of b and d.//
matrix_solution = matrix_prob.solve()
print('Optimal value (matrix form):    {:.4f}'.format(matrix_solution))

1 Ответ

0 голосов
/ 19 февраля 2020

Ошибка:

ValueError: Cannot broadcast dimensions  (3,) (3, 1)

говорит сама за себя: вы пытаетесь выполнить операцию, включающую одномерный и двумерный объект. Поскольку 2d-объект имеет длину 1 во втором измерении, это говорит о том, что удаление этого измерения решит вашу проблему.

Поэтому попробуйте создать одномерные массивы b, c и d, Например:

d = np.array([4,3,2,8,2,2])

Также: Python использует # для комментариев. Я не уверен, почему вы использовали //, но не надо.

...