布伦特';R optim实现中的s方法始终返回相同的局部最小值

布伦特';R optim实现中的s方法始终返回相同的局部最小值,r,optimization,R,Optimization,我试图最小化上面显示的功能。我正在(-1,1)之间搜索。我使用以下代码 optim(runif(1,min=-1,max=+1), ..., method = "Brent", lower = -1.0, upper = 1.0) 我注意到它总是返回一个x=-0.73的值,而不是正确的x=0.88的答案。原因在优化帮助页面中给出: f的第一次计算总是在x_1=a+(1-φ)(b-a),其中(a,b)=(下,上)和φ=(sqrt(5)-1)/2=0.61803。。是黄金分割比率。几乎总是在x_2

我试图最小化上面显示的功能。我正在(-1,1)之间搜索。我使用以下代码

optim(runif(1,min=-1,max=+1), ..., method = "Brent", lower = -1.0, upper = 1.0)
我注意到它总是返回一个x=-0.73的值,而不是正确的x=0.88的答案。原因在
优化
帮助页面中给出:

f的第一次计算总是在x_1=a+(1-φ)(b-a),其中(a,b)=(下,上)和φ=(sqrt(5)-1)/2=0.61803。。是黄金分割比率。几乎总是在x_2=a+phi(b-a)处进行第二次评估。请注意,在[x_1,x_2]内的局部最小值将作为解找到,即使其中f是常数,参见最后一个示例

我很好奇,是否有任何方法可以使用布伦特的方法,而不是每次都达到相同的局部最小值

将方法更改为“L-BFGS-B”效果更好(每次都会返回一个随机的局部最小值):


你的函数不是凸的,因此你会有多个局部/全局极小值或极大值。对于您的函数,我将运行一个非传统/无导数的全局优化器,如模拟退火或遗传算法,并将输出作为BFGS或任何其他局部优化器获得精确解的起点。重复上述步骤多次,您将找到所有全局和局部最优点

你的功能是什么?投票迁移到堆栈溢出(这是一个编程/优化/R问题,而不是统计问题…)Ben Bolker,我仍然认为凸性和优化与纯编程问题之间存在方法论问题。这是一个主动机器学习问题中的效用函数。最小值对应于下一个要获取的最有用样本。函数具有有趣的形状,因为它取决于已经观察到的数据。在这种情况下,将函数翻转到0左右应该可以工作。最好是在最大值/接近最大值处分割区域,并在每个分区中解决最小值问题。更广泛地说,您应该使用更适合问题类型的优化方法。当区间内存在多个局部最优时,Brent不是寻找全局最优的合适选择。因为它是确定性的,它必然总是找到同一个。我相信第一个句子措辞不好——或者你怎么能有多个全局最小值?@ FooBar考虑,例如,(可数无穷多)的全局最大值和$im$$ $SiN$或$\CoS $。
optim(runif(1,min=-1,max=+1), ..., method = "L-BFGS-B", lower = -1.0, upper = 1.0)