Форматирование уравнений для linprog в MATLAB
Я должен решить простую проблему с помощью функции linprog
в математическом наборе инструментов. Проблема в том, что я не знаю, как форматировать мои уравнения, поэтому эта функция решает проблему.
Эту функцию я пытаюсь минимизировать (a_i
некоторые заданные коэффициенты, x
находится в R^5):
x = argmax min{a1*x1 + a2*x2, a2*x2 + a3*x3 + a4*x4, a4*x4 + a5*x5}
при условии:
sum(x_i) = 3000
all x_i >= 0
Это можно перефразировать как:
(x, lambda) = argmin(-lambda)
при условии:
a1*x1 + a2*x2 >= lambda
a2*x2 + a3*x3 + a4*x4 >= lambda
a4*x4 + a5*x5 >= lambda
sum(x_i) = 3000
all x_i >= 0
Я мог только найти примеры минимизации простых линейных функций без аргументов min/max. Не могли бы вы дать мне подсказку, как сделать мои структуры в качестве аргументов для linprog
функционировать?
2 ответа
Давайте попробуем следующие ваши x
вектор сейчас
[x1 x2 x3 x4 x5 lambda]
объективный вектор
f = [0 0 0 0 0 -1]
ограничение равенства:
Aeq = [1 1 1 1 1 0] beq = 3000
Ограничение неравенства:
A = [-a1 -a2 0 0 0 1; 0 -a2 -a3 -a4 0 1; 0 0 0 -a4 -a5 1] b = [0;0;0]
нижняя граница:
lb = [0 0 0 0 0 -inf]
сейчас попробуй
Линпрог (F, A, B, Aeq, Beq, фунт)
до некоторой транспонирования аргументов должно быть сделано.
Я не верю, что вы можете задать вопрос, сформулировав его как проблему linprog. Операция "MIN" является проблемой. Поскольку целевая функция не может быть выражена как
y = f'x.
Даже если ваши ограничения линейны, ваша целевая функция - нет.
Может быть, с помощью некоторого обмана вы можете линеаризовать его. Но если это так, это математическая проблема. Смотрите: https://math.stackexchange.com/