优化给出意想不到的结果MATLAB

时间:2014-08-11 15:27:03

标签: matlab optimization

我试图优化我知道结果的函数,但是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)

你会怎么做?

2 个答案:

答案 0 :(得分:2)

这个问题很容易解决。

正如评论中所提到的,你当前会期望0.但是,如果你实际上将约束从大于,小于,那么最佳解决方案实际上接近matlab给你的。

基本上是700000/112013 = 6.248 ......

关闭10倍,但我认为你在某处犯了错字。


如果您对此功能的工作方式感兴趣,请先尝试一个简单的案例(您可以轻松手动验证),然后增加复杂性。无论哪种方式,您的Excel解决方案都不会出现在问题描述中。

答案 1 :(得分:2)

你的线性约束符号w.r.t.它是如何被linprog所期望的。

与许多线性问题一样,制作情节实际上最简单:

[x1,x2] = meshgrid(0:80);
f = -1815*x1 - 379*x2;
f(-1475*x1 - 112013*x2 < -7e5) = NaN;
surf(x1,x2,f, 'edgecolor', 'none')
xlabel('x1'), ylabel('x2')

这显然表明(0,0)是解决方案:

enter image description here