¿Cuántos parámetros hay, por ejemplo, cuántas dimensiones hay en el espacio de búsqueda? ¿Son continuos o discretos, por ejemplo, números reales o enteros, o solo unos pocos valores posibles?
Los enfoques que he visto para este tipo de problemas tienen una estructura general similar: tome una gran cantidad de puntos de muestra y ajústelos a las regiones que tienen "buenas" respuestas de alguna manera. Como tienes muchos puntos, sus diferencias relativas sirven de gradiente improvisado.
- Simulated Annealing: El enfoque clásico. Tome un montón de puntos, de manera probabilística mueva algunos a un punto vecino elegido al azar dependiendo de cuánto mejor sea.
- Particle Swarm Optimization: Tome un "enjambre" de partículas con velocidades en el espacio de búsqueda, de forma probabilística mueva aleatoriamente una partícula; si es una mejora, avísele a todo el enjambre.
- Genetic Algorithms: Esto es un poco diferente. En lugar de utilizar la información de los vecinos como la anterior, se obtienen los mejores resultados cada vez y se "cruzan" con la esperanza de obtener las mejores características de cada uno.
Los enlaces de wikipedia tienen un pseudocódigo para los dos primeros; Los métodos de GA tienen tanta variedad que es difícil enumerar solo un algoritmo, pero puede seguir los enlaces desde allí. Tenga en cuenta que hay implementaciones para todo lo anterior que puede usar o tomar como punto de partida.
Tenga en cuenta que todos estos, y en realidad cualquier enfoque de este algoritmo de búsqueda de grandes dimensiones, son heurísticos, lo que significa que tienen parámetros que deben ajustarse a su problema particular. Lo cual puede ser tedioso
Por cierto, el hecho de que la evaluación de la función sea tan costosa puede funcionar un poco para usted; dado que todos los métodos anteriores implican muchas evaluaciones independientes de funciones, esa parte del algoritmo se puede paralelizar trivialmente con OpenMP o algo similar para hacer uso de tantos núcleos como los que tiene en su máquina.
¿Podría publicar su modelo funcional ?, y si es posible, brinde una pista de lo que está tratando de modelar ... –
@belisarius Los parámetros son factores de ajuste en una IA diseñada para jugar un juego específico. Como, por ejemplo, para ajustar la función que evalúa un "nivel de amenaza" para una ubicación determinada. El paso "evaluar" en mi optimización produce la cantidad de veces que la IA en desarrollo gana frente a un conjunto fijo de otras IA en un conjunto fijo de mapas. (Soy consciente de que esto realmente lo optimiza contra estos oponentes específicos en estos mapas específicos, pero espero que haya muy pocos factores de ajuste para que tenga algún margen para ajustar) –