【问题标题】:Algorithm to do Minimization in Integer Programming整数规划中的最小化算法
【发布时间】:2011-09-05 12:43:21
【问题描述】:

我知道在整数规划中进行最小化是一个非常复杂的问题。但是是什么让这个问题如此困难?

如果我要(尝试)编写一个算法来解决它,我需要考虑什么?我只熟悉解决它的分支定界技术,我想知道在尝试以编程方式应用这种技术时会遇到什么样的障碍。

【问题讨论】:

    标签: algorithm optimization linear-programming minimization


    【解决方案1】:

    我想知道在尝试以编程方式应用此技术时会遇到什么样的障碍。

    特别没有(假设一个相当简单的实现没有很多技巧)。算法并不复杂——它们是复杂,这是根本的区别。

    分支定界或分支切割等技术试图修剪搜索树,从而加快运行时间。但是整个问题树仍然是指数级的大,因此问题。

    【讨论】:

    • 那么有哪些优化技术可以处理越来越大的数据集呢?
    • @canistr 问题不在于优化,而在于寻找更好的算法。我不知道最先进的技术,因为这是非常活跃的研究,但可能有帮助的一种算法是内点法。如果你真的感兴趣,看看像 CPLEX(闭源)或SCIPlp_solve(都是开源)这样的专业程序是如何做到的。
    • @canistr 仅举两个例子:en.wikipedia.org/wiki/Cutting-plane_methoden.wikipedia.org/wiki/Dantzig-Wolfe_decomposition。希望这会有所帮助!
    【解决方案2】:

    就像其他人说的那样,这些问题非常困难,没有简单的解决方案或简单的算法适用于所有类别的问题。

    解决这些问题的“经典”方法是进行分支定界并在每个节点上应用单纯形算法,正如您在问题中所说的那样。但是,如果您不是专家,我不建议您自己实施。

    至于很多数值方法,很难做到正确(良好的参数值、良好的优化),并且已经做了很多工作(参见 CPLEX、COIN_OR 等)。

    并不是你做不到:分支定界部分非常简单,但是如果没有所有技巧,你的程序会真的很慢。

    此外,您将需要一个单工实现,这不是您想要自己做的事情:无论如何您都必须使用第三方库。

    很有可能

    • 如果您的数据集不是那么大(试试看!),并且您对真正快速解决它不感兴趣:使用 COIN-OR 或 lp_solve 之类的方法和默认方法,它会起作用;
    • 如果您的数据集非常大(和/或您每次都需要快速找到解决方案),您需要与该领域的专家合作。

    我的主要观点是,只有经验丰富的人才会知道哪种算法会更好地解决您的问题,哪种形式的模型最容易解决,应用哪种方法以及哪种优化你可以试试。

    如果你对这些问题感兴趣,我会推荐这本书来介绍这一切背后的数学(有很多例子)。它非常庞大,因此您可能想去图书馆而不是购买它:Nemhauser and Wolsey

    【讨论】:

    • 单纯形实现有什么问题?一旦你理解了基础数学(很简单),这应该很简单。
    • @Konrad 避免退化节点上的循环有点棘手(不是真的很难想到)。人们经常希望用内存中的完整数组而不是修改后的单纯形法来实现它。加上很多优化......我并不是说你不能这样做,但我不明白这一点,因为它们有很多非常好的(和免费的)实现,而且肯定有很多工作。
    【解决方案3】:

    整数编程是NP-hard。这就是它如此困难的原因。

    您可能会感兴趣的tutorial

    【讨论】:

      【解决方案4】:

      在解决任何数学优化问题之前,您要做的第一件事就是对其进行分类。除特殊情况外,大多数情况下,整数规划问题将是 np-hard。因此,您将使用“启发式”,而不是使用“算法”。您将找到的最终解决方案不会是保证最佳的解决方案,但对于现实生活中的问题,它将是一个非常好的解决方案。

      您的主要障碍将是您的编程技能。启发式编程需要良好的编程理解水平。因此,与其编写自己的启发式方法,不如使用众所周知的包(例如,COIN-OR,免费)。这样您就可以专注于您的问题而不是启发式方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2023-03-22
        • 2019-10-02
        • 1970-01-01
        相关资源
        最近更新 更多