linprog未能奏效。为什么?我做错了什么吗?

12 Ansichten(30天)的
约翰D 'Errico
约翰D 'Errico 我2022年11月10
Bearbeitet: 约翰D 'Errico 我2023年1月27日
我现在看到线性规划问题出现在最近的答案,一些常见的失效模式linprog,人们似乎不懂。
一个基本失效模式是一个不可行的问题。这是什么意思,可以解决吗?
最常见的失效模式似乎是一个无限的问题。这是什么意思?它怎么能避免/解决/固定吗?有一些方向可以移动的目标显然没有界限向+ / - inf生长?
最后,我还看到问题,有人希望工具生成所有可能的解决方案。金宝搏官方网站
一个真正好的阐述线性规划可能会导致一个完整的课程,和Aswers有限多少我可以写(加上我只有有限的能量继续写作。)我会尽量回答每一次问题作为单独的答案,但如果别人想提供他们自己的需要,随意这样做作为一个回答,因为这对我来说已经许多年了自从我学会了线性规划。

Antworten (3)

约翰D 'Errico
约翰D 'Errico 我2022年11月10
Bearbeitet:约翰D 'Errico 我2023年1月27日
可行性,不可能实行
如果linprog告诉你问题是不可行的,这意味着它无法找到一个解决方案,满足所有约束和边界,平等等。
我会漂亮这个词忽略等式约束的情况下,因为我们总是可以使用它们来项目一个具有等式约束的问题到一个低维子空间,但是现在没有等式约束。(投影到一个低维子空间通常会绑定约束转化为不等式约束。在这种情况下,但这并不重要)。
但这是什么意思不可行吗?不可行告诉你你的问题代表了某种形式的矛盾。例如,假设我问linprog来解决这个问题
减少x
受约束x > = 2和x < = 1
任何解决方案都存在吗?当然不是,因为是空的可行的解决方案。金宝搏官方网站
f = 1;
一个= (1,1);
b = (2, 1);
linprog (f, A, b)
没有找到可行的解决方案。Linprog停止,因为没有点满足约束。ans = []
不可能实行真的没有比这更复杂。代表了一个矛盾的东西在你的约束。是的,在更高的维度,这可能是更复杂的可视化,但从本质上说,你已经选择的约束导致问题没有解决方案,满足他们所有人。
不可行性可能意味着您指定错误的问题。我猜想是这样的失败最常见的原因。所以回去,推导并检查问题。保证你做了正确的数学,第一个指定的数学问题,然后将一组约束,边界和客观。
如果你做了很明显正确的数学,和所有的矩阵约束正确指定,等等,然后一个不可行的问题意味着有问题的约束。他们太紧缩在某种意义上。那么解决方案是简单的概念(虽然不总是简单的解决。)在某种程度上,你需要放松一个更多的约束,充分可行集非空。在一个整数线性规划问题的情况下,可行集必须包含至少一个整数的解决方案,这可能会更放松。

