关于优化:Matlab 问题:linprog

Matlab issue: linprog

晚上好,

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

Exiting due to infeasibility: an all-zero row in the constraint
matrix does not have a zero in corresponding right-hand-side entry.

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

我检查了我的矩阵:

1
2
3
4
5
6
7
8
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

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


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

您可以尝试使用另一种算法(使用 optimset('LargeScale', 'off') 和/或 optimset('LargeScale', 'off', 'Simplex', 'on'))运行 linprog 并查看在这种情况下的输出。

然而,我怀疑在所有情况下你都会得到一个"不可行的问题"退出标志,因为你的等式约束似乎不可能满足。

有关 Matlab 可用线性规划算法及其预处理步骤的更多信息。