【发布时间】:2014-08-12 00:03:03
【问题描述】:
我正在尝试优化我知道结果的函数,但 matlab 给了我奇怪的结果。这是我正在尝试做的事情:
max: f(x)= -1815·x1 - 379·x2
subject to:
-1475·x1 - 112013·x2 >= -700000
(x1,x2) <= 80
(x1,x2) >= 0
这是我的实际代码:
f = [1815;379]
A = [-1475 -11203]
b = [-700000]
ub = (ones(1,2)*80)'
lb = zeros(2,1)
x = linprog(f,A,b,[],[],lb,ub)
你会怎么做?
【问题讨论】:
-
至少包括实现的结果,以及预期的结果。无论如何,当您编辑帖子时,请确保将代码放入代码块中(检查编辑器中的按钮)。 -- 我要检查的第一件事是你是否需要在任何地方翻转标志。
-
x1=0, x2=62.48 是结果
-
Excel 给了我 x1=40 和 x2=80
-
正如您所写,解决方案很简单 (0, 0),因为您将 (x1,x2) 限制为正数,并尝试使用负系数最大化线性函数。点 (0, 0) 满足您的约束,因此它是解决方案。你确定你所有的系数都有正确的符号,你所有的不等式都是正确的吗?
-
在您的代码中,
A和b有错误的符号。它们对约束A * x <= b进行编码,但由于您实际上有一个“大于”约束,因此您需要翻转符号以使其成为“小于”约束。
标签: matlab optimization