【发布时间】:2009-07-24 14:36:48
【问题描述】:
我想知道是否有人对最小化函数 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)
}
【问题讨论】:
-
对您的函数的类和行为的任何想法也将不胜感激。
-
有趣的问题。有趣的是,当您开始学习分数和实数时,数学首先变得困难,而一旦您删除这些并回到自然数,数学又变得困难了。 =)
-
你知道 f(x, y) 的方程式吗?
-
这不是一个真正的编程问题。但它比“为什么我的相机不能在我的笔记本电脑上工作?”更有趣。所以我没说什么!
-
当然是编程问题。除非您认为算法不是程序。我,我认为任何不是算法的东西都不是编程问题。例如,我如何用语言 Y 做 X——一个语言问题,而不是编程问题。
标签: c# algorithm numerical-analysis minimization