据我了解,由于线性程序的解法总是出现在其多面体可行集的顶点(如果存在解,并且假设最小化问题,则最佳目标函数值从下面限定),那么如何在线性程序中进行搜索内部可行区域会更好吗?它会收敛更快吗?在什么情况下使用单纯形法优于内点法会更有利?在代码中实现一个比另一个更容易吗?
据我了解,由于线性程序的解法总是出现在其多面体可行集的顶点(如果存在解,并且假设最小化问题,则最佳目标函数值从下面限定),那么如何在线性程序中进行搜索内部可行区域会更好吗?它会收敛更快吗?在什么情况下使用单纯形法优于内点法会更有利?在代码中实现一个比另一个更容易吗?
Answers:
根据个人经验,我会说,单纯形方法比内部点方法更容易理解如何实现,这是基于在MATLAB中实现原始单纯形和基本内部点方法(作为线性编程类的一部分)的个人经验, 。原始单纯形的主要障碍是确保正确实施I期和II期,以及正确实施反循环规则。为线性编程实现内点方法的主要障碍往往是正确实现迭代方法以及相应地缩放势垒参数。
您可以在有关线性编程的教科书中更全面地讨论每种算法的优缺点,例如Bertsimas和Tsitsiklis的线性优化简介。(免责声明:我从这本教科书中学习了线性编程,并从Bertsimas的妻子那里在麻省理工学院学习了线性编程。)以下是一些基础知识:
单纯形的优点:
单纯形的缺点:
内点法的优点:
内点法的缺点:
答案很简单。从算法的角度来看,它们(简单方法和内部点方法)都是一个成熟的领域。他们在实践中都表现很好。IPM(内点方法)的良好声誉是由于其在最坏情况下的多项式复杂性。具有组合复杂性的单纯形不是这种情况。然而,组合线性程序在实践中几乎从未发生过。对于非常大的问题,IP似乎要快一些,但不是必需的规则。我认为IP可以容易理解和实施,但是可以肯定的是,其他人也可以不同意,这很好。现在,在LP中,如果解决方案是唯一的,那么它肯定是在一个顶点上(IP和Simplex在这方面都做得很好)。该解决方案也可以位于多面体的表面或边缘上,在这种情况下,相邻的顶点也是一个(或多个顶点)解决方案(同样,IP和单纯形都做得很好)。因此,它们几乎相同。