我在2D空间中有一组矩形和任意形状。形状不是多边形(可以是圆形),矩形具有不同的宽度和高度。任务是使用尽可能接近的矩形近似形状。我无法更改矩形尺寸,但允许旋转。
听起来与packing problem非常相似并且覆盖了问题,但覆盖区域不是矩形......
我猜这是NP问题,而且我很确定应该有一些论文显示出很好的启发式来解决它,但我不知道该怎么去谷歌?我应该从哪里开始?
更新:我想到了一个想法,但我不确定是否值得调查。如果我们将形状限定为充满水的物理模具,该怎么办?每个矩形被认为是带有尺寸的带正电粒子。现在删除最小的矩形。然后在随机点放下下一个大小。如果矩形太近,它们会相互排斥。继续添加矩形直到全部使用。这种方法有用吗?
答案 0 :(得分:16)
我认为您可以寻找打包和自动布局生成算法。自动VLSI布局生成算法可能需要类似的东西,就像纺织品布局问题......
本文Hegedüs: Algorithms for covering polygons by rectangles似乎解决了类似的问题。由于这篇论文是从1982年开始的,所以看一下papers which cite this one可能会很有趣。此外,this meeting似乎正在讨论与此相关的研究问题,因此可能是研究这一想法的关键字或名称的起点。
我不知道计算几何研究是否具有针对您的特定问题的算法,或者这些算法是否容易/实用足以实现。如果我必须这样做而不能查找以前的工作,我将如何处理它。这只是一个方向,到目前为止还不是解决方案......
将其公式化为优化问题。您有离散变量,您选择哪个矩形(是或否)和连续变量(三角形的位置和方向)。现在,您可以设置两个独立的优化:一个选择矩形的离散优化;和一个连续的,一旦给出矩形就优化了位置和方向。交错这两个优化。当然,困难在于优化的制定,以及设计你的误差能量,使其不会陷入某些奇怪的配置(局部最小值)。我试图将连续性作为least squares问题,以便我可以使用标准优化库。
答案 1 :(得分:5)
我认为这个问题适合用遗传算法和/或进化策略算法求解。在某种进化策略算法的帮助下,我做了类似的盒子包装问题。请查看in my blog。
因此,如果您将使用这种方法 - 编码到染色体框中:
然后尝试最小化这种适应度函数 -
y = w1 * box_intersection_area + w2 * box_area_out_of_shape + w3 * average_circle_radius_in_free_space
选择权重w1,w2,w3以影响因素的重要性。当遗传算法找到部分解决方案时 - 删除仍然重叠或变形的盒子 - 你将至少拥有合法(但不是必要的最佳)解决方案。
祝福这个有趣的问题!
答案 2 :(得分:2)
确实是NP难,并且由于它具有高科技应用,合理有效的近似策略甚至不在专利中,更不用说已发表的论文。
预算有限的最佳方法是首先限制问题。假设所有矩形都完全相同,假设所有矩形都是标准矩形的二进制子分区,因为您可以有效地预先包装它们以适合您的核心分区。对于额外的点,您还可以形成几个固定的模式,用于粘合核心矩形以覆盖几个具有不同比例的较大形状。假设您可以更改标准矩形/单元格的尺寸,只要其余部分(预包装和粘合模式)保持不变 - 这将为您提供参数,以根据您给出的矩形来确定核心矩形的近似大小。
现在您可以使用宽高比来估算有限系统可以保证的误差。对于第一次迭代,假设它可以使用简单的子划分模式产生50%的错误,然后更改模式以减少错误,但不会增加预先打包的渐近复杂性。在一天结束时,您始终只是为您预先计算好的现在固定的网格和二进制子部分分配给定的矩形 - 这意味着您根本不想进行布局或回溯 - 您总是对第一个近似值感到满意适合网格。
定义与你的模式很好地结合的矩形类 - 这又是为了让整个过程保持倒置 - 你永远不会试图真正适合你给出的东西 - 你正在定义你必须给予的东西以便冷杉它很好 - 然后你把其余的作为错误,因为它是近似的。
然后你可以尝试做更多的事情,但不能多做任何事情 - 任何进入回溯状态或指出任意小错误并且它是指数的。
如果您在研究机构并且可以获得一些超级计算机时间 - 运行一系列具有病态混合的详尽搜索,那么只需看看最佳包装可能是什么样子,看看您是否可以推导出更多的细分模式和/或矩形集类。
对于前2年或研究来说应该足够了: - )