2008-09-08 30 views
27

¿Existe una alternativa de código abierto a la función fmincon de MATLAB para la optimización lineal restringida? Estoy reescribiendo un programa MATLAB para usar Python/NumPy/SciPy y esta es la única función que no he encontrado equivalente. Una solución basada en NumPy sería ideal, pero cualquier lenguaje servirá.¿Alternativa de código abierto a la función fmincon de MATLAB?

+0

¿Has probado Jmodelica? Es una implementación de código abierto de Modelica Language además de OpenModelica. Creo que Modelica también tiene envoltorios de Python. El paquete Jmodelica viene con una herramienta de optimización llamada Optimica si no me equivoco. – Foad

Respuesta

26

¿Su problema es convexo? ¿Lineal? No lineal? Estoy de acuerdo en que SciPy.optimize probablemente hará el trabajo, pero fmincon es una especie de bazooka para resolver problemas de optimización, y estarás mejor si puedes limitarlo a una de las siguientes categorías (en un nivel de dificultad creciente para resolverlo). eficientemente)

programa lineal (LP) Programa cuadrática (QP) convexo Programa cuadrática cuadrática con restricciones (QCQP) Segundo Programa Cono Orden (SOCP) Programa semidefinida (SDP) no lineal convexa Problema No- Problema convexo

También hay problemas combinatorios, como los Programas lineales de enteros mixtos (MILP), pero no los hombres cualquier clase de restricciones de integralidad, basta con decir que caen en una clase diferente de problemas.

El paquete CVXOpt te será de gran utilidad si tu problema es convexo.

Si su problema no es convexo, debe elegir entre encontrar una solución local o la solución global. Muchos "solucionadores" convexos funcionan en un dominio no convexo. Encontrar una buena aproximación a la solución global requeriría algún tipo de Recocido Simulado o Algoritmo Genético. Encontrar la solución global requerirá una enumeración de todas las soluciones locales o una estrategia combinatoria como Branch y Bound.

1

Hay un programa llamado SciLab que es un clon de MATLAB.

No lo he usado en absoluto, pero es de código abierto y podría tener la función que está buscando.

0

No sé si está allí, pero hay una distribución de pitón llamada Enthought que podría tener lo que estás buscando. Fue diseñado específicamente para el análisis de datos tiene más de 60 bibliotecas adicionales.

+1

Otras dos personas agregaron enlaces que no estaban seguros de si sus sugerencias tendrían o no lo que quería el póster original. Por qué el down vota Un comentario sería bueno aquí. – wcm

13

El paquete de código abierto Python, SciPy, tiene un conjunto bastante grande de rutinas de optimización, incluidas algunas para problemas multivariables con restricciones (que es lo que fmincon creo). Una vez que tenga instalado SciPy escriba lo siguiente en el símbolo del sistema Python

ayuda (scipy.optimize)

El documento resultante es muy amplia e incluye los siguientes elementos que creo que podría ser de utilidad para usted.

Constrained Optimizers (multivariate) 

    fmin_l_bfgs_b -- Zhu, Byrd, and Nocedal's L-BFGS-B constrained optimizer 
         (if you use this please quote their papers -- see help) 

    fmin_tnc  -- Truncated Newton Code originally written by Stephen Nash and 
         adapted to C by Jean-Sebastien Roy. 

    fmin_cobyla -- Constrained Optimization BY Linear Approximation 
1

Eche un vistazo a http://www.aemdesign.com/downloadfsqp.htm.

Allí encontrará el código C que proporciona la misma funcionalidad que fmincon. (Sin embargo, utilizando un algoritmo diferente. Puede leer el manual si está interesado en los detalles).

Es de código abierto pero no está bajo GPL.

Cuestiones relacionadas