我试图优化我知道结果的函数,但是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)
你会怎么做?
答案 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)
是解决方案: