【问题标题】:How can I find k minimum bounding rectangles to enclose all the given points?如何找到 k 个最小边界矩形来包围所有给定点?
【发布时间】:2020-02-25 18:36:55
【问题描述】:

给定框数和 n 个数据点的参数 k,我是否可以找到或近似 k 轴对齐的边界矩形,这些矩形包围所有点,同时保持矩形面积的总和最小?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请拨打tour 并阅读帮助中心help center 中的信息指南。如果您 (1) 展示您自己的一些研究成果(Google 和 StackOverflow 搜索),(2) 了解适合该论坛的问题,(3) 展示您的图片,并且 (4) 提供针对您的具体问题的最小、完整和可验证的示例。
  • 一个不错但不是最佳的起点可能是使用k-means clustering algorithm 并在每个集群周围放置一个边界框。
  • 这是stackoverflow.com/questions/60005251/… 的副本,没有答案。可能是因为这个问题给人一种 NP 完全的感觉,但要证明它实际上是 NP 完全需要工作。
  • 矩形可以重叠吗?如果是这样,您是否多次计算重叠区域?

标签: algorithm optimization bounding-box


【解决方案1】:

一种方法是直接将其写成数学优化问题。

高级优化模型如下所示:

我们首先定义决策变量:

r(k,c) = coordinates for k-th box  (e.g. c={x,y,w,h})
         continuous variable with appropriate bounds

x(i,k) = 1 if point i is assigned to box k
         0 otherwise
         binary variable

那么二维模型可以如下所示:

 minimize sum(k, r(k,w)*r(k,h))          (sum of areas)
 sum(k, x(i,k)) = 1                      (assign point to one box)
 x(i,k) = 1 ==> point i is inside box k  (can be formulated as linear big-M constraints 
                                          or indicator constraints ) 

为了测试,我在 [0,1]x[0,1] 单位框中生成了 30 个点。

使用|k|=5 框,我们得到:

这可以直接推广到更多维度(绘图变得更加困难)。

这本质上是一个结合了赋值问题(对于 x 变量)和位置问题(对于 r 变量)的模型。它可能只适用于相对较小的数据集。对于这个例子,我使用了 Gurobi(非凸 MIQP),这是经过验证的全局最优解。值得注意的是,即使对于更高维度的问题,我们也可以将事物重新表述为非凸 MIQCP(即 Gurobi 可解决的问题)。

为完整起见,上述模型的数据和结果为:

----     52 PARAMETER p  data points

              x           y

i1        0.806       0.173
i2        0.530       0.149
i3        0.648       0.692
i4        0.352       0.020
i5        0.431       0.554
i6        0.641       0.775
i7        0.235       0.781
i8        0.268       0.082
i9        0.973       0.114
i10       0.874       0.667
i11       0.756       0.968
i12       0.199       0.240
i13       0.220       0.261
i14       0.989       0.172
i15       0.066       0.930
i16       0.806       0.832
i17       0.105       0.029
i18       0.229       0.094
i19       0.130       0.903
i20       0.437       0.728
i21       0.248       0.575
i22       0.360       0.516
i23       0.710       0.746
i24       0.704       0.746
i25       0.185       0.936
i26       0.817       0.673
i27       0.463       0.578
i28       0.089       0.657
i29       0.973       0.691
i30       0.894       0.078


----     52 VARIABLE x.L  assignment variables

             k1          k2          k3          k4          k5

i1                                            1.000
i2                                            1.000
i3                                                        1.000
i4                    1.000
i5                                1.000
i6                                                        1.000
i7        1.000
i8                    1.000
i9                                            1.000
i10                                                       1.000
i11                                                       1.000
i12                   1.000
i13                   1.000
i14                                           1.000
i15       1.000
i16                                                       1.000
i17                   1.000
i18                   1.000
i19       1.000
i20                               1.000
i21       1.000
i22                               1.000
i23                                                       1.000
i24                                                       1.000
i25       1.000
i26                                                       1.000
i27                               1.000
i28       1.000
i29                                                       1.000
i30                                           1.000


----     52 VARIABLE r.L  rectangles

             x           y           w           h

k1       0.066       0.575       0.181       0.361
k2       0.105       0.020       0.247       0.241
k3       0.360       0.516       0.103       0.211
k4       0.530       0.078       0.459       0.095
k5       0.641       0.667       0.332       0.301


----     52 VARIABLE z.L                   =        0.290  objective

【讨论】:

  • 如 cmets 中所说,只需使用 k-means 算法即可。之后可能是改进启发式。
  • 元启发式的设计应该不难。只专注于任务。 score 函数可以计算矩形及其大小。
【解决方案2】:

一种方法,我完全不知道它是否有任何好处:

  • 从包含 N 个点的 N 个零大小框开始。
  • 在不同的盒子中找到距离最短的两个点,并将它们的两个盒子替换为一个封闭盒子。现在你少了一盒。
  • 重复上一步,直到你有 K 个盒子。

现在我们有了一个算法,每次迭代都尽可能接近目标,我们可以使用 A* 搜索来找到最佳解决方案,以防简单的解决方案不是最佳解决方案。启发式函数当然是总覆盖面积。

【讨论】:

  • 必须是(x1-x2)^2+(y1-y2)^2,不能忽略整个坐标。但是您可以使用分区减少搜索。从数据点制作一定深度的四叉树,并将搜索限制在当前节点。或者将字段划分为固定的 MxM 单元格,并将搜索限制在当前单元格以及可能的相邻单元格中。但如果在受限搜索中找不到任何内容,还必须能够扩展搜索。
猜你喜欢
  • 2011-06-30
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2018-11-06
  • 2019-10-23
  • 1970-01-01
相关资源
最近更新 更多