大自然的优化算法:优雅的沃罗诺伊图

撬开科学新世界 2024-07-25 16:05:04

大自然许多看似随意的美景,其实背后都有一套精密的数学逻辑在支撑。像花瓣的排列、蜂巢的结构、河流的分布,都蕴含着高度简洁,自洽统一的美感。这种统一的美感源自我们周围隐藏的一种叫做沃罗诺伊图(Voronoi Diagram)的几何图案(也称作泰森多边形 Thiessen Polygon)。

0

自然界中的沃罗诺伊图

自然界中,沃罗诺伊图的存在随处可见。

自然界中的沃罗诺伊图解释了许多生物结构的形成和演化过程,它基于简洁的几何原理,却能够生成复杂而美丽的图案:沃罗诺伊单元的边界是距离最近的点的中垂线,这种分割方式确保了每个区域的独立性。就像是大自然设计的“优化算法”,高效而具有美感。

例如,蜂巢中的每个蜂房都是一个沃罗诺伊单元,这样蜜蜂就能够最大化地利用空间储存蜂蜜;植物和动物的细胞常常排列成沃罗诺伊图形状,这种排列方式有助于细胞生长和扩展,减少细胞间的空隙,最大化了养分的利用效率;

森林中树木的生长模式往往遵循沃罗诺伊图形,这样可以确保每棵树都有足够的空间获取阳光和养分;

树冠边缘呈现出的沃罗诺伊图形

一些矿物和岩石的结晶结构以及冷却过程中形成的裂纹也呈现出沃罗诺伊图的分布特征。这种分布模式有助于能量的最小化和结构的稳定。

02

沃罗诺伊图的起源

受到笛卡尔用凸域分割空间的思想,俄罗斯数学家格奥尔基·沃罗诺伊(Georgy Voronoi)在1908年提出沃罗诺伊图,用于研究n维空间中的分割问题。

沃罗诺伊图的基本思想是,将平面或空间按照离一组给定点的距离进行划分,使每个点都有一个独立的区域。沃罗诺伊图满足特殊的性质,它使得每个区域中的所有点都与某个特定的生成点最近,这些区域被称为沃罗诺伊单元。

到20世纪初,沃罗诺伊图被正式引入计算几何学,并在20世纪中叶随着计算机科学的发展被广泛应用到地理信息系统(GIS)、计算机图形学、机器人导航、无线通信和生物学等领域。

除了在自然界中经常看到的沃罗诺伊图形,在建筑设计和城市规划中,常用沃罗诺伊图来设计布局以最大化空间利用率,比如北京的水立方设计;图像处理和计算机视觉领域也常用沃罗诺伊图进行图像分割、物体识别和网格生成;

在制图和地理信息系统中,沃罗诺伊图能够帮助确定最近设施的位置,比如医院和消防站等公共设施,以优化资源分配,提高服务效率。

03

利用沃罗诺伊图的优化

沃罗诺伊图之所以如此重要,是因为它能够高效地解决许多空间分割和最近邻查询的问题。通过预先计算沃罗诺伊图,可以快速确定每个区域内的最近邻点,从而在各种实际应用中提高效率。基于这种特性,沃罗诺伊图在很多领域中得到了广泛应用,比如最近邻查询、空间分割和资源分配等。

伦敦霍乱地图

沃罗诺伊图有一个经典的早期应用。

在1854年,伦敦爆发了一场严重的霍乱疫情。霍乱这种急性肠道感染通常通过污染的水源传播。

当时,一位叫约翰·斯诺(John Snow)的英国医生和麻醉师巧妙地运用了沃罗诺伊图的概念来进行空间分析,找出霍乱的源头。

约翰·斯诺收集了所有霍乱病例的地理位置数据。他利用沃罗诺伊图的原理,首先在地图上标出所有水泵的位置,然后根据这些水泵的位置,把地图分成多个区域,使得每个区域的居民到最近的水泵的距离是最短的。通过这种方法能够直观地看到每个水泵服务的区域。

随即,霍乱病例的分布情况一目了然:约翰医生发现大多数病例集中在百老汇街(Broad Street)的一口水泵周围。基于沃罗诺伊图的分析结果,他成功说服当地政府关闭了这口水泵,霍乱病例随即迅速减少,有效地阻止了霍乱的进一步蔓延。

城市规划中的沃罗诺伊图

