Domanda

Esiste un'alternativa open source a MATLAB fmincon funzione per l'ottimizzazione lineare vincolata?Sto riscrivendo un programma MATLAB per usare Python / NumPy / SciPy e questa è l'unica funzione a cui non ho trovato un equivalente.Una soluzione basata su NumPy sarebbe l'ideale, ma qualsiasi linguaggio andrà bene.

È stato utile?

Soluzione

Il tuo problema è convesso?Lineare?Non lineare?Sono d'accordo che SciPy.optimize probabilmente farà il lavoro, ma fmincon è una sorta di bazooka per risolvere problemi di ottimizzazione e starai meglio se puoi confinarlo in una delle categorie seguenti (con livello crescente di difficoltà da risolvere in modo efficiente)

Programma lineare (LP) Programma quadratico (QP) Convesso Convesso Concorato Quadraticamente CONSTATICO QCQP (QCQP) Secondo Ordine Programma (SOCP) Programma semidefinite (SDP) Problema convesso non lineare Non-Convex Problema

Esistono anche problemi combinatori come i programmi lineari interi misti (MILP), ma non hai menzionato alcun tipo di vincolo di integralità, basti dire che rientrano in una diversa classe di problemi.

Il pacchetto CVXOpt ti sarà di grande utilità se il tuo problema è convesso.

Se il tuo problema non è convesso, devi scegliere tra trovare una soluzione locale o una soluzione globale.Molti risolutori convessi "in un certo senso" funzionano in un dominio non convesso.Trovare una buona approssimazione alla soluzione globale richiederebbe una qualche forma di ricottura simulata o algoritmo genetico.Trovare la soluzione globale richiederà un'enumerazione di tutte le soluzioni locali o una strategia combinatoria come Branch and Bound.

Altri suggerimenti

Software di ottimizzazione Python:

Il pacchetto Python open source,SciPy, ha un insieme piuttosto ampio di routine di ottimizzazione, incluse alcune per problemi multivariabili con vincoli (che è ciò che credo fmincon).Una volta installato SciPy, digitare quanto segue al prompt dei comandi di Python

aiuto(scipy.optimize)

Il documento risultante è ampio e include quanto segue che ritengo possa esserti utile.

   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

Ottava GNU è un altro clone di MATLAB che potrebbe avere ciò di cui hai bisogno.

Per l'ottimizzazione numerica in Python puoi dare un'occhiata ai solutori OpenOpt:

http://openopt.org/NLP

http://openopt.org/Problems

Dai un'occhiata a http://www.aemdesign.com/downloadfsqp.htm.

Lì troverai il codice C che fornisce le stesse funzionalità di fmincon.(Tuttavia, utilizzando un algoritmo diverso.Puoi leggere il manuale se sei interessato ai dettagli.)

È open source ma non sotto GPL.

C'è un programma chiamato SciLab questo è un clone di MATLAB.

Non l'ho usato affatto, ma è open source e potrebbe avere la funzione che stai cercando.

Non so se è lì, ma c'è una distribuzione Python chiamata Pensato potrebbe avere quello che stai cercando.È stato progettato specificamente per l'analisi dei dati e dispone di oltre 60 librerie aggiuntive.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top