优化容量利用率的算法

时间:2011-06-02 22:11:34

标签: c#

我在C#中为自己设定了一个“简单”的编程挑战来优化容量。我没有做好我的第一次尝试(如下所述)所以我们正在寻找是否有一个标准化的算法来做这个,而不使用AI /启发式技术,因为我根本不知道它们。我相信有一种已知的方法可以解决这个问题,因为问题可能适用于CPU和其他资源的负载平衡等常见情况。

我自己设定的问题。我有3个容器。

  • 容器1 - 容量15
  • 容器2 - 容量30
  • 容器3 - 容量15

容器全部开始为空,因此容量已满。

我也有20件物品。为了列出很长的清单,我不会全部列出。但它们很简单,可以像

  • 第1项 - 金额3
  • 第2项 - 金额8
  • 第3项 - 金额1
  • 第4项 - 金额1
  • 第5项 - 金额5
  • 依旧.........

我想要做的是在不破坏限制的情况下,将所有物品装入最少数量的容器中,即过度填充容量。

  • 容器1 - 第2,1项
  • 容器2 - 第3,4,5项
  • 等..............

我正在寻找解决方案,但显然解决方案效率越高越好。最终我将自动生成容器和物品,甚至可能添加更多属性(重量和数量)。我知道即使你随机生成它们也有一定数量的解决方案,想法是找到最好的,或者接近最好的是合理的时间。我最初的尝试是首先定义容器和项目对象,然后随机地将项目分配给容器,然后尝试通过在容量接近的容器中查找可用空间进行优化,并用不完整容器中的项目填充它们。但它没有成功。我认为最简单的解决方案是按照最大数量的顺序分配项目,然后使用少量填补空白。我远离这个初始,因为我觉得如果我添加更多约束会有缺点,即数量很高(20),但说重量新约束只是(1)。然后我可能最终得到一个装满量的容器,但几乎没有重量使用导致容器变得沉重以至于不再容纳。

虽然我比使用C#.Net 4.0的语言更关注这个问题,所以如果你有想法可以随意使用LINQ等框架。

如果我发布了一个我错过的众所周知的解决方案的问题,请随时指出我的权利。但我对你能提出的任何解决方案感兴趣。我期待着阅读回复。

1 个答案:

答案 0 :(得分:7)

你选择了一个非常艰巨的挑战:

,这个问题是NP-complete,这意味着问题的唯一已知正确解决方案会调用所有可能的组合。

如果您能够采用启发式/近似方法,可以尝试第一个链接中描述的贪婪近似算法