线性编程(LP)在P中,而整数编程(IP)在NP中。但是由于计算机只能以有限的精度操作数字,因此实际上计算机正在使用整数进行线性编程。因此,LP和IP难道不属于同一复杂度等级吗?
线性编程(LP)在P中,而整数编程(IP)在NP中。但是由于计算机只能以有限的精度操作数字,因此实际上计算机正在使用整数进行线性编程。因此,LP和IP难道不属于同一复杂度等级吗?
Answers:
我不能发表评论,因为它需要50个代表,但是散布着一些误解,尤其是拉斐尔(Raphael)的评论:“一般来说,连续的领域意味着没有蛮力(也没有聪明的试探法来加速它)。”
这是绝对错误的。关键确实是凸性。在多项式时间收敛的意义上,除非有一些技术约束条件,否则在凸集上最小化凸函数(或最大化凹函数)基本上是微不足道的。
粗略地说,您可以说“数学”优化中的问题凸性与“计算机科学”优化中的贪婪算法的可行性之间存在对应关系。从某种意义上说,它们都启用了本地搜索方法。您将不必在贪婪的算法中回溯,也不必在凸优化问题中后悔下降的方向。目标函数的局部改进将始终使您更接近全局最优。
在非凸情况下并非如此。在这里,可能存在一个全局最小值,但是总是会引用本地下降算法的几个局部最小值,这与贪婪算法应用于NP问题时的方式相同。有时他们找到真正的最佳选择,但大多数时候却找不到。
简短的答案:因为您可以使用Integers来模拟SAT的布尔值,但是当您不局限于此时,您实际上就无法模拟SAT。您将得到一个可行的答案,但是对于您尝试模拟的任何SAT实例,它都不再具有任何意义。
线性规划之所以“高效”,是因为解空间可以由单个凸多面体表示。如果试图在该多面体上找到“最高”顶点(一个人可以对任何线性规划问题进行线性变换,以使“高度”对应于要最大化的数量),则可以从任何顶点沿边传播到最高点,而不必走下坡路。使整数编程变得“困难”的原因在于,没有连续的求解空间,而是存在许多不相交的求解空间,并且无法朝着最优求解逐步进行工作。
其他答案是正确的,但我发现它们有点技术性。假设您已扫除(消除了)矩阵并正在寻找任何解决方案,则矩阵如下所示:
column x1 x2 x3 x4 x5 x6 | solution
-----------------------------------
1 1 1 | 3
1 | 1
1 1 | 2
2 1 1 | 1