2011-06-11 15 views

Respuesta

3

ACTUALIZACIÓN IMPORTANTE el 25 de febrero 2012:

MSF 3.1 ahora es compatible con la optimización no lineal con variables acotadas a través de su NelderMeadSolver solucionador: http://msdn.microsoft.com/en-us/library/hh404037(v=vs.93).aspx

Por restricciones lineales generales, La base de solucionador de Microsoft solo admite programación lineal y programación cuadrática a través de su solucionador de puntos interior. Para este solucionador, consulte la publicación de SVM mencionada por Tomás.

MSF tiene un solucionador de programación no lineal general, Limited-Memory-BFGS, pero que no admite ninguna restricción. Este solucionador también requiere una función de gradiente explícita. Para este programa de solución, por favor ver:

Logistic regression in F# using MSF

F # ODSL mencionado por Tomas sólo es compatible con la programación lineal. Tengo una extensión QP para él, disponible en codexplex.

Volviendo a su pregunta - optimice f (x) con restricciones lineales (similar a fmincon), no he visto ninguna biblioteca libre que tenga esta capacidad. NMath.NET (comercial) parece tener uno. Intenté eso para resolver una optimización altamente no lineal, pero no funciona para mí. Finalmente recurrí a B-LBFGS implementado en DotNumerics.

creo que también puede estar interesado en los siguientes SO pregunta:

Open source alternative to MATLAB's fmincon function?

Las respuestas apuntan a SciPy.​optimize.​cobyla, que parece ser algo similar a fmincon. Pero el mensaje principal es que para su problema específico, tal vez fmincon es demasiado general. Puede usar un solucionador más específico, p. LBFGS o QP. Además, los solucionadores generales a veces no funcionan si su valor inicial no es bueno.

+0

gracias por su respuesta y su blog. Esperaba que MSF pudiera hacer LBFGS contraídos o similares. – ahala

+0

Esta respuesta ya no es precisa. MSF * does * admite programación no lineal restringida. Este tutorial lo demuestra: https://msdn.microsoft.com/en-us/library/gg261758%28v=vs.93%29.aspx?f=255&MSPPError=-2147217396 – kmote

+0

@kmote ¿sabe si MSF dejó de desarrollarse? ? –

3

no tengo mucha experiencia con Microsoft Solver Fundación mí mismo, pero hay un buen artículo que demuestran cómo usarlo de F #:

Para F #, también hay un lenguaje de modelado integrado: esto le permite escribir sus restricciones como expresiones ordinarias F # (envueltas en citas) y el intérprete de este lenguaje llama a Microsoft Solver Foundation con las restricciones apropiadas creadas (¡creo que esto es totalmente increíble!):

2

He transferido recientemente a C# los códigos libres de derivados de Michael Powell COBYLA2 (función objetivo no lineal, restricciones no lineales) y BOBYQA (función objetivo no lineal, límites variables). Cuando el problema de optimización solo contiene límites variables, el algoritmo BOBYQA es sustancialmente más rápido.

Tengo código abierto de ambos códigos; puede encontrarlos en Github: cscobyla y csbobyqa.

Si prefiere un algoritmo derivado, también he implementado un adaptador a IPOPT. Se llama csipopt y se puede obtener de Github también.

No hay ninguna interfaz Fundación Solver desarrollado para cualquiera de estos algoritmos, y no puedo decir lo bien que se comparan con fmincon (no soy un usuario Matlab yo), pero espero que los códigos puede ser de alguna ayuda en su trabajo de optimización.

1

Me doy cuenta de que esta es una pregunta antigua, pero las respuestas aquí son inexactas y/o desactualizadas. Aquí está el tutorial definitivo sobre cómo utilizar el solucionador no lineal restringida en MSSF:

En este ejemplo se utiliza el solucionador no lineal por defecto que se llama el HybridLocalSearchSover.

(Sin embargo, no estoy familiarizado con fmincon, así que no puedo hablar de eso.)

Cuestiones relacionadas