【发布时间】:2011-11-17 04:43:30
【问题描述】:
我真的很感谢一些关于这个实际问题的 cmets。
简要说明。 我有可变数量的链接,可用于构成给定的皮带宽度。问题是,每个链接有多少。 选择标准:最好使用较长的项目。
示例。 假设我们要创建一个皮带宽度, W = 1024.0 其中一种型号具有以下链接长度: L = [34.0, 65.0, 96.0, 126.0]
问题是,每个链接有多少个宽度。
这是我尝试过的一些方法。
1.贪婪(选择最长的第一个以满足标准) c = [0,0,0,8] 其中 c 是每个项目的计数。 这留下了 16.0 的差距,我什至无法容纳 1 个最小的项目。 贪心容易,但不好。
2。选择循环 不太容易,我认为这是一个难题。 我尝试了很多策略:填充小物品,然后依次移除它们以适应下一个尺寸。
3.背包法 不太合适,因为这是基于给定数量的项目。
4.子集和问题 这是 Knapsack 的一个子类,但我无法让它工作。
5.装箱问题 听起来很相似,但我无法将其应用于我的问题。
6.蛮力(随机选择) 奇怪的是,这个找到了许多完全匹配的东西。 我使用计数的简单多项式作为评级。 评分 = n[0] + n[1]*2 + n[2]*3 + n[4]**4 + ... 蛮力的解决方案之一是 [4, 0, 4, 4] 正好给出 1024。 问题是,这种方法经常会出现不同的选择,因此并不理想。
7.详尽的搜索 不实用,因为选择太多。
8.模拟退火 从蛮力的成功来看,这看起来是一个不错的选择。 有人可以给我举一个简单的例子吗(请不要是另一个旅行推销员)。
9.遗传和粒子群 不确定这些。
现在,我感到困惑和沮丧。 有没有可以直接解决这个问题的算法?
【问题讨论】:
标签: brute-force subset-sum bin-packing simulated-annealing knapsack-problem