【问题标题】:Continuous Resource Allocation / Knapsack Problem连续资源分配/背包问题
【发布时间】:2020-12-12 09:14:45
【问题描述】:

我正在尝试创建一个算法来解决以下优化问题,其中每个 x_i 和 B 都是整数,并且所有 f_i 都是单调的非线性函数。对我来说,这看起来像是一个背包或连续资源分配问题。编辑:常数 C 是一个整数

我最初尝试通过比较所有 g_i(x) 的边际成本来解决它,但由于 Cs 取消,这不起作用。我正在做的比较是寻找最小化 g_i(x) - g_i(x - j) 的 i,其中 j 是一个小值。在这种情况下:

g_i(x) - g_i(x - j) = f_i(x) + c - (g_i(x - j) + c),所以 cs 会抵消。

有谁知道这个问题的解决方案,或者对如何尝试这个有任何线索?如果有人有关于这个主题的任何文献,我将不胜感激。

谢谢。

【问题讨论】:

  • +C 使这更像是一个离散问题。您可以强制 i 的集合使 x_i > 0,或者如果您更详细地指定函数,则可能可以使用精确或近似的整数程序公式。
  • @DavidEisenstat 这些方程是非线性单调的(并且将它们估计为线性会导致太多错误,线性规划将不起作用)。常数 C 也是一个整数。你以前见过类似的问题(包括 + C 术语)吗?如果是这样,您能否指出他们可能列出解决方案的地方?
  • 分段线性?凸?单调是一个非常弱的假设。
  • 这有点像具有可拆分需求的退化容量设施选址问题。
  • @DavidEisenstat 感谢您的快速回复。假设方程是凸的

标签: algorithm machine-learning optimization mathematical-optimization knapsack-problem


【解决方案1】:

因此,我们有一些设施可以以成本 C 开放或以成本 0 关闭,并且开放设施为每个额外单元提供服务的边际成本永远不会下降(f_i 是凸的)。

如果我们知道哪些设施是开放的,那么当每个设施的下一个单元的所有边际成本大于或等于最后一个单元的所有边际成本时,我们就会知道我们有一个最优分配。每个设施(如您所见)。如果函数有一些特殊的形式,可能有更好的方法来做到这一点,但通常我们可以使用二进制搜索来找到让我们满足需求的最小边际成本(每次迭代也使用二进制搜索来确定每个开放设施可以服务)。

如果我们只知道确切的 k 个设施应该是开放的,我们仍然可以对最小边际成本进行二分搜索。我们只需要计算出每个设施在不超过建议边际成本的情况下可以服务多少个单位,然后选择前 k 个。

最后,观察我们可以尝试从 0 到 n 的所有 k 并找到我们找到的最佳解决方案。

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多