我需要找到一个矩形组合,可以最大限度地利用圆形区域。我的情况与经典问题之间的区别在于我有一组 CAN 使用的矩形,以及我必须使用的那些矩形的子集。
通过类比:想想日志的结尾和电路板尺寸列表。我可以从日志中剪切2x4s,2x6s和2x8s以及2x10但我必须至少剪掉两个2x4s和一个2x8。
据我了解,我的特殊变化与其他包装优化略有不同。提前感谢您对如何调整现有算法以解决此问题的任何见解。
NCDiesel
答案 0 :(得分:0)
这实际上是一个非常难的问题,即使是正方形而不是矩形。
这是一个想法。将其作为背包 - 整数 - 程序来处理,它可以为您提供解决方案的一些见解。 (根据定义,它不会为您提供最佳解决方案。)
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在那里作为评论提供了几个聪明的解决方案,涉及在圆圈内打包的相同大小的正方形。