【问题标题】:Which optimization algorithm should I use for maximizing profit with time limitations?我应该使用哪种优化算法在有时间限制的情况下最大化利润?
【发布时间】:2011-07-09 04:03:07
【问题描述】:

我想找到一个合适的算法来解决这个问题:

假设我们有 N 个项目,并且我们知道每个项目会赚多少钱,以及每个项目需要多少时间来完成(每个项目的估计时间)。我们有一定的可用时间来完成所有项目。我们希望选择项目以使我们的利润最大化并且总体估计时间不超过可用时间。你能告诉我应该使用哪种优化算法吗?有没有可以在 C#、.NET 技术或 Java 技术中使用的东西?

【问题讨论】:

  • 取决于 N。这是一个真正的问题,还是一个练习?如果这是一个真正的问题,我怀疑您的 N 是否足够大以排除对所有可能组合的蛮力搜索。
  • 我喜欢用 C# 程序替换所有管理的一般想法,但不清楚您要问什么或这与编程有什么关系。请举例说明输入和所需输出。
  • @mbeckish 在现实世界中的蛮力对于这些类型的优化几乎总是不切实际的
  • 为了获得最大的利润,您还必须知道每个项目的盈利能力,或者如果延迟,每个项目您将损失多少。

标签: c# java .net algorithm optimization


【解决方案1】:

这听起来很简单Knapsack problem

给定一组项目,每个项目都有一个权重和一个值,确定要包含在集合中的每个项目的计数,以使总权重小于或等于给定限制,并且总值与可能。

在你的情况下,权重是项目所需的时间,限制是时间限制。

通常,如果您是在现实世界中执行此操作,那么对于小案例来说,蛮力就足够了,如果您并不真正关心大案例,那么带有一些随机化的贪婪近似应该足够好准确的最大值。但是,我怀疑是否有人会在现实世界中使用如此严格的模型。

在理论上感兴趣的情况下,背包问题是NP-hard,是一个活跃的算法领域。

【讨论】:

  • 感谢大家的快速回复。这不是一个现实世界的问题,而是一个练习。我有包含这些信息的输入文件:项目数量和可用时间、估计时间列表和每个项目的收益。我想创建一个输出文件,其中包含最大利润和将完成的项目数量,以及将完成哪些项目。
  • @mismas 你可以查看:es.ele.tue.nl/education/5MC10/Solutions/knapsack.pdf 这是一张关于 0-1 背包问题的讲座幻灯片,来自 TU/e,Dijkstra 工作的地方:)
【解决方案2】:

您要查找的内容称为Knapsack problem

在您的情况下,“重量”限制是时间限制,价值就是价值。

【讨论】:

    【解决方案3】:

    简化,这看起来像一个加权的http://en.wikipedia.org/wiki/Knapsack_problem。你的时间就是项目的规模,你的体重就是你的成本

    【讨论】:

      【解决方案4】:

      从运筹学的角度来看,您正在研究混合整数程序 (MIP) 的一些问题。背包问题的方法可能就足够了,但如果没有得到关于问题的更多细节,我无法提出更详细的公式。

      一旦您决定了您的公式,就有几个 c# 解决方案可用于解决 MIP。 Microsoft 有一个 Microsoft Solver Foundation,您可以查看它,它能够解决简单的 MIP,并且有一个不错的 C# API

      IBM 最近购买了 OPL 优化包(被认为是行业领先的),您可以使用它来开发 MIP 公式。一旦您有了公式,OPL 就会提供 .NET API,您可以调用这些 API 来运行您的模型。

      我自己已经走 OPL 路线,如果可能的话,我会避免使用 OPL .NET API,因为它们非常麻烦。如果您的问题很简单,您可能需要研究求解器基础,因为与 OPL 相比,它提供了现代且干净的 API

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多