在没有明确定义渐变的情况下优化scipy中的函数

时间:2014-11-04 16:00:00

标签: python scipy mathematical-optimization meep

我目前正在尝试使用scipy来优化函数。我对变量有一些限制,从这个链接:http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/optimize.html,看起来SLSQP正是我想要的。在他们的例子中,他们根据输入有一个明确定义的结果公式,他们从中找到了梯度。我有一个非常恶心的计算密集型函数,它计算电磁场如何从金属壁反弹,这绝不能以封闭的形式表达(如果你感兴趣的话,我使用MEEP FDTD Python模拟)。是否有一个等效的函数构建到scipy中,为您找到函数的渐变然后优化?或者,等效地,是否有一个内置到scipy的函数(任何基本的python库都可以),它会为我找到函数的渐变,然后我可以将其传递给这个优化程序?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

由于您无法轻松计算渐变,因此使用无梯度优化算法可能会有所回报。以下是SciPy中可用的一些概述:

http://scipy-lectures.github.io/advanced/mathematical_optimization/#gradient-less-methods

还有盆地跳跃算法,类似于模拟退火,在该页面上没有提到:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.basinhopping.html