有效的多搜索算法

3
发布问题的原因:我的编程经验介于业余和中等之间(但我现在已经很生疏了)。我可能会使用C++,但我也愿意转换到Python。我有一些基本排序/搜索算法的经验,如二进制、M、A*等。我听说A*可以是一个相当有效的搜索算法,但是当开始需要多个搜索目标时,在A*中会出现一些效率上的大损失,与其他算法相比。我正在研究一个多搜索/优化问题,它具有多维问题空间,因此效率真的开始变得重要。

我看到的大多数多搜索算法都被称为字符串搜索算法。我想询问这些算法在其他类型的问题上工作得如何,或者可能提供其他更有效的算法建议,以适应我提供的情况。我承认我需要做更多的研究来理解优化和多搜索算法之间的区别,但我目前的想法似乎与多搜索算法很好地配合。我正在研究潜在能量表面,并找到局部极小值的粗略近似。

想象一下像山丘一样的东西。现在让我们用一个三维图形来描述物体在任何x和y位置的势能,作为两个位置坐标的函数。我有兴趣在这个表面的定义边界内找到所有局部极小值。我需要算法允许我以一定的分辨率对表面进行采样,然后开始搜索最低点的局部极小值。本质上,我想创建一个低分辨率网格,并使用某种约束广度优先搜索,然后使用另一个智能算法来增加低价值点处的网格分辨率。理想情况下,算法将被多线程使用,但它们需要支持任意维度的PES。我有一个提供潜在能量的黑盒评估函数。以下是2+1维插图。

enter image description here

设想红线是初始采样网格中的1个维度,并且实际上正在靠近局部极小值。然后算法将开始在山谷周围增加网格分辨率几步,然后选择该区域最低点的值。然后它将移动到另一个低点。


我建议使用术语“多维搜索”。如果表面是凸的,那么就会有一个全局最优解,您可以使用简单的爬山算法来找到它,但看起来情况并非如此。如果它很平滑,那么牛顿法将快速找到一个最优解;您可以尝试多次重启以增加找到整体最小值的机会。您始终可以尝试像Nelder-Mead这样的通用搜索方法,但同样不能保证最优性。 - j_random_hacker
1个回答

3
你正在尝试解决一个全局优化问题。 http://en.wikipedia.org/wiki/Global_optimization 是一个很好的参考资料,其中包含了许多用于解决这个问题的方法链接。我之前成功地使用过模拟退火算法,但适合你问题的解决方案将取决于你的问题空间的大小和复杂性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接