Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Elegir el algoritmo

Algoritmos de fmincon

tiene cinco opciones de algoritmo:fmincon

  • predeterminado'interior-point'

  • 'trust-region-reflective'

  • 'sqp'

  • 'sqp-legacy'

  • 'active-set'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • Utilice el algoritmo primero.'interior-point'

    Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

  • Para ejecutar una optimización de nuevo para obtener más velocidad en problemas de tamaño pequeño a mediano, pruebe el siguiente y el último.'sqp''active-set'

  • Use cuando corresponda.'trust-region-reflective' Su problema debe tener: la función objetiva incluye gradiente, sólo los límites, o sólo las restricciones de igualdad lineales (pero no ambos).

Ver.La inexactitud potencial con los algoritmos de punto interior

Razonamiento detrás de las recomendaciones

  • maneja problemas grandes y dispersos, así como pequeños problemas densos.'interior-point' El algoritmo satisface los límites en todas las iteraciones y puede recuperarse o resultados.NaNInf Es un algoritmo a gran escala; Ver.Algoritmos a gran escala frente a mediano escala El algoritmo puede utilizar técnicas especiales para problemas a gran escala. Para obtener más información, consulte en.Interior-Point Algorithmfminconoptions

  • satisface los límites en todas las iteraciones.'sqp' El algoritmo puede recuperarse o resultados.NaNInf No es un algoritmo a gran escala; Ver.Algoritmos a gran escala frente a mediano escala

  • es similar a, pero por lo general es más lento y utiliza más memoria.'sqp-legacy''sqp'

  • puede dar grandes pasos, lo que añade velocidad.'active-set' El algoritmo es eficaz en algunos problemas con restricciones no lisas. No es un algoritmo a gran escala; Ver.Algoritmos a gran escala frente a mediano escala

  • requiere que proporcione un degradado y que solo permita límites o restricciones de igualdad lineales, pero no ambos.'trust-region-reflective' Dentro de estas limitaciones, el algoritmo maneja los problemas grandes dispersos y los pequeños problemas densos eficientemente. Es un algoritmo a gran escala; Ver.Algoritmos a gran escala frente a mediano escala El algoritmo puede utilizar técnicas especiales para ahorrar el uso de memoria, como una función de multiplicar de hessian. Para obtener más información, consulte en.Trust-Region-Reflective Algorithmfminconoptions

Para obtener descripciones de los algoritmos, consulte.Algoritmos de optimización no lineales restringidos

Algoritmos de fsolve

tiene tres algoritmos:fsolve

  • predeterminado'trust-region-dogleg'

  • 'trust-region'

  • 'levenberg-marquardt'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • Utilice el algoritmo primero.'trust-region-dogleg'

    Para obtener ayuda si falla, vea o.fsolveCuando el Solver fallaCuando el solucionador pudo haber tenido éxito

  • Para resolver ecuaciones de nuevo si tienes una función de multiplicación jacobiana, o quieres afinar el algoritmo interno (ver en), prueba.Trust-Region Algorithmfsolveoptions'trust-region'

  • Intente cronometrar todos los algoritmos, incluyendo, para encontrar el algoritmo que funciona mejor en su problema.'levenberg-marquardt'

Razonamiento detrás de las recomendaciones

  • es el único algoritmo que está especialmente diseñado para resolver ecuaciones no lineales.'trust-region-dogleg' Los otros intentan minimizar la suma de los cuadrados de la función.

  • El algoritmo es eficaz en problemas dispersos.'trust-region' Puede utilizar técnicas especiales como una función de multiplicación jacobiana para problemas a gran escala.

Para obtener descripciones de los algoritmos, consulte.Algoritmos de resolución de ecuaciones

Algoritmos fminunc

tiene dos algoritmos:fminunc

  • predeterminado'quasi-newton'

  • 'trust-region'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • Si la función objetiva incluye un degradado, utilice y establezca la opción.'Algorithm' = 'trust-region'SpecifyObjectiveGradienttrue

  • De lo contrario, use.'Algorithm' = 'quasi-newton'

Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

Para obtener descripciones de los algoritmos, consulte.Algoritmos de optimización no lineales no restringidos

Algoritmos de mínimos cuadrados

lsqlin

tiene dos algoritmos:lsqlin

  • , el valor predeterminado'interior-point'

  • 'trust-region-reflective'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • Inténtalo primero.'interior-point'

    Sugerencia

    Para obtener un mejor rendimiento cuando la matriz de entrada tiene una gran fracción de entradas distinto de cero, especifique como una matriz doble ordinaria.CC De forma similar, para obtener un mejor rendimiento cuando tiene relativamente pocas entradas de distinto cero, especifique como disperso.CC Para obtener detalles del tipo de datos, consulte.Matrices dispersas (MATLAB) También puede establecer el tipo de álgebra lineal interna mediante la opción.'LinearSolver'

  • Si no tiene restricciones o solo restricciones enlazadas, y desea una mayor precisión, más velocidad o desea usar un, intente.Función de multiplicación jacobiana con mínimos cuadrados lineales'trust-region-reflective'

Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

Ver.La inexactitud potencial con los algoritmos de punto interior

Para obtener descripciones de los algoritmos, consulte.Algoritmos de mínimos cuadrados (ajuste de modelo)

lsqcurvefit y lsqnonlin

y tienen dos algoritmos:lsqcurvefitlsqnonlin

  • predeterminado'trust-region-reflective'

  • 'levenberg-marquardt'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • En general, pruebe primero.'trust-region-reflective' Si su problema tiene límites, debe usar.'trust-region-reflective'

  • Si el problema no tiene límites y está subdeterminado (menos ecuaciones que dimensiones), utilice.'levenberg-marquardt'

Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

