正如彼得所说,您必须最小化函数f(a,b,c)。对于表现良好的功能,有很多精心设计的方法。例如,对于可以微分的函数,或者对于所谓的凸函数。在您的情况下,您有一个我们不太了解的功能。所以 f 可能有不同的局部最小值,这会扼杀许多已建立的最小化方法。
如果对参数集a,b,c 的简单评估很快,您可以尝试某种坐标下降。这不是最好的方法,蛮力但很容易实现。我将(a,b,c)实现的标准差命名为s(a,b,c):
我给你一些python风格的伪代码,应该很容易阅读:
def improve(a,b,c):
eps = .01
s1 = s(a*(1+eps), b, c)
s2 = s(a, b*(1+eps), b, c)
s3 = s(a, b, c*(1+eps))
s4 = s(a*(1-eps), b, c)
s5 = s(a, b*(1-eps), c)
s6 = s(a, b, c*(1-eps))
# determine minimal of (s1....s6) and take index:
i = argmin (s1....s6)
# take parameters which lead to miminal si:
if i==1:
a = a*(1+eps)
if i==2:
b = b*(1+eps)
...
if i==6:
c = c*(1-eps)
return a,b ,c
你必须从一些值开始(a,b,c),这个函数应该给你一个新的三元组(a,b,c),从而减少变化。现在,您可以根据需要随时应用此步骤。
也许你必须适应eps,这取决于如果你对a、b或c进行少量修改,s(a,b,c)的变化速度。
这不是最好的解决方案,而是一种易于动手尝试的方法。