用n个重叠圆覆盖正方形

时间:2015-01-07 06:58:32

标签: algorithm cover

有n个相同的圆圈和一个正方形。如何将圆圈随机放置在正方形内,以便完全覆盖正方形? PS:所有圆圈都应与其他圆圈重叠。

1 个答案:

答案 0 :(得分:0)

您可以尝试一种随机方法,例如:某种evolutionary algorithm。最简单的形式:

  • n 圈子中的半径 r 随机放置在方格中
  • 测量广场上这些圆圈的覆盖范围,例如:通过抽样一些(或相当多)点并测试它们是否在 r 内的任何一个圈子
  • 重复直到广场被完全覆盖(或直到 X 代已经过去):
    • 通过随机移动一个或多个圆圈来略微改变覆盖
    • 衡量新变种的覆盖范围
    • 如果新变体的覆盖率优于原始变体,请保留变体,否则保留原始变体用于下一次迭代

请注意,这并不能保证始终找到最佳解决方案(如果有的话),但在一般情况下应该可以很好地工作。此外,您可能需要采样相当多的点以防止提前终止(或找到更好的确定性方法),或者您可以在覆盖率变得相当高时动态增加要采样的点数。

PS:您的PS不需要检查。如果圆圈不重叠,则无法在没有间隙的情况下覆盖矩形的整个区域。