约翰D 'Errico
约翰D 'Errico 我2022年11月10
所有的解金宝搏官方网站决方案:
一般来说,当一个人想看到所有可能解决线性规划问题或整数线性规划问题,他们可能问错了问题,想用linpr金宝搏官方网站og做一些工作并不是设计来做。linprog / intlinprog是为了解决一个问题,产生一个解决方案。他们真的不在乎第二个解决方案存在,也同样好。
如果LP有一个可行的解决方案,那么由于客观是线性的,解决方案总是可以改善直到解决这个问题的方法在多面体的顶点包含所有可行的解决方案,或更很少,直到躺在边界的解决方案。金宝搏官方网站在后一种情况下,他们将无穷多的解决方案,因为任何点位于两个(最大顶点之间也会同样有效作为解决方案。金宝搏官方网站这是一个线性的结果客观凸有限域。(当然情况变得更加严重的整数解要求时,但我把它稍后讨论。)金宝搏官方网站
例如,假设我提出一个简单的线性规划问题,在约束哈佩躺平行于目标。
> > X = optimvar (“X”、2、1,下界的,0);
> >概率= optimproblem (“描述”,“无穷多解”金宝搏官方网站);
> >问题。目标= X (1) + (2);
> > prob.Constraints。MyConstraint1 = X (1) + (2) > = 1;
索尔=解决(问题)
解决使用linprog问题。
最优找到解决方案。
索尔=
结构体字段:
X: [2×1双)
> > sol.X
ans =
0
1
所以我们发现linprog返回一个解决方案,在[0,1]。这是一个多面体的顶点。(在本例中,我很懒,多胞形实际上是无限的,但仍然解决退出,因为我最小化目标。)然而,我们也应该知道顶点[1 0]也是一个解决方案。然而,linprog不在乎一点。它甚至不抱怨,也不通知我们,其他解决方案存在,或者,换句话说,无限的其他解决方案同样有效。金宝搏官方网站所以(1/2,1/2)也是一个同样有效的解决方案。
当然,linprog / intlinprog不能返回无穷多的解决方案,设计和你的电脑没有内存来存储无限多的解决方案。金宝搏官方网站所以,那些想要看到所有可能的解决方案正试图使用错误的工具来解决这个问题。金宝搏官方网站
一个想法可以识别的凸多面体的顶点集解决这个问题。可以找到一些有用的工具为这个文件交换:
艾尔的顶点的凸polyheddron代表你的约束,计算目标函数在每个顶点,并选择他们所有人,有相同的最优值,以防有多个。所有解决线性规划问题的集合,优金宝搏官方网站化它将躺在行或多胞形连接顶点识别。如果两个点都具有相同的最低客观价值,然后任意点在线段连接这些点也会解决这个问题。如果有三个这样的顶点,那么所有分三角形以这些点为界将解决方案。金宝搏官方网站
对于一个整数规划问题,这一切都变得更加复杂,因为现在我们几乎进入丢番图方程的域。但实际上,如果你想看到所有整数解决一个问题,你可能会被迫使用一些详尽的搜索方法识别它们金宝搏官方网站。我经常建议你可能试图解决错误的问题,或者在错误的方式试图解决一个问题一个详尽的蛮力搜索是必要的。但这是你的问题,不是我的。无论如何,再一次,您将需要使用其他工具比intlinprog来解决这个问题。
例如,假设您想找到所有整数解的问题金宝搏官方网站
最小x + y + z
x + y + z = 100
(x, y, z) > = 1
这减少了发现问题的所有分区的编号为100,三个正整数之和。我的分区函数(在下载的文件交换)的所有833个这样的方法可以返回执行总和。
> >大小(分区(100年,1:10 0、3、3),1)
ans =
833年
关键是,如果你真的需要所有可能的解决方案的集合为一个线性规划问题,需要使用一些工具除了linprog / intl金宝搏官方网站inprog来解决这个问题。

约翰D 'Errico
约翰D 'Errico 我2022年11月10
Bearbeitet:约翰D 'Errico 我2022年11月12日
有界和无界的问题
这也许是最次问题很难回答,因为这将迫使我讨论诸如对偶线性规划问题。
一个无界的线性规划问题是什么意思?当linprog变得心烦意乱,,告诉你问题是无限的,它是什么德霖科技吗?显示这个,也许最好的方法就是与一个很明显的问题。我们只需要一个变量。因此
减少x
一个简单数据绑定约束,x < = 2
显然,因为x只有一个上限,我们可以减少x就我们的愿望。当x趋于无穷,目标也趋于无穷。看看linprog告诉我们什么。
[X, FVAL EXITFLAG、输出]= linprog (1 [] [], [], [], [], 2)
问题是无限的。X = [] FVAL = []
EXITFLAG = 3
输出=结构体字段:
迭代:0消息:“问题是无限的。”算法:“对偶单纯形”constrviolation: [] firstorderopt: []
Linprog不返回任何解决方案,尽管你可能认为它可以选择返回X和FVAL负无穷。3的exitflag也告诉我们这个事实。
大多数线性规划问题更难以知道自己有无限只要看一眼的问题。在二维的东西还是比较简单的,因为你总是可以情节的事情。即使在3 d,你仍然可以尝试策划约束飞机问题形象化。超越三维,你可能在更多的麻烦。记住,一个线性规划问题的约束将形成一个多面体。它将永远是一个凸域,但它可能没有绑定扩展。当然,这可能不是一个问题。即使在上面的简单的例子中,一个变量,linprog将最大化x没有问题,一个变量的问题。所以问题无限域并不总是无限的优化问题。
我会重复上面的例子表明,linprog即使在一个无界的一半线没有问题,只要目标指明正确的方向。(这个时候,使用一个基于问题制定)。
概率= optimproblem (“描述”,“有界的例子”);
x = optimvar (“x”[1],“低”2);
概率。ObjectiveSense =“最小化”;
概率。目标= x (1);
解决(问题)
使用linprog解决问题。找到最优解。
ans =结构体字段:
x: 2
在二维中,适度考虑下一个简单的问题,另一个例子:
x1 + x2最大化
x1 > = 0 x2 > = 0
x1 + x2 > = 4
2 * x1 + x2 > = 5
x1 + 3 * x2 > = 6
再次,我们应该想这不会有解决方案,作为一个无限的问题。
概率= optimproblem (“描述”,“无限二维例子”);
x = optimvar (“x”(1、2),“低”,0);
概率。ObjectiveSense =“最大化”;
概率。目标= x (1) + (2);
prob.Constraints。Con1 = x (1) + (2) > = 4;
prob.Constraints。Con2 = 2 * x (1) + (2) > = 5;
prob.Constraints。Con3 x = x (1) + 3 * (2) > = 6;
解决(问题)
使用linprog解决问题。问题是无限的。
ans =结构体字段:
x: []
我会画出二维问题,一半为一组飞机使用为此我写的工具。
plothalfplane ([1] 4 [0, 10], [0, 10])
2 plothalfplane ([1] 5 [], [], gcf)
plothalfplane (3 [1] 6 [], [], gcf)
在这里,我们看到三个约束的飞机。重叠区域是我们关心的。但如果线性规划问题的目标是MAXIMIIZE x1 + x2,然后我们可以任意发展目标和我们一样大的愿望,只要我们呆在三重阴影区域,延伸到无穷。
看到这个变化,如果我们以两种方式修改问题。例如,假设我们决定要减少金额吗?
概率。ObjectiveSense =“最小化”;
解决(问题)
使用linprog解决问题。找到最优解。
ans =结构体字段:
x (3.0000 - 1):
Linprog没有困难。或者,假设我们仍然最大,但我们现在添加另一个约束?
概率。ObjectiveSense =“最大化”;
prob.Constraints。Con4 = 4 * x (1) + 3 * x (2) < = 30;
xsol =解决(问题)
使用linprog解决问题。找到最优解。
xsol =结构体字段:
10.0000 x: [0]
plothalfplane([1] 4[0, 10],[0, 10],图)
2 plothalfplane ([1] 5 [], [], gcf)
plothalfplane (3 [1] 6 [], [], gcf)
-30年plothalfplane (3 [4], [], [], gcf)
持有
情节(xsol.x (1) xsol.x (2),“处方”)
持有
这次的解决方案被发现在现在有界多面体的顶点,代表现在的四倍地阴影区域。
现在,我希望你有一些理解的是什么意思。它告诉我们有一些方向我们可以搬出去到我们想要的,和持续改进目标我们想去。
我们总是能提前知道如果有问题吗?正如我们看到的,即使域无界,LP问题仍可能有一个有限的解决方案。一个简单的答案当然是相信linprog,为什么它会撒谎吗?在上面的例子我们可以看到我所说的非常简单的可视化检查,假设我们有4到10变量问题?第二个问题是,如果我们可以很容易地确定一些我们可以移动的方向,将显示要无限的问题当我们搬出去沿着线性路径。(一个无界的解决方案必须总是有一些可延伸到无穷远直线路径,目标可以看到增长的无限大我们遵循这条道路。)
为了更深入地研究这个问题,现在我们需要了解线性规划的对偶问题。但是,正如我阅读我写什么,我想这可能需要另一个答案,我记得是有限度的任何大小的一个答案。所以,在我4日对这个问题的回答。(写在进步……)

Kategorien

找到更多的在线性规划和整数线性规划帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的