在MATLAB中格式化linprog的方程

时间:2012-11-21 08:33:38

标签: matlab linear-programming

我必须使用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 个答案:

答案 0 :(得分:1)

我不相信你可以提出这个问题,因为你把它称为linprog问题。 “MIN”操作是问题所在。由于目标函数不能被表述为

y = f'x.

即使你的约束是线性的,你的目标函数也不是。

也许有些诡计你可以线性化它。但如果是这样,那就是数学问题。请参阅:https://math.stackexchange.com/

答案 1 :(得分:1)

让我们尝试以下方法 您的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)

一些参数的转置应该可以解决问题。