Me preguntaba si alguien tenía alguna sugerencia para minimizar una función, f (x, y), donde xey son enteros. Investigué muchas técnicas de minimización y optimización, como BFGS y otras de GSL, y cosas de Recetas Numéricas. Hasta ahora, he intentado implementar un par de esquemas diferentes. La primera funciona al elegir la dirección de mayor descenso f (x + 1, y), f (x-1, y), f (x, y + 1), f (x, y-1), y seguir esa dirección con minimización de línea. También he intentado usar un método simplex (Nelder-Mead). Ambos métodos se quedan muy lejos de un mínimo. Ambos parecen trabajar en funciones más simples, como encontrar el mínimo de un paraboloide, pero creo que ambos, y especialmente el primero, están diseñados para funciones donde xey son valores reales (dobles). Un problema más es que necesito llamar a f (x, y) tan pocas veces como sea posible. Habla con hardware externo y toma un par de segundos para cada llamada. Cualquier idea para esto sería muy apreciada.Minimización de f (x, y) donde xey son números enteros
Aquí hay un ejemplo de la función de error. Lo siento, no publiqué esto antes. Esta función toma un par de segundos para evaluar. Además, la información que consulta desde el dispositivo no añade al error si está por debajo de nuestro valor deseado, sólo si está por encima de
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)
}
También se agradecerán todas las ideas sobre la clase y el comportamiento de su función. – EFraim
Pregunta interesante. Es curioso cómo las matemáticas se vuelven difíciles cuando comenzaste a aprender sobre fracciones y números reales, y lo difícil una vez que las quitas y vuelves a los números naturales. =) –
¿Conoces la ecuación para f (x, y)? – Noldorin