寻找平滑,有界,非凸的2D函数的全局最小值,该最小值估计成本很高


17

我有一个有界的非凸二维函数,我想找到它的最小值。功能相当流畅。评估成本很高。每个轴上可接受的误差约为功能域的3%。

我尝试在NLOPT库中运行DIRECT算法的实现,但是就所需精度所需的功能评估数量而言,它没有在蛮力搜索上带来可观的改进,并且存在一些异常值。

我应该考虑其他哪些全局优化求解器?


您可以计算梯度,还是需要通过差商来近似?
阿诺德·诺伊迈耶

我需要通过差商来近似它们。
维克多

在这种情况下,不建议使用牛顿法,因为数值二阶导数在数值上非常不稳定,并且难以调整以安全地工作。
阿诺德·纽迈耶

@Victor May,您最终得到什么?(如果您可以发布与您的功能类似的功能,那将确实有助于人们比较和调整不同的算法。)
denis 2012年

@Denis,我正在尝试提高跟踪视频中对象的算法的速度。该算法的输出是每个图像位置包含跟踪对象的可能性估计。包含这些似然估计的图像是我试图优化的功能。最后,我在几个解决步骤上都进行了蛮力操作。有关所关注的跟踪算法的更多信息,请阅读论文“使用积分直方图的基于鲁棒碎片的跟踪”。
维克多

Answers:


12

尽管@barron间接讨论了同一件事,但我想提出一种与其他答案相比有所不同的方法。

代替直接优化功能,即通过在(希望)收敛到(局部)最优值的一系列点个点上对其进行评估,可以使用替代建模的概念,即非常适合您所描述类型的问题(高成本,平滑,有界,低维,即少于20个未知数)。X1个X2Xķ替代模型

具体而言,替代模型的工作原理是建立一个模型函数你真正的功能˚F [R d[RC[Rd[RfRdR。关键是,尽管当然不能完美地代表f,但是评估起来便宜得多。cf

因此,典型的优化过程如下:

  1. 在一组j个初始点x 1x 2x j处评估。注意,不需要导数。还应注意,这些点应在整个搜索空间中均匀分布,例如通过拉丁超立方体采样或类似的空间填充设计。fjx1,x2,,xj
  2. 基于此原始数据集,创建模型函数。您可以使用交叉验证来验证模型(即,仅使用原始j点的子集来创建c,然后使用数据集的其余部分检查c预测这些值的程度)cjcc
  3. 使用诸如“预期改进(EI)”标准之类的标准,找出在哪里“填充”更多样本,以通过采样f使更加准确。从理论上讲,这实际上要比看起来好得多,并且EI标准也得到了很好的研究。EI准则也不是一个贪婪的准则,因此您都可以在总体上提高模型的准确性,同时在接近于潜在最佳值的基础上优先考虑准确性。cf
  4. 如果您的模型不够准确,请重复第3步,否则使用您喜欢的优化例程来找到的最优值,这将非常便宜(因此,您可以使用所需的任何例程,即使是需要导数的例程,也可以简单地在细网格中评估函数)。c

总的来说,这就是@barron建议的EGO(高效全局优化)的含义。我想强调一点,对于您的应用程序来说,这似乎非常合适-您可以基于相对较少的评估获得一个出乎意料的准确模型,然后可以使用所需的任何优化算法。通常还有趣的是,您现在可以评估f在网格上 c并将其绘制出来,从而深入了解 f的一般外观。另一个有趣的观点是,大多数替代建模技术还提供了统计误差估计,从而可以进行不确定性估计。cf

如何构造当然是一个悬而未决的问题,但是经常使用Kriging或所谓的空间映射模型。c

当然,这些都是相当多的编码工作,但是许多其他人都做了非常好的实现。在Matlab中,我只知道DACE软件工具箱是免费的。TOMLAB可能还会提供Matlab软件包,但要花钱—但是,我相信它也可以在C ++中工作,并且具有比DACE所拥有的功能更多的功能。(注意:我是即将发布的新版DACE的开发人员之一,它将为EGO提供更多支持。)

希望这个粗略的概述对您有所帮助,请问问题是否可以更清楚地阐明或我遗漏的内容,或者您​​是否希望进一步了解该主题。


Google代理人模型Fwiw带来了根特大学的代理人模型实验室和一本通过代理人模型进行工程设计的书,2008 228p0470770791。任何一种非常通用的方法都存在一个问题,那就是您很快就会拥有一个装满方法变体的厨房水槽,更多比真正的测试功能。
denis 2012年


3

对于平滑函数,“高效全局优化”方法应表现出色,并且比DIRECT效率要高得多。可以在TOMLAB(我自己没有使用过)和DAKOTA(我取得了一些成功)中实现。


1

由于函数是平滑的,因此牛顿法将是找到最小值的最有效的方法。由于该函数不是凸函数,因此您必须应用通常的技巧使牛顿方法收敛(Levenberg-Marquardt修改,线搜索或信任区域进行全球化)。如果无法获得函数的派生,请尝试通过有限差分或使用BFGS更新来计算它。如果您怀疑问题有多个局部最小值,则只需从一堆随机或不太随机选择的点开始牛顿方法,然后查看它们收敛的位置。


我的问题确实有局部最小值。有哪些选择起点的方法?
维克多

1
除非您对此问题有任何了解,否则统计抽样实际上是您的唯一选择。
Wolfgang Bangerth,2012年

@Wolfgang:关于如何进行“统计抽样”的任何想法?只需尝试10、100,...随机初始猜测?是否有“更严格”的方法?我问,因为我有或多或少有类似的问题(见scicomp.stackexchange.com/q/4708/1789
安德烈·

这完全取决于您对该功能的了解。如果您知道函数的“典型长度标度”之类的信息可以指示局部极值将被分开多远。这也将指示您可能必须从多少个点开始,以及它们之间应选择的距离。
Wolfgang Bangerth 2014年

0

由于评估成本很高,因此您需要利用并行运行sevalal函数评估的优势。

我建议您看一下这段代码这里描述后面的数学。


1
这是您编写的代码和文章吗?如果是这样,您能否在回答中明确说出来?另外,现在,您可以通过提供建议的描述来改善答案。
nicoguaro
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.