¿Alternativa de código abierto a la función fmincon de MATLAB?
-
09-06-2019 - |
Pregunta
¿Existe una alternativa de código abierto a MATLAB? fmincon
función para optimización lineal restringida?Estoy reescribiendo un programa MATLAB para usar Python/ NumPy / ciencia ficción y esta es la única función para la que no he encontrado un equivalente.Una solución basada en NumPy sería ideal, pero cualquier lenguaje servirá.
Solución
¿Tu problema es convexo?¿Lineal?¿No lineal?Estoy de acuerdo en que SciPy.optimize probablemente hará el trabajo, pero fmincon es una especie de bazuca para resolver problemas de optimización, y será mejor si puede limitarlo a una de las categorías siguientes (en niveles crecientes de dificultad para resolver eficientemente)
Programa lineal (LP) Programa cuadrático (QP) Convexo Programa cuadrático cuadrático con restricción cuadrática (QCQP) Programa de cono de segundo orden (SOCP) Programa semidefinito (SDP) Problema convexo no lineal Problema no convexo
También hay problemas combinatorios como los programas lineales enteros mixtos (MILP), pero no mencionaste ningún tipo de restricción de integralidad, basta decir que pertenecen a una clase diferente de problemas.
El paquete CVXOpt le será de gran utilidad si su problema es convexo.
Si su problema no es convexo, debe elegir entre encontrar una solución local o una solución global.Muchos solucionadores convexos "en cierto modo" funcionan en un dominio no convexo.Encontrar una buena aproximación a la solución global requeriría alguna forma 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 and Bound.
Otros consejos
Software de optimización de Python:
AbrirOpt http://openopt.org (Este está basado en numpy como desee, con diferenciación automática mediante FuncDesigner)
Piomo https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
El paquete Python de código abierto,ciencia ficción, tiene un conjunto bastante grande de rutinas de optimización, incluidas algunas para problemas multivariables con restricciones (que es lo que creo en fmincon).Una vez que haya instalado SciPy, escriba lo siguiente en el símbolo del sistema de Python
ayuda (scipy.optimize)
El documento resultante es extenso e incluye lo siguiente que creo que podría resultarle útil.
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
Octava GNU es otro clon de MATLAB que podría tener lo que necesita.
Para la optimización numérica en Python, puede consultar los solucionadores OpenOpt:
Mira esto http://www.aemdesign.com/downloadfsqp.htm.
Allí encontrará el código C que proporciona la misma funcionalidad que fmincon
.(Sin embargo, usando un algoritmo diferente.Puede leer el manual si está interesado en los detalles).
Es de código abierto pero no bajo GPL.
Hay un programa llamado Laboratorio de ciencias ese es un clon de MATLAB.
No lo he usado en absoluto, pero es de código abierto y puede que tenga la función que buscas.
No sé si está ahí, pero hay una distribución de Python llamada Pensado eso podría tener lo que estás buscando.Fue diseñado específicamente para el análisis de datos y tiene más de 60 bibliotecas adicionales.