Уравнения форматирования для linprog в MATLAB

Мне нужно решить простую задачу, используя функцию linprog в наборе математических инструментов Matlab. Проблема в том, что я не знаю, как форматировать свои уравнения, поэтому эта функция решает проблему.

Это функция, которую я пытаюсь минимизировать (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?


person Smajl    schedule 21.11.2012    source источник


Ответы (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]

теперь попробуй

linprog(f, A, b, Aeq, beq, lb)

до некоторой перестановки аргументов должно помочь.

person Shai    schedule 21.11.2012

Я не верю, что вы можете задать вопрос, поскольку вы сформулировали его как проблему linprog. Операция "MIN" является проблемой. Поскольку целевая функция не может быть сформулирована как

y = f'x.

Даже если ваши ограничения линейны, ваша целевая функция — нет.

Может быть, с некоторыми хитростями вы можете линеаризовать его. Но если так, то это математическая задача. См.: https://math.stackexchange.com/.

person Pete    schedule 21.11.2012
comment
Мой ответ здесь неверен, см. расширенный. Это можно перефразировать как часть вопроса о методе преобразования нелинейной цели в линейную целевую функцию. - person Pete; 01.10.2013