优化问题。蒙特卡洛随机方法还是另一种?

计算科学 优化 蒙特卡洛
2021-11-29 07:23:14

我有以下问题,有一个目标函数 f() 取决于 7 个变量 x=(x1,x2,...x7),所以 f(x)=f((x1,x2,...x7))我想找到最小化目标函数的变量组合(x* f(x*) 最小)。目标函数的公式未知。问题是对给定点 x f(x) 的目标函数的评估很困难,并且需要运行可能需要时间和计算资源的模拟软件,所以我想对 f() 进行尽可能少的估计. 您认为哪种方法/算法最适合这里?蒙特卡洛随机优化呢?

我将在此处添加有关目标函数的更多详细信息 - 这是一个名为 MIKE11 的模拟软件的结果,该软件模拟河流中的水流。河流的模型是一维的,用户手册说用于水动力部分的方程是圣维南方程。现在目标函数表示河流上某点的最大流量(以立方米/秒为单位)。我想最小化目标函数(所以我想要最大流量值的最小值)。因此,要估计参数 x 向量的目标函数,我必须运行一个 MIKE 模拟。

谢谢

2个回答

您没有提到这一点,但是如果您的功能评估是复杂模拟的结果,那么该模拟是蒙特卡罗模拟还是确定性的?如果模拟是蒙特卡罗模拟,那么您的函数值将是“嘈杂的”,使问题更加复杂。

对于具有少量参数、昂贵的函数评估的问题,特别是如果存在嘈杂的函数值,将代理模型(也称为“响应面”)拟合到函数的方法通常是您最好的选择。然后,您使用传统的最小化算法最小化代理模型。您还可以查看拉丁超立方体采样。

基于梯度的优化非常易于使用(查看梯度下降及其变体)。

牛顿型方法通常具有更快的收敛速度。使用二阶导数(Hesse 矩阵)的近似值会导致准牛顿方法(例如 BFGS)在函数评估的数量方面不一定更昂贵。

你有更多关于你的功能特征的细节吗?例如,在 PDE 优化中,人们经常使用“伴随方法”来计算目标函数的梯度,其代价只是评估原始函数代价的一个常数因子。

如果您有可用的函数的源代码,您可以查看(伴随)算法微分或“自动”微分以计算廉价梯度。

如果您进行最小二乘回归(如机器学习模型),这些通常还使用基于通过伴随模型计算的梯度的最速下降(在机器学习中称为反向传播)。