(MatLab) Проблема не ограничена при выполнении линейного программирования в matlab

#matlab #linear-programming

#matlab #линейное программирование

Вопрос:

 x   y ≤ 44,
2x   y ≤ 64,
9,000x   5,000y ≤ 300,000
 

целевая функция: 30,000x 20,000y

Я хотел бы найти оптимальное решение в Matlab

Но есть сообщение об ошибке Problem is unbounded.

Вот мой код

 A = [1 1;2 1;9 5];

b = [44 64 300];

f = [3 2];

x = linprog(f,A,b)
 

предположим, что: x=20,y=24
Ссылка
https://www.mathworks.com/help/optim/ug/linprog.html

Комментарии:

1. Потому что linprog минимизирует, а вы хотите максимизировать. Вы должны отрицать f.

Ответ №1:

Это не прямой ответ на ваш вопрос, но одна из причин, по которой у вас возникают трудности, заключается в том, что вы используете Matlab. Другие языки предложили бы более выразительные и понятные способы выражения вашей проблемы.

Например, Python в сочетании с cvxpy дает нам:

 #!/usr/bin/env python3

import cvxpy as cp

x = cp.Variable()
y = cp.Variable()

constraints = [
  x   y <= 44,
  2 * x   y <= 64
]

objective = cp.Maximize(9000*x   5000*y)

prob = cp.Problem(objective, constraints)
N
optimum_value = prob.solve()

print("optimum value", optimum_value)
print("x", x.value)
print("y", y.value)
 

Код очень удобочитаем, и модель легко расширяется даже до нелинейных режимов, таких как квадратичные программы и конусы второго порядка.

Это возвращает

 optimum value 300000.00000076543
x 20.00000000075882
y 23.999999998787203