3

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

我只能找到没有最小/最大参数的简单线性函数的最小化示例。你能给我一个提示如何让我的结构作为函数的参数linprog吗?

4

2 回答 2

1

我不相信您可以提出问题,因为您将其表述为 linprog 问题。“MIN”操作是问题所在。由于目标函数不能表述为

y = f'x.

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

也许通过一些技巧,您可以将其线性化。但如果是这样,那就是一个数学问题。见:https ://math.stackexchange.com/

于 2012-11-21T12:49:19.923 回答
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 )

最多一些转置的论点应该可以解决问题。

于 2012-11-21T13:01:50.213 回答