Je me demandais si quelqu'un avait des suggestions pour minimiser une fonction, f (x, y), où x et y sont des entiers. J'ai étudié beaucoup de techniques de minimisation et d'optimisation, comme BFGS et d'autres sur GSL, et des choses à partir de recettes numériques. Jusqu'à présent, j'ai essayé d'implémenter quelques schémas différents. Le premier travaille en choisissant la direction de la plus grande descente f (x + 1, y), f (x-1, y), f (x, y + 1), f (x, y-1), et suivez cette direction avec minimisation de ligne. J'ai également essayé d'utiliser une méthode de downhill simplex (Nelder-Mead). Les deux méthodes restent bloquées loin d'un minimum. Ils semblent tous deux travailler sur des fonctions plus simples, comme trouver le minimum d'un paraboloïde, mais je pense que les deux, et surtout le premier, sont conçus pour des fonctions où x et y sont des valeurs réelles (doubles). Un autre problème est que j'ai besoin d'appeler f (x, y) aussi peu de fois que possible. Il parle au matériel externe, et prend quelques secondes pour chaque appel. Toutes les idées pour cela seraient grandement appréciées.Minimisation de f (x, y) où x et y sont des entiers
Voici un exemple de la fonction d'erreur. Désolé, je n'ai pas posté cela avant. Cette fonction prend quelques secondes pour évaluer. En outre, les informations que nous interrogeons de l'appareil ne contribue pas à l'erreur si elle est inférieure à notre valeur souhaitée, que si elle est au-dessus
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)
}
Toutes les idées concernant la classe et le comportement de votre fonction seront également appréciées. – EFraim
Question intéressante. C'est marrant de voir comment les maths commencent à devenir difficiles quand vous avez commencé à apprendre sur les fractions et les nombres réels, et le plus difficile une fois que vous les avez retirés et que vous êtes revenu aux nombres naturels. =) –
Connaissez-vous l'équation pour f (x, y)? – Noldorin