不是背包或bin算法

时间:2013-07-31 18:56:19

标签: optimization packing knapsack-problem

我需要找到一个矩形组合,可以最大限度地利用圆形区域。我的情况与经典问题之间的区别在于我有一组 CAN 使用的矩形,以及我必须使用的那些矩形的子集。

通过类比:想想日志的结尾和电路板尺寸列表。我可以从日志中剪切2x4s,2x6s和2x8s以及2x10但我必须至少剪掉两个2x4s和一个2x8。

据我了解,我的特殊变化与其他包装优化略有不同。提前感谢您对如何调整现有算法以解决此问题的任何见解。

NCDiesel

1 个答案:

答案 0 :(得分:0)

这实际上是一个非常难的问题,即使是正方形而不是矩形。

这是一个想法。将其作为背包 - 整数 - 程序来处理,它可以为您提供解决方案的一些见解。 (根据定义,它不会为您提供最佳解决方案。)

IP配方启发式

Say you have a total of n rectangles, r1, r2, r3, ..., rn
Let the area of each rectangle be a1, a2, a3, ..., an
Let the area of the large circle you are given be *A*

决策变量

Xi = 1 if rectangle i is selected. 0 otherwise.

<强>目标

 Minimize [A - Sum_over_i (ai * Xi)]

受制于:

 Sum_over_i (ai x Xi) <= A # Area_limit constraint
 Xk = 1 for each rectangle k that has to be selected

您可以使用任何解算器解决此问题。

现在,这是一个启发式的原因是这个解决方案完全忽略了圆内矩形的排列。它还最终将“切割”矩形变成小块以适合圆圈内部。 (这就是Area_limit约束是弱边界的原因。)

相关参考

This Math SE问题解决了它的“经典”版本。 you can look at the link在那里作为评论提供了几个聪明的解决方案,涉及在圆圈内打包的相同大小的正方形。