我想知道是否有人对最小化函数 f(x,y) 有任何建议,其中 x 和 y 是整数。我研究了很多最小化和优化技术,比如 BFGS 和 GSL 中的其他技术,以及数值食谱中的东西。到目前为止,我已经尝试实施几个不同的方案。第一种方法是选择最大下降的方向 f(x+1,y),f(x-1,y),f(x,y+1),f(x,y-1),然后按照该方向与线最小化。我也尝试过使用下坡单纯形(Nelder-Mead)方法。这两种方法都离最小值很远。它们似乎都适用于更简单的函数,例如找到抛物面的最小值,但我认为两者,尤其是前者,都是为 x 和 y 是实值(双精度值)的函数而设计的。另一个问题是我需要尽可能少地调用 f(x,y) 。它与外部硬件对话,每次通话需要几秒钟。对此的任何想法将不胜感激。
这是错误函数的示例。抱歉,我之前没有发过这个。这个函数需要几秒钟来评估。此外,如果我们从设备查询的信息低于我们的期望值,它不会添加到错误中,只有当它高于
double Error(x,y)
{
SetDeviceParams(x,y);
double a = QueryParamA();
double b = QueryParamB();
double c = QueryParamC();
double _fReturnable = 0;
if(a>=A_desired)
{
_fReturnable+=(A_desired-a)*(A_desired-a);
}
if(b>=B_desired)
{
_fReturnable+=(B_desired-b)*(B_desired-b);
}
if(c>=C_desired)
{
_fReturnable+=(C_desired-c)*(C_desired-c);
}
return Math.sqrt(_fReturnable)
}