给定每个项目的二维尺寸和值。通过将项目填充到 n x n 容器中找到你可以获得的最大值

Given 2d dimensions and values for each items. Find maximum value you can get by filling in items in n x n container

这听起来与背包或垃圾箱包装问题非常相似,但我不知道如何处理。这些项目被赋予二维尺寸(宽度和高度)而不是重量。

Ex. 
container: 10 x 10

items: [
    w: 3, h: 5, value: 160,
    w: 5, h: 5, value: 250,
    w: 2, h: 5, value: 150,
    w: 2, h: 3, value: 10,
]

constraints:
- items are rectangles (not necessarily squares)
- can use same items more than once
- n <= 20

尝试使用贪心法解决它,先填满每平方面积价值最高的容器。然而,这并不总能带来最大利润。

这可以表述为混合整数规划 (MIP) 问题。

我试过了:我假定整数长度和宽度。基本上,用作决策变量:

 x(k,i,j) = 1 if item k is placed at cell (i,j)
            0 otherwise

我使用的约定是“放置在 (i,j)”是关于项目的左上角(见下图)。然后对于每个单元格 (i',j') 我们要求只有一个项目可以覆盖它。这是一个有点复杂的约束:

 sum((i,j)|covered(k,i,j,i',j'), x(k,i,j)) <= 1   for all (i',j')

其中 covered(k,i,j,i',j') 表示单元格 (i',j') 是否被项目 k 覆盖,如果它被放置在单元格 (i,j)。

那么objective就是

  max sum((k,i,j)|ok(k,i,j), x(k,i,j)*value(k))

此处ok(k,i,j)表示项目k是否可以放在单元格(i,j)。

我用你的例子试过了。结果是:

----     74 VARIABLE x.L  item k is placed at (i,j)

            r1.c1       r1.c3       r1.c5       r1.c7       r4.c1       r6.c3       r6.c5       r6.c7

item3                       1           1           1           1
item4           1                                                           1           1           1


----     74 VARIABLE totalValue.L          =      640.000  objective (maximized)

----     79 PARAMETER occupy  items occupy cells

            c1          c2          c3          c4          c5          c6          c7          c8

r1           4           4           3           3           3           3           3           3
r2           4           4           3           3           3           3           3           3
r3           4           4           3           3           3           3           3           3
r4           3           3           3           3           3           3           3           3
r5           3           3           3           3           3           3           3           3
r6           3           3           4           4           4           4           4           4
r7           3           3           4           4           4           4           4           4
r8           3           3           4           4           4           4           4           4

显然,这并非完全微不足道。