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á.

¿Fue útil?

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:

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:

http://openopt.org/NLP

http://openopt.org/Problemas

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top