Une alternative libre à la fonction FMINCON de MATLAB?
Est-il une alternative open-source à MATLAB fmincon
fonction pour l'optimisation linéaire contrainte? Je réécris un programme MATLAB pour utiliser Python/ num Py/SciPy et c'est la seule fonction que je n'ai pas trouvé d'équivalent. Une solution basée sur le NumPy serait idéale, mais n'importe quelle langue le fera.
8 réponses
votre problème est-il convexe? Linéaire? Non-linéaire? Je suis d'accord que SciPy.optimize va probablement faire le travail, mais fmincon est une sorte de bazooka pour résoudre les problèmes d'optimisation, et vous serez mieux si vous pouvez le confiner à l'une des catégories ci-dessous (dans le niveau croissant de difficulté à résoudre efficacement)
Programme Linéaire (LP) Programme quadratique (QP) Convex Quadratically-Constrained Quadratical Program (QCQP)) Programme de cônes de deuxième ordre (SOCP)) Programme Semidefinite (SDP) Problème Convexe Non Linéaire Problème Non Convexe
il y a aussi des problèmes combinatoires tels que les programmes linéaires mixtes (MILP), mais vous n'avez mentionné aucune sorte de contraintes d'intégralité, il suffit de dire qu'ils tombent dans une classe différente de problèmes.
le paquet CVXOpt vous sera d'une grande utilité si votre problème est convexe.
si votre problème n'est pas convexe, vous devez choisir entre trouver une solution locale ou la solution globale. Beaucoup de résolveurs convexes "sorte de" travail dans un domaine non convexe. Pour trouver une bonne approximation de la solution globale, il faudrait un procédé de recuit simulé ou un algorithme génétique. Trouver la solution globale exigera une énumération de toutes les solutions locales ou une stratégie combinatoire telle que Branch et Bound.
logiciel d'optimisation Python:
OpenOpthttp://openopt.org(celui-ci est numpy que vous le souhaitez, avec la différentiation automatique par FuncDesigner)
Pyomohttps://software.sandia.gov/trac/coopr/wiki/Package/pyomo
le paquet open source Python,SciPy, a un assez grand ensemble de routines d'optimisation dont certaines pour les problèmes multivariables avec des contraintes (ce que fmincon fait je crois). Une fois que vous avez installé SciPy, tapez ce qui suit à l'invite de commande Python
aide (scipy.optimiser)
le document qui en résulte est exhaustif et comprend les éléments suivants qui, je crois, pourraient vous être utiles.
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
GNU Octave est un autre clone MATLAB qui pourrait avoir ce dont vous avez besoin.
pour l'optimisation numérique en Python, vous pouvez jeter un oeil à OpenOpt solvers:
regardez http://www.aemdesign.com/downloadfsqp.htm.
Vous y trouverez le code C qui fournit les mêmes fonctionnalités que fmincon
. (Cependant, en utilisant un algorithme différent. Vous pouvez lire le manuel si vous êtes intéressé par les détails.)
c'est open source mais pas sous GPL.