优化函数以用R找到全局和局部峰值

时间:2010-12-09 12:24:46

标签: optimization r global local

ÿ 我有6个参数,我知道maxi和mini值。我有一个复杂的函数,包括6个参数并返回第7个值(比如Y)。我说复杂因为Y与6个参数没有直接关系;中间有许多嵌入式功能。

  1. 我想找到返回最高Y值的6个参数的组合。我首先尝试通过构建超立方体来计算每个组合的Y,但我的计算机内存不足。所以我正在寻找在分隔参数空间中进展的各种马尔可夫链,并且能够超越局部峰值。
  2. 当我给出6个参数的一个组合时,我想知道最高的局部Y值。我尝试用像马尔科夫那样的迭代链编写代码,但我不确定当链到达参数空间的边缘时如何处理。显然,一些algorythms应该已经存在。
  3. 问题:有人知道R中最好的功能是做这两件事吗?我读到optim()可能适合找到全局峰值,但我不确定它是否可以处理复杂的函数(我更喜欢在参与代码编写的长期(对我来说)之前询问)。当地的山峰? optim()不应该这样做

    事先,谢谢你的任何领导

    来自法国的Julien

2 个答案:

答案 0 :(得分:1)

查看CRAN上的Optimization and Mathematical Programming Task View。我个人发现差分进化算法非常快速和稳健。它在DEoptim包中实现。 rgenoud套餐是另一个很好的候选人。

答案 1 :(得分:0)

我喜欢使用Metropolis-Hastings算法。由于您将每个参数限制在一个范围内,因此最简单的方法是让您的提案分布在范围内简单均匀。这样,你就不会跑掉边缘。它不会很快,但是如果你让它运行得足够长,那么它将很好地对你的空间进行采样。样本将聚集在每个峰值处,并以反映局部曲率的方式在它们周围展开。