如何在matlab中定义线性程序?

时间:2018-03-12 01:36:35

标签: matlab linear-programming linear

我在MATLAB中定义优化问题时遇到了问题。

我试图表达7个二元决策变量。但前3个二进制decsion变量的总和不能大于1,最后4个二元决策变量的总和不能大于1.

A = [1,1,1,0,0,0,0;...
    0,0,0,1,1,1,1];
b = [1;1];

% objective function 
f = [0.1, 0.5, 0.2, 0.2, -2.0, 0.2, 0.6];

lb = zeros(7,1);
ub = ones(7,1); % Enforce all of the decision variables to be binary
intcon = [];  % all of my variables are binary, so I assume this should be blank.

x = intlinprog(f,intcon,A,b,lb,ub);

我希望将所有决策变量强制为二进制,因此我将这些行包括在内:

lb = zeros(7,1);
ub = ones(7,1); % Enforce all of the decision variables to be binary 
intcon = [];  % all of my variables are binary, so I assume this should be blank.

另外,我没有相等的约束,所以我在上面的问题中没有包含Aeqbeq。但是当我尝试运行没有像x = intlinprog(f,intcon,A,b,lb,ub);这样的参数的解算器时,它会告诉我

Error using intlinprog (line 123)
The number of columns in Aeq must be the same as the number of elements of f.

但如果我没有任何相等的约束,我该如何定义呢?

以下是文档:the answer 页面顶部的示例显示,它可以在不使用x = intlinprog(f,intcon,A,b)Aeq的情况下调用beq,因此我知道这是可能的。

感谢。

1 个答案:

答案 0 :(得分:1)

如果指定下限和上限约束,则不能省略AeqBeq,因为此函数使用位置参数。

但是,您可以传递空矩阵,从而导致零相等约束:

x = intlinprog(f,intcon,A,b,[],[],lb,ub);