2012-04-20 28 views
8

Estoy buscando recomendaciones para bibliotecas C++ para programación no lineal (no solo para enteros!).Biblioteca de programación no lineal en C++

La preferencia es para soluciones F/OSS mantenidas activamente, pero las soluciones comerciales mantenidas activamente que ofrecen versiones de evaluación gratuitas son aceptables.

¡Gracias de antemano!

Editar: a lo solicitado, aquí hay más detalles:

La aplicación que estoy trabajando es simple, y es de minimizar los polinomios de grado 4 y superior (hasta 11) con un pequeño conjunto (~ 20) de restricciones expresadas como desigualdades (de nuevo, como polinomios, grado < = 4). Aunque también podría, de vez en cuando, tener que utilizar alguna función trigonométrica. En cualquier caso, siempre se trata de funciones continuas y diferenciables. El número de rangos variables de 1 a 12, por ahora, y no irá mucho más allá.

Finalmente, necesito una solución que funcione en Windows, pero serían preferibles las multiplataformas.

+0

¿Podría darnos ejemplos de cálculos que desea realizar? ¿En qué campo (finanzas, física?)? En que sistema operativo? (en lugar de * nix o Windows?) –

+0

Mire mi edición – em70

Respuesta

2

NLopt Tiene código C sólida para una buena docena de algoritmos, incluyendo COBYLA, optimización restringida por aproximaciones lineales para la optimización libre de derivado con la desigualdad y la igualdad de las limitaciones no lineales, por M. J. D. Powell.
Agregado: here son ejecuciones de varios de los optimizadores no derivados en NLopt.
Para las funciones de prueba de Rosenbrock y Powell en 5d y 10d, todas son muy sensibles a los puntos de inicio aleatorios; ymmv.

6

No estoy seguro, pero tal vez ROOT de CERN sea adecuado para usted. Esta es realmente una enorme biblioteca (clase ROOT::Math::Polynomial, por ejemplo) del propio CERN.

debo decir, no es un 'uno-minuto-a-aprender' biblioteca de hecho, pero tiene tanto: consola trabajar con toda la materia de matemáticas en tiempo real (se ve similar a la línea cmd Mathcad) y libs y dlls puede vincular su código estáticamente. Y es una biblioteca multiplataforma. Más que decir, la característica más poderosa de la ROOT es que puedes construir casi todo tipo de gráficos y tramas.

+0

¿Podría proporcionar un enlace (en su respuesta) a las clases que realizan programación no lineal? – Ali

4

La biblioteca más robusta que conozco es IPOPT.

Es asombrosamente robusto, me dio resultados para problemas de ingeniería química que no podría resolver incluso con solucionadores comerciales. Mira el success stories para obtener más ejemplos de aplicación.

+0

@Denis No tengo acceso a una Mac, así que no puedo asegurarlo. Sin embargo [estas instrucciones] (https://projects.coin-or.org/Ipopt/wiki/Ipopt_on_Mac_OS_X) parece estar bien mantenido y son del 14 de marzo de 2012. Creo que vale la pena intentarlo. – Ali

Cuestiones relacionadas