正是由于沃罗诺伊图具有的特性,它能自然地将空间划分为最接近某一资源(如医院、消防站)的区域,因此沃罗诺伊图也可以被用来解决城市规划中的优化的问题。

问题背景是这样的:设想你是一名城市规划师,需要在城市中放置几家医院。如何规划医院位置,才能使每家医院服务的区域内的人口数量尽量接近其接待能力?

最一开始,医院的位置是随机选择的。用沃罗诺伊图将城市划分为若干区域,每个区域由一个医院服务。于是,原问题转变为一个优化问题,优化目标为:根据医院的容量和区域内的人口密度,优化每个医院的位置,使得每个区域内的人口尽可能接近对应医院的服务能力。

通过引入自动微分,可以将沃罗诺伊图构建过程转化为可微的计算图,使用自动微分和梯度下降等优化算法高效地调整每个点的位置,这就大大加快了优化医院位置的过程。最终得到的沃罗诺伊图使每个沃罗诺伊区域的人口密度与医院的服务能力匹配。

优化后得到的沃罗诺伊图

04

沃罗诺伊与德劳内的几何对偶

沃罗诺伊图和德劳内三角剖分(Delaunay triangulation)是计算几何中的基本结构,通过对偶关系实现了几何和拓扑结构的紧密联系:沃罗诺伊图将平面划分为多个区域,每个区域中的所有点都与某个生成点最近;德劳内三角剖分在平面点集中形成三角形,使得没有点位于任何三角形的外接圆内,避免瘦长三角形。

沃罗诺伊图中的每条边对应于德劳内三角剖分中的一条边。

沃罗诺伊图中的每个顶点对应于德劳内三角剖分中一个三角形的外接圆心。

这种关系在实际应用中非常有用,如城市规划、图像处理和路径规划,为复杂的空间数据处理和优化问题提供了高效的解决方案。

下图展示了一个德劳内三角剖分和沃罗诺伊图的互动模拟界面[4],可以通过点击生成德劳内三角剖分(橙色)和沃罗诺伊图(蓝色)来直观地理解这两种几何结构及其对偶关系:

感兴趣的读者也可以用这段Python代码画一个试试 :)

import numpy as npimport matplotlib.pyplot as pltfrom scipy.spatial import Voronoi, voronoi_plot_2d, Delaunay# 生成随机点np.random.seed(42) # 设置随机种子以确保可重复性points = np.random.rand(20, 2)# 计算Voronoi图vor = Voronoi(points)# 计算Delaunay三角剖分delaunay = Delaunay(points)# 绘制Voronoi图fig, ax = plt.subplots(figsize=(10, 10))voronoi_plot_2d(vor, ax=ax, show_vertices=False, line_colors='orange', line_width=2, line_alpha=0.6, point_size=5)# 绘制Delaunay三角剖分ax.triplot(points[:, 0], points[:, 1], delaunay.simplices, color='blue', linestyle='--', linewidth=1, alpha=0.5)ax.plot(points[:, 0], points[:, 1], 'o', markersize=8, color='black')# 坐标轴展示等细节调整ax.set_title("Fancy Voronoi Diagram and Delaunay Triangulation", fontsize=20, color='purple')ax.set_xticks([]) ax.set_yticks([]) ax.axis('equal')ax.grid(True, linestyle=':', color='gray', alpha=0.5) # 设置背景颜色fig.patch.set_facecolor('lightblue') # 设置图形背景颜色ax.set_facecolor('lavender') # 设置坐标轴背景颜色plt.show()

参考文献:(上下滑动可浏览)

[1] Shumilin, S., Ryabov, A., Burnaev, E., & Vanovskii, V. (2023). A method for auto-differentiation of the Voronoi tessellation. . Retrieved from https://arxiv.org/html/2312.16192v1

[2] Yan, D.-M., Wang, W., Lévy, B., & Liu, Y. (n.d.). Efficient computation of 3D clipped Voronoi diagram. The University of Hong Kong, Pokfulam Road, Hong Kong, China; Project Alice, INRIA, Nancy, France.

[3] American Geographical Society. (n.d.). Map of the week: Voronoi diagrams in geography.https://ubique.americangeo.org/map-of-the-week/map-of-the-week-voronoi-diagrams-in-geography/

[4]https://cartography-playground.gitlab.io/playgrounds/triangulation-delaunay-voronoi-diagram/

来源:DataCafe

编辑:virens

0 阅读:0

撬开科学新世界

简介:感谢大家的关注