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 可用线性规划算法及其预处理步骤的更多信息。
- 非常感谢你。出于某种原因,单纯形方法似乎要稳定得多……我的等式可以满足。发生了一些奇怪的事情:我试图找到一个水坝网络可以产生的最大能量,知道 80 年来每月的排放量。在洪水时期,你不能用所有的水来发电,所以你打开门,在我的模型中没有任何限制。所以我有一个无界的决策变量,我需要在平等约束(水力平衡)中。如果变量限制在 0 和 inf 之间,则不起作用,但是 0 和 100^1000 就可以了……神秘。