这个组合优化问题是否与任何已知问题相似?


10

问题如下:

我们有一个二维的数字数组/网格,每个数字代表某种“收益”或“利润”。我们也有两个固定整数和(分别表示“宽度”和“高度”。)和一个固定整数。whn

现在,我们希望在网格上覆盖尺寸为矩形,以使这些矩形中的单元格值的总和最大化。nw×h

下图是一个二维网格的示例,上面覆盖了两个这样的矩形(图片未展示最佳解决方案,只是其中和一种可能的覆盖)w=h=2n=2

网格示例

矩形不能相交(否则,我们只需要找到一个矩形的最佳位置,然后将所有矩形放在该位置即可。)

在上面的示例中,单元格中值的总和为2+4.2+2.4+3.14+2.31.4+13.1

这是否类似于组合优化中的任何已知问题?这样我就可以开始阅读并尝试找到解决方法。

那些感兴趣的人还有更多背景知识:

到目前为止,我仅有的想法是贪婪算法(它将找到第一个矩形的最佳位置,然后找到第二个矩形的不重叠位置等)或某种元启发式方法,例如遗传算法。

实际上,我希望使用具有大约一百万个单元和数万(甚至数十万)个矩形的网格来解决此问题,尽管没有必要在短时间内解决它(即对于该算法需要花费数小时甚至数天的时间。)我不希望找到确切的解决方案,但是我想得到一个在这些限制条件下尽可能好的解决方案。

干杯!


(在电话上)这似乎可以通过转换和其他一些限制条件下的最大匹配来解决。稍后我会尝试写。
Nicholas Mancuso 2015年

我可以想象要求使用精确的意味着有时不使用“局部”最大值,而是使用一个环。我在这里想象一个简单的圆顶形状,其中“贪婪”地取下圆顶中心意味着您无法将所有都容纳在其周围。nn1
马克·赫德

我的第一个想法是尝试动态编程。根据其与曼哈顿左上角的距离对正方形进行编号。一个子问题是:正方形的;您选择的矩形的列表,其左上角的数字小于;目标是通过添加一些左上角的数字为的正方形子集,将扩展到最佳的非重叠正方形集。如果您有所有后续子问题的解决方案,则可以快速解决每个子问题。唯一的问题是您必须探索多少个子问题。大号小号大号小号sLsLs
DW

Answers:


2

我的最后一个公式有一个致命缺陷,那就是需要成倍数量的“约束”节点。

该问题的另一种自然的图形表示形式是创建一个图形,其中每个顶点代表一个的矩形。任何一对重叠的矩形在此图中都有边。通过求解大小为最大加权独立集,我们可以解决您的原始问题。为此,存在许多良好的启发式算法和近似算法。瓦特- [R [R - [R ' ķ = Ñrwrr,rk=n


这就是我目前的方向,我将对此进行试验并接受解决方案,如果这是我最终使用的解决方案,请加油。
fightty08”,2015年

2

您可以将其表示为一个巨大的整数线性编程(ILP)实例,然后应用现成的ILP求解器(lp_solve,CPLEX等)。他们将为您提供最佳解决方案。考虑到问题实例的大小,我不知道这是否足够有效,但尝试起来很容易。

这是ILP公式。对于每个可能的矩形,我们都有一个零或一的变量,其预期解释是表示您将矩形包含在集合中,而表示您不包括矩形。您希望最大化目标函数(其中是矩形的利润),但要受并且没有两个矩形重叠的限制。对于所有矩形对,要求可以将后者的限制表示为线性不等式 [R X - [R = 1 - [R X - [R = 0 Σ ř Ç - [R X - [R Ç - [R [R Σ [R X - [R = Ñ X - [R + X 小号1 - [R 小号xrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,s重叠。这样,您便获得了ILP。


您认为这个问题对NP不利吗?我不认为它没有多重时间解决方案,而且ILP求解器甚至不可能完成中等大小的实例。
RB

1
@RB,我不知道它是否是NP-hard。请参阅我在动态编程问题下的评论,这是我对如何尝试找到多项式时间算法的第一个想法(但我不知道结果算法是否在P中)。就ILP求解器可以做的事情而言,找出答案的唯一方法就是尝试-有时它们的性能可能令人惊讶。
DW
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.