【发布时间】:2011-09-05 12:43:21
【问题描述】:
我知道在整数规划中进行最小化是一个非常复杂的问题。但是是什么让这个问题如此困难?
如果我要(尝试)编写一个算法来解决它,我需要考虑什么?我只熟悉解决它的分支定界技术,我想知道在尝试以编程方式应用这种技术时会遇到什么样的障碍。
【问题讨论】:
标签: algorithm optimization linear-programming minimization
我知道在整数规划中进行最小化是一个非常复杂的问题。但是是什么让这个问题如此困难?
如果我要(尝试)编写一个算法来解决它,我需要考虑什么?我只熟悉解决它的分支定界技术,我想知道在尝试以编程方式应用这种技术时会遇到什么样的障碍。
【问题讨论】:
标签: algorithm optimization linear-programming minimization
我想知道在尝试以编程方式应用此技术时会遇到什么样的障碍。
特别没有(假设一个相当简单的实现没有很多技巧)。算法并不复杂——它们是复杂,这是根本的区别。
分支定界或分支切割等技术试图修剪搜索树,从而加快运行时间。但是整个问题树仍然是指数级的大,因此问题。
【讨论】:
lp_solve(都是开源)这样的专业程序是如何做到的。
就像其他人说的那样,这些问题非常困难,没有简单的解决方案或简单的算法适用于所有类别的问题。
解决这些问题的“经典”方法是进行分支定界并在每个节点上应用单纯形算法,正如您在问题中所说的那样。但是,如果您不是专家,我不建议您自己实施。
至于很多数值方法,很难做到正确(良好的参数值、良好的优化),并且已经做了很多工作(参见 CPLEX、COIN_OR 等)。
并不是你做不到:分支定界部分非常简单,但是如果没有所有技巧,你的程序会真的很慢。
此外,您将需要一个单工实现,这不是您想要自己做的事情:无论如何您都必须使用第三方库。
很有可能
我的主要观点是,只有经验丰富的人才会知道哪种算法会更好地解决您的问题,哪种形式的模型最容易解决,应用哪种方法以及哪种优化你可以试试。
如果你对这些问题感兴趣,我会推荐这本书来介绍这一切背后的数学(有很多例子)。它非常庞大,因此您可能想去图书馆而不是购买它:Nemhauser and Wolsey。
【讨论】:
在解决任何数学优化问题之前,您要做的第一件事就是对其进行分类。除特殊情况外,大多数情况下,整数规划问题将是 np-hard。因此,您将使用“启发式”,而不是使用“算法”。您将找到的最终解决方案不会是保证最佳的解决方案,但对于现实生活中的问题,它将是一个非常好的解决方案。
您的主要障碍将是您的编程技能。启发式编程需要良好的编程理解水平。因此,与其编写自己的启发式方法,不如使用众所周知的包(例如,COIN-OR,免费)。这样您就可以专注于您的问题而不是启发式方法。
【讨论】: