2012-05-16 11 views
9

Busco a un de código abierto implementación de un método de hacer la optimización restringida para la función multivariable no lineal en Java.optimización con restricciones para la función no lineal multivariable en Java

+0

¿Has mirado Apache Commons Math? Parece que recuerdo algunas utilidades de optimización no lineales ... –

+1

¿Podría dar un ejemplo del tipo de problema que está tratando de resolver? –

+0

¿El problema que desea resolver tiene variables discretas o variables continuas? – willem

Respuesta

3

Existen varias implementaciones de Java de código abierto que pueden hacer esto, por ejemplo:

  • OptaPlanner (licencia Apache, 100% Java, un montón de ejemplos y documentación)
  • JACOP
  • choco
  • ...
5

IPOPT es el solucionador más robusto que conozco.

Tiene un Java interface aunque no tengo idea de lo bueno que es, solo uso la API de C++.

+0

Mi experiencia con IPOPT es que es el solucionador de código abierto más eficaz que he usado para problemas convexos grandes y dispersos. Desafortunadamente, la biblioteca no es segura para subprocesos y es propensa a segfault o peor, daña la memoria y causa que la JVM segfault más tarde si haces algo ligeramente incorrecto, que es casi imposible de depurar de Java. Al final, decidí que era mejor aislar cualquier código usando IPOPT en un proceso separado, escrito en C++. – Owen

+0

@Owen Interesante. He utilizado la API de Java de manera muy extensa desde entonces, y funcionó de manera confiable; sin segfaults, sin corrupción de memoria, sin pérdida de memoria. Sin embargo, estoy de acuerdo: si es posible para usted, simplemente colóquelo en un proceso separado y evite por completo las dificultades de interfaz. – Ali

+0

Puede que tengas razón. Terminé rastreando mi corrupción de memoria al hecho de que el finalizador de 'Ipopt' estaba siendo llamado en un hilo diferente (como suelen ser los finalizadores). Entonces, supongo que todo puede volver al hecho de que Ipopt no es seguro para subprocesos, [que está documentado] (https://projects.coin-or.org/Ipopt/ticket/167). – Owen

0

Puede echar un vistazo a Choco, un marco para la programación de restricciones implementado en java.

2

Hace poco porté el optimizador libre de derivadas COBYLA2 de Michael Powells para funciones objetivas no lineales y restricciones para Java. Encontrarás el código fuente here.

Cuestiones relacionadas