Форматирование уравнений для 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/

Другие вопросы по тегам