以下问题: 给定是一个任意多边形。应使用给定半径的最小圆圈数100%覆盖。
注意: 1)自然地,圆圈必须重叠。 2)我尝试解决ARBITRARY多边形的问题。但是,对CONVEX多边形的解决方案也很感激。 3)据我所知,这个问题是NP难的(an algorithm to find the minimum size set cover for the Set-cover problem) 选择:U =多边形和S1 ... Sk =具有任意中心的圆圈。
我的解决方案: 我已经阅读了一些论文并自己尝试了一些方法。我提出的最有希望的想法实际上已经在Covering an arbitrary area with circles of equal radius中指出了。
所以我想我最好快速尝试描述自己的想法然后改进我的问题。
图片让您对我的工作非常了解
IDEA和问题制定 我用它们相应的六边形近似圆圈并镶嵌整个R2,即一个足够大的区域;关键字六角形最接近的包装。 (青色...镶嵌,红色点缀,青色六边形的中心) 2.我将多边形放在这个镶嵌区域的中间位置,并计算覆盖多边形所需的六边形数量。
在下面我尝试通过在每个步骤“计数”N之后逐步移动多边形来最小化N,即覆盖多边形所需的六边形数量。
解决问题: 所以当它变得困难时(对我来说)。我不知道任何正确解决这个问题的优化器,因为它们都会在多边形移动一点之后终止,而不是观察任何变化。
我的解决方案如下: 首先请注意,这是一个周期性问题: 1.多边形可以在水平方向x上移动,周期为六边形的3 * r(边长=半径r)。 2.多边形可以在垂直方向y上移动,周期为六边形的r ^ 2 + r ^ 2-2 * r r cos(2/3 * pi)。 3.多边形可以旋转phi,周期为2/3 * pi。
这意味着,必须搜索可能解决方案的有限区域以找到最佳解决方案。 所以我所做的是,我为(x,y,phi)选择了一个步长,并且只是强力计算所有可能的解决方案,选择最佳解决方案。
完善我的问题 1)问题是否明智地制定了?现在我正在研究一种算法,该算法仅对非常小的区域进行细分,以便尽可能少地计算六边形。 2)是否有更智能的优化器来解决问题? 3)最后:我也很难找到合适的文献,因为我不认为我不知道要找的合适的关键词。因此,如果有人能够为我提供文献,那么也会受到很多赞赏。
实际上我可以继续讨论其他尝试的事情,但我想你们中的任何一个人都不想花一整个下午来阅读我的问题。
提前给每个花时间思考它的人。
垫
PS我在matlab中实现我的算法
答案 0 :(得分:0)
编辑:重写的答案(圈子不能超出多边形的限制)。
您可能对Covering a simple polygon with circles感兴趣。我认为算法可以工作或者也可以扩展到复杂的多边形。
答案 1 :(得分:0)
我喜欢你的方法!当您提到优化时,我认为实现此目标的一种好方法是旋转六角形网格并将其平移,直到找到覆盖该区域的最小圆。您不需要旋转360,因为图案是对称的,所以只需360/6。
我已经在这个问题上研究了一段时间,并且刚刚发表了一篇包含解决该问题代码的论文!它使用遗传算法和BFGS优化。您可以在此处找到论文的链接:https://arxiv.org/abs/2003.04839
答案 2 :(得分:-1)
1.在最小尺寸的矩形中输入给定的多边形 2.用圆圈最佳地覆盖矩形(算法可用)