问题(不是这个问题本身,这只是背景信息)可以通过借用他们自己的图像来进行视觉描述:
有一个明显的整数线性规划模型:生成所有可能的正方形(如果正方形仅覆盖存在的网格单元,则正方形是可能的),为每个正方形引入一个二进制变量x_i,指示我们是否使用它,然后
minimize sum x_i
subject to:
1) x_i is an integer
2) 0 ≤ x_i ≤ 1
3) for every cell c
(sum[j | c ϵ square_j] x_j) = 1
约束条件3指每个单元格恰好被覆盖一次。约束条件1和2使x_i为二进制。最小解法可给出原问题的最优解。
线性松弛(即忽略约束条件1)的表现还算不错,但它会做出这样的事情(这是一个6×6的网格,左上角缺失):
这里选择了13个正方形的“一半”(即客观值为6.5),并标明了它们的大小(以便更容易找到它们)
- 1个4x4的正方形
- 3个3x3的正方形
- 6个2x2的正方形
- 3个1x1的正方形
这种情况下的最优解的客观值为8,例如以下解:
这就是实际问题的关键所在,我能否添加额外的约束条件(作为割),以改善分数解?
我尝试了问题的另一种表述方式来找到割,例如,选择方块而不是左上角和右下角,然后将它们匹配起来形成覆盖所有单元格的非重叠方块。然后,在每个“反斜杠对角线”上,必须有相等数量的左上角和右下角匹配。但这没有帮助,因为如果我们选择正方形,则该条件始终为真,即使在分数解中也是如此。
我还尝试过一些关于重叠的推理,例如,如果两个正方形明显重叠,则它们的总和不能大于1,并且可以通过添加所有完全包含在重叠区域中的正方形来改进。但是,该约束比所有单元格仅被覆盖一次的约束不那么有力。
我尝试过关于总面积的推理(即总覆盖面积必须等于单元格数),但这已经由每个单元格必须被覆盖一次的约束保证,将其陈述为总面积只会增加自由度。
我也尝试过处理平方数(每个正方形的面积都是一个平方),以及平方数之间的差异,但这并没有带来任何有用的结果。