Matlab问题:linprog

时间:2012-12-21 23:47:32

标签: matlab optimization constraints zero

晚上好,

我遇到了Matlab的linprog函数的问题,这是我得到的消息:

  

由于不可行而退出:约束中的全零行   矩阵在相应的右侧条目中没有零。

根据帮助,这意味着我在Aeq中至少有一行充满零(比方说,行i),但是beq(i)不等于零。

我检查了我的矩阵:

checkmat=full(sum(abs(Aeq')))';
checkmat=horzcat(checkmat,beq);

for i=1:length(checkmat)
   if (checkmat(i,1)==0 && checkmat(i,2)~=0) || (checkmat(i,2)==0 && checkmat(i,1)~=0)
      i
   end
end

但似乎没问题。有人知道它可能来自哪里吗? 如果遗漏任何信息,我很乐意尝试收集它们。

1 个答案:

答案 0 :(得分:1)

linprog使用的默认内点方法在实际迭代开始之前执行一些预处理步骤。因此,虽然Aeq可能不包含beq的相应元素非零的全零行,但这可能在预处理之后发生。

您可以尝试使用其他算法运行linprog(使用optimset('LargeScale', 'off')和/或optimset('LargeScale', 'off', 'Simplex', 'on')),看看在这种情况下输出是什么。

但是,我怀疑在所有情况下你都会得到一个“不可行的问题”退出标志,因为你的等式约束似乎无法满足。

More info关于Matlab可用的线性编程算法及其预处理步骤。