查找函数最小值点的算法

时间:2015-06-10 18:19:15

标签: algorithm

我想找到试验次数最少的函数的最低值。函数f(x)必须具有最小值的点。给定输入x,我可以计算f(x),但不能计算另一个方向。我没有明确的函数表达式,因此它是一个黑盒子。

我想找到输入x,以最小化f(x),尝试次数最少(一次试用是我选择一个特定的x,并插入来获取输出) 。是否有任何算法可以实现这一目标?

结果并不需要是绝对最小值,因为它来自真正的问题。但它应该低于大多数值。

如果函数被约束为凸,那么有更好的方法来实现吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

假设函数是凸的,并且f(x)的导数对于所有点都存在=>只有一个最小值。我强调导数约束的原因在于,当函数看起来像两个凸函数时,在交点处彼此相邻,导数不存在,但函数仍然是凸的,并且有两个局部最小值。

导数将在最小值的左侧和右侧具有相反的符号(斜率改变方向)您可以看到here的可视化。考虑到这一点,您可以在您的域上进行简单的二进制搜索,以找到满足k的{​​{1}}点,您选择的f'(k-e) * f'(k+e) < 0越小,结果的精确度就越高。在进行搜索时,请e为间隔,[a,b]如果k=(a+b)/2则选择左,否则为正。

f'(k)*f'(a) < 0f(x),再次选择f'(x) = (f(x+e)-f(x))/e,会更精确。{/ p>

答案 1 :(得分:0)

如果函数是随机的,我认为没有办法快速找到最小值,因为如果f(x)可以是任何东西(黑盒子),则无法保证此函数是连续函数。

如果函数是凸的,则可以用抛物线近似。

如果函数是抛物线形状,则可以选择6个随机点并计算其值。每个抛物线可以用6个点表示,这样你就可以对它的函数进行平衡,然后通过推导来计算它的最小值。这只是一个程序,但你可以准备派生ab前面的函数(作为6个变量的函数),所以你只需要7个小数来计算它(取决于f(x)的复杂程度),但我认为这是最快的之一办法。但同样,这只是最低限度的好消息。