2013-07-23 33 views
10

首先,让我说我缺乏科学数学或统计方面的经验 - 所以这可能是一个非常着名的问题,但我不知道从哪里开始。使用多个参数最大化函数(python)

我有一个函数f(x1, x2, ..., xn)我需要猜测x'ses并找到f的最高值。该功能具有以下属性:

  • 总数或参数通常在40-60左右,所以蛮力方法是不可能的。

  • 从0.01每个x范围的可能值至2.99

  • 功能是稳定的,这意味着更高的F值意味着对于参数猜测越好,反之亦然。

到目前为止,我实现了在python一个非常基本的方法。它最初将所有参数设置为1,随机猜测新值并检查f是否高于以前。如果不是,则回滚到之前的值。 在一个有10000次迭代的循环中,这似乎在某种程度上起作用,但结果远不是完美的。

有关如何改进搜索最佳参数的任何建议将不胜感激。当用google搜索这个问题时,MCMC出现了,但这似乎是一种非常先进的方法,我需要很多时间才能理解该方法。 基本提示或概念将帮助我更详尽的方法和算法。

+0

欢迎来到SO! 我相信这个问题有一个正式的解决方案,但我的第一个猜测是贪心算法......对于每个'xn',找到最大化'f'的'xn'的值并重复?这取决于'f'的性质。思考? –

+0

你碰巧知道该函数是否有极少数,或者预计会有很多?如果相对较少的最大值,你可以尝试[梯度下降](http://en.wikipedia.org/wiki/Gradient_descent) –

+0

如果你发送一个未知数量的变量给一个函数,我建议将它们存储在数组,列表或字典。可能是你的情况列表。 – Josh

回答

7

不要自己动手。安装SciPy并使用其optimization例程。 scipy.optimize.minimize看起来很合身。

+1

谢谢!我终于有时间尝试一下了,它就像一个魅力。现在我需要反对看看代码的冲动,以了解它是如何工作的:) – David

0

除非你的任务说你不能这样做,否则你总是可以使用一个列表作为一个参数。一个列表会使它更容易。