#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