Para obtener descripciones de los algoritmos, consulte.Algoritmos de mínimos cuadrados (ajuste de modelo)

Algoritmos de programación lineal

tiene tres algoritmos:linprog

  • , el valor predeterminado'dual-simplex'

  • 'interior-point-legacy'

  • 'interior-point'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones

Utilice primero el algoritmo o el algoritmo.'dual-simplex''interior-point'

Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

Ver.La inexactitud potencial con los algoritmos de punto interior

Razonamiento detrás de las recomendaciones

  • A menudo, los algoritmos y son rápidos, y utilizan la menor memoria.'dual-simplex''interior-point'

  • El algoritmo es similar, pero puede ser más lento, menos robusto o usar más memoria.'interior-point-legacy''interior-point''interior-point-legacy'

Para obtener descripciones de los algoritmos, consulte.Algoritmos de programación lineal

Algoritmos de programación cuadrática

tiene dos algoritmos:quadprog

  • predeterminado'interior-point-convex'

  • 'trust-region-reflective'

Se usa para establecer la opción en la línea de comandos.optimoptionsAlgorithm

Recomendaciones
  • Si usted tiene un problema convexo, o si usted no sabe si su problema es convexo, utilice.'interior-point-convex'

  • Sugerencia

    Para un mejor rendimiento cuando la matriz de hessian tiene una gran fracción de entradas distinto de cero, especifique como una matriz doble ordinaria.HH De forma similar, para obtener un mejor rendimiento cuando tiene relativamente pocas entradas de distinto cero, especifique como disperso.HH Para obtener detalles del tipo de datos, consulte.Matrices dispersas (MATLAB) También puede establecer el tipo de álgebra lineal interna mediante la opción.'LinearSolver'

  • Si usted tiene un problema no convexo con solamente los límites, o con solamente las equalidades lineales, utilice.'trust-region-reflective'

Para obtener ayuda si la minimización falla, vea o.Cuando el Solver fallaCuando el solucionador pudo haber tenido éxito

Ver.La inexactitud potencial con los algoritmos de punto interior

Para obtener descripciones de los algoritmos, consulte.Algoritmos de programación cuadrática

Algoritmos a gran escala frente a mediano escala

Un algoritmo de optimización es cuando utiliza álgebra lineal que no necesita almacenar, ni operar en, matrices completas.gran escala Esto se puede hacer internamente mediante el almacenamiento de matrices dispersas, y mediante el uso de álgebra lineal disperso para los cálculos siempre que sea posible. Además, los algoritmos internos conservan la dispersión, como una descomposición de Cholesky dispersa, o no generan matrices, como un método de degradado conjugada.

Por el contrario, los métodos crean matrices completas internamente y utilizan álgebra lineal densa.mediana escala Si un problema es suficientemente grande, las matrices completas toman una cantidad significativa de memoria, y el álgebra lineal densa puede requerir mucho tiempo para ejecutarse.

No dejes que el nombre "gran escala" te engañe; puede utilizar un algoritmo a gran escala en un pequeño problema. Además, no es necesario especificar matrices dispersas para utilizar un algoritmo a gran escala. Elija un algoritmo de escala media para acceder a funcionalidad adicional, como tipos de restricción adicionales o, posiblemente, para mejorar el rendimiento.

La inexactitud potencial con los algoritmos de punto interior

Los algoritmos de punto interior en,,, y tienen muchas buenas características, como el uso de memoria baja y la capacidad de resolver problemas grandes rápidamente.fminconquadproglsqlinlinprog Sin embargo, sus soluciones pueden ser ligeramente menos precisas que las de otros algoritmos. La razón de esta posible inexactitud es que la función de barrera (calculada internamente) mantiene los iterados lejos de los límites de restricción de desigualdad.

Para la mayoría de los propósitos prácticos, esta inexactitud suele ser bastante pequeña.

Para reducir la inexactitud, intente:

  • Vuelva a ejecutar el solucionador con tolerancias más pequeñas y posiblemente (pero mantenga las tolerancias sensatas.)StepToleranceOptimalityToleranceConstraintTolerance Véase).Tolerancias y criterios de detención

  • Ejecute un algoritmo diferente, comenzando desde la solución de punto interior. Esto puede fallar, porque algunos algoritmos pueden usar demasiada memoria o tiempo, y todos y algunos algoritmos no aceptan un punto inicial.linprogquadprog

Por ejemplo, intente minimizar la función cuando esté delimitada por debajo de 0.x Usando el algoritmo predeterminado:fminconinterior-point

options = optimoptions(@fmincon,'Algorithm','interior-point','Display','off'); x = fmincon(@(x)x,1,[],[],[],[],0,[],[],options)
x =     2.0000e-08

Usando el algoritmo:fminconsqp

options.Algorithm = 'sqp'; x2 = fmincon(@(x)x,1,[],[],[],[],0,[],[],options)
x2 =     0

Del mismo modo, resuelve el mismo problema usando el algoritmo:linproginterior-point-legacy

opts = optimoptions(@linprog,'Display','off','Algorithm','interior-point-legacy'); x = linprog(1,[],[],[],[],0,[],1,opts)
x =     2.0833e-13

Usando el algoritmo:linprogdual-simplex

opts.Algorithm = 'dual-simplex'; x2 = linprog(1,[],[],[],[],0,[],1,opts)
x2 =       0

En estos casos, los algoritmos de punto interior son menos precisos, pero las respuestas son bastante cercanas a la respuesta correcta.