Algorithm 容器中具有预定义间隙的二维装箱

Algorithm 容器中具有预定义间隙的二维装箱,algorithm,bin-packing,Algorithm,Bin Packing,我有一个问题,就是如何在矩形容器中优化放置不同大小和数量的矩形对象。该问题可以完美地解决了二维装箱算法,但只有在空集装箱。对我来说,这几乎总是不可能的。我的容器可以有一个限制的地方,在那里不能放置任何物体。 当然,我不是第一个遇到这种问题的人,我希望有人已经为它找到了一个好的解决方案。任何东西都是好的:参考书、文章、代码片段等等。 形式算法优先于神经网络和这类东西 解决这个问题的一个可能方法是使用整数线性规划。有不同的模型,但这里是一个简单的模型(有点问题,但如果需要,您可以对此进行改进) 将

我有一个问题,就是如何在矩形容器中优化放置不同大小和数量的矩形对象。该问题可以完美地解决了二维装箱算法,但只有在空集装箱。对我来说,这几乎总是不可能的。我的容器可以有一个限制的地方,在那里不能放置任何物体。

当然,我不是第一个遇到这种问题的人,我希望有人已经为它找到了一个好的解决方案。任何东西都是好的:参考书、文章、代码片段等等。
形式算法优先于神经网络和这类东西

解决这个问题的一个可能方法是使用整数线性规划。有不同的模型,但这里是一个简单的模型(有点问题,但如果需要,您可以对此进行改进)

将问题分为主问题和子问题,主问题如下所示:

minimize sum(p)
s.t.
for all i: sum[j] p[j]*count[j,i] >= n[i]
p[i] >= 0 (and integer, don't add this constraint)
其中:

  • p
    是决策变量,决定将可用项目的特定“包装”到容器中的实例数量。显然有太多的信息需要提前列出,但它们可以动态生成
  • count[j,i]
    是包装
    j
    包含项目
    i
    的次数
  • n[i]
    是我们想要项目
    i
    的次数
  • 约束条件是
    =
    ,因为打包两个额外的项目是可以的,它允许我们使用更少的不同包装(否则,主问题将需要特殊的“故意次级”包装才能满足约束条件)
  • 如果使用解算器,则不应显式添加整数约束,因为整数解可能需要分数解中尚不需要的列
开始时,每个项目都有几个哑包装,这样肯定会有一些解决方案,尽管可能很糟糕。您甚至可以只在容器中放置一个项目,即使不使用子问题的解算器也很简单,但是子问题必须得到解决,因此您也可以在此处重用它

子问题是找出能够改进主问题当前解决方案的包装。因此,考虑主问题
C
行的双重成本(不同种类的项目数量相同),并解决

maximize y.C
s.t.
1) for all i: y[i] <= n[i]
2) for all i: y[i] = sum[j] P[j] if j is a placement of item i
3) for all cells (a,b): sum[j] P[j] (if j covers a,b) <= 1
4) for all existing packings e: e.y <= sum(e) - 1
y >= 0 and integer
P boolean
最大化y.C
s、 t。

1) 对于所有i:y[i],根据基本算法,可能只需稍加调整即可将其从“普通矩形”更改为“带孔矩形”。你想用什么?事实上我还没有选一个,因为我不知道哪一个能以最好的方式适合我的目的。对我来说,这项任务似乎可以用改进的最大矩形算法来完成,但我不确定。从阅读到正确理解这项任务需要一些时间。谢谢。@Dmytro运气好吗?如果需要的话,我可以解释得更多