我有一个关于我应该使用哪种优化功能的基本问题。我有:
我的系统模型实现为python函数。这个 函数采用一维数组并输出一维数 数组,也需要一些参数(通常小于 10)。
具有未知输入的该函数的噪声样本输出 参数。
每个参数的下限和上限。
我想要的是什么:
一个优化例程,它允许我抛出所有上述内容并获得最佳拟合函数参数。
我想将该功能视为一个黑盒子,所以不要假设它是连续的。
我对scipy.optimize.curve_fit
函数运气不错,但它似乎很容易受到初始猜测的偏差。 curve_fit
也没有让我提供输入的界限,我认为这将极大地简化问题。这是我与curve_fit一起使用的代码:
import numpy as np
from scipy import optimize
def model(x, c, d):
res = np.sqrt((d/2.0)**2 - (x-c)**2) + (d/2.0)
res[np.isnan(res)] = 0
return res
x = np.arange(-1000, 1000, 200)
y = model(x, 0, 250)
y_noise = y + np.random.rand(len(y)) * 20 - 10
popt, pcov = optimize.curve_fit(model, x, y_noise, (50, 200))
上面的代码返回(50,200)作为优化参数,这是错误的。如果我将初始猜测从(50,200)更改为(49,200),那么它返回的优化参数是(1.84747802,247.18634951),这足够接近(0,250)的真实性
在线研究似乎表明RBF或最小二乘可以帮助我。但是我无法将问题视为“最小化”。
上面用正确的函数调用我的模型的一个例子将非常感激,因为一般指针可以帮助我更多阅读。
提前致谢。