关于Matlab" intlinprog"功能

时间:2017-05-23 14:15:04

标签: matlab

我想解决一个给我一个函数最小值的数学问题。该函数是min y = x1 + x2 + x3 +...+ x14。不变量是:

2x_1 + x_2 + x_3 + x_4 + x_5 ≥ 28 
x_4+ x_5 + 2x_6 + x_7 + x_8 + x_9 ≥ 79
x_3 + x_5 + 2x_7 + x_8 + 4x_10 + 3x_11 + 2x_12 + x_13 ≥ 46
x_1 + 3x_2 + 2x_3 + x_4 + x_6 + 2x_8 + 3x_9 + x_11 + 2x_12 + 4x_13 + 5x_14 ≥ 33

所以我写了这样的Matlab代码:

fun = [1;1;1;1;1;1;1;1;1;1;1;1;1;1];
intcon = 14;
a = [-2 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0; 0 0 0 -1 -1 -2 -1 -1 -1 0 0 0 0 0;...
    0 0 -1 0 -1 0 -2 -1 0 -4 -3 -2 -1 0; -1 -3 -2 -1 0 -1 0 -2 -3 0 -1 -2 -4 -5];
b = [-28;-79;-46;-33];
[x,fval] = intlinprog(fun,intcon,a,b)

但是当我运行此代码时,它会出现以下错误:

  

Intlinprog已停止,因为根LP问题无限制。

     

x =

 []
     

fval =

 []

但我找到了x5 = 28,x6 = 23,x8 = 5,x10 = 4min y = 60

的解决方案

导致错误的原因是什么?如果我想得到正确答案(xi必须是整数),我应该改变什么?

1 个答案:

答案 0 :(得分:1)

如果最小化者抱怨问题是无限制的,那么试图找出问题的好处是目标函数能够无限期地改进的方向。在您的情况下,目标函数是所有变量的总和,并且关于无界最小化问题的警告因此意味着您的一个或多个变量正朝着负无穷大递减,同时仍然是根据约束的有效点。

当试图找出问题表达的错误时,这种小思想实验可能会有所帮助。我猜你想要包含变量的最小边界"?" + Math.floor((Math.random() * 10000))?通过为0 <= x_i指定lbub输入参数,包括变量的下限和上限。