【问题标题】:Optimization algorithm question优化算法题
【发布时间】:2011-03-29 23:35:10
【问题描述】:

对于那些有专业知识的人来说,这可能是一个简单的问题。但我自己无法弄清楚。

假设有大量对象需要从中选择一些。每个对象都有两个已知变量:成本和收益。我有一个预算,比如1000美元。在给定的预算范围内,我怎样才能知道我应该购买哪些物品以最大化总收益?我想要一个数字优化解决方案。谢谢!

【问题讨论】:

  • 收益是货币的吗?或者你只是简单地以任意的“利益”单位来表达利益。如果只是“利益”,@Carl 就在钱上。如果收益是金钱上的,那么您会看到不同的情况,因为收益意味着您将改变您的余额,从而改变您可以负担的成本。
  • 我没想到那么远。这会使问题变得更加复杂。

标签: optimization


【解决方案1】:

您的问题称为“背包问题”。您可以在wikipedia page 上阅读更多信息。将您原始问题的命名法翻译成维基百科文章的命名法,您的问题的“成本”就是背包问题的“重量”。你的问题的“好处”就是背包问题的“价值”。

找到一个精确的解决方案是一个 NP 完全问题,因此,如果您有很多对象可供选择,请为缓慢的结果做好准备!

【讨论】:

  • 谢谢!背包问题正是我最初的问题。但我的“真正问题”比这个标准问题要复杂一些。我读到了背包问题的解决方案(动态编程解决方案?),觉得它可能无法解决我的“真正问题”。我将我的真正问题描述如下。希望你能给我一些关于如何解决它的建议。
  • 假设每个项目的“价值”不是常数。所选项目的总“值”是所选项目的两个变量 (x, y) 的函数:Sum(x_i)/Sum(y_i)。考虑到总重量的限制,如何选择物品以获得最高价值?对这个问题有什么建议吗?
【解决方案2】:

您还可以查看Linear Programming。来自数学世界:

简单地说,线性规划是 基于结果的优化 在一组约束上使用 线性数学模型。

【讨论】:

    【解决方案3】:

    是的,如前所述,这是背包问题,我会选择使用线性规划。

    这个问题的关键是存储数据,这样您就不需要多次重新计算(如果有足够的内存可用)。线性规划有两种通用方法:自顶向下和自底向上。这是一个自下而上的问题。

    (通常)查找基本案例值,对于小案例,选择什么是最佳对象。然后以此为基础。如果我们允许自己花更多的钱,那么对于那一点点的钱来说,最好的对象组合是什么。可能性可能是拿走更多你以前拥有的东西,拿一个新的对象并替换旧的,再拿一个仍然会让你保持在预算之内的小对象等等。

    就像我说的,主要思想是不重新计算值。如果你遵循这个模式,你会得到一个很高的数字,并发现为了购买价值 X 美元的商品,最好的解决方案是将你拥有的两个较小的箱子组合起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-30
      • 2023-02-03
      • 1970-01-01
      • 2011-11-24
      • 2020-02-09
      • 2015-11-05
      • 2015-10-25
      相关资源
      最近更新 更多