多面体内最大的圆柱体

计算科学 优化
2021-12-06 13:09:30

想象一下,你有一块木头,你想从那块木头上得到最大的圆柱体。

您如何确定圆柱轴的位置和方向,以使其半径最大化?

我已经研究这个问题一年多了,但我找不到可以在一秒钟内处理 200000 个顶点的有效(或者更确切地说是任何)算法。

我目前的想法很简单:

  1. 切片,
  2. 找到切片的质心
  3. 并使用通过切片质心的最佳拟合线

...但这是考虑多面体的重量分布而不是缸内。

我一直在看 voronoi 图和中轴,以及直骨架。有了这些,我可能会得到一些东西,我可以从中生成一个轴,但我不能完全围绕它。

感谢您对算法的任何帮助或提示或完整描述。

1个回答

听起来您想解决钻石切割问题的变体;您可以尝试搜索该术语并查看您的想法。

决策变量的数量应该相对较少——您需要圆柱体的半径、质心、高度和轴的 3-D 方向(本质上是单位长度的向量)。从那里,您应该能够制定描述构成圆柱体的点的轨迹的方程,并且所有这些都应该在您的可行区域内。如果您可以用方程描述您的可行区域,则此信息应该足以说明您的问题。

在制定问题时,我相信它会是非凸的(如果没有记错的话,我 TAed 的全局优化类中有一个例子),在这种情况下,您需要使用全局优化算法来解决由此产生的优化问题。BARON 通常是首选的求解器,尽管我相信它是封闭源代码并且只有一个 GAMS 接口。您也可以尝试使用 Couenne 或 Bonmin 作为求解器,尽管这些代码不如 BARON 高。