Main Content

Algoritmos de optimización basados en problemas

Internamente, la función solve resuelve problemas de optimización llamando a un solver. Para saber cuál es el solver predeterminado para el problema y cuáles son los solvers compatibles para el problema, consulte la función solvers. Puede anular el valor predeterminado utilizando el argumento de par nombre-valor 'solver' al llamar a solve.

Antes de que solve pueda llamar a un solver, los problemas deben convertirse a formato de solver, ya sea mediante solve o a través de algún otro objeto o función asociados. Esta conversión implica, por ejemplo, que las restricciones lineales tengan una representación de matriz en lugar de una expresión de variable de optimización.

El primer paso del algoritmo tiene lugar cuando se colocan expresiones de optimización en el problema. Un objeto OptimizationProblem tiene una lista interna de las variables utilizadas en sus expresiones. Cada variable cuenta con un índice lineal en la expresión y con un tamaño. Por ello, las variables del problema tienen un formato de matriz implícito. La función prob2struct realiza la conversión de formato de problema a formato de solver. Para ver un ejemplo, consulte Convert Problem to Structure.

Para problemas de optimización no lineales, solve utiliza diferenciación automática para calcular los gradientes de la función objetivo y de las funciones de restricción no lineal. Estas derivadas se aplican cuando la función objetivo y la función de restricción están compuestas por Operaciones compatibles con variables y expresiones de optimización. Cuando la diferenciación automática no se aplica, los solvers estiman derivadas utilizando diferencias finitas. Para ver detalles sobre la diferenciación automática, consulte Automatic Differentiation Background. Puede controlar cómo solve usa la diferenciación automática con el argumento nombre-valor ObjectiveDerivative.

Para ver el algoritmo que intlinprog utiliza para resolver problemas MILP, consulte Algoritmo intlinprog. Para ver los algoritmos que linprog utiliza para resolver problemas de programación lineal, consulte Linear Programming Algorithms. Para ver los algoritmos que quadprog utiliza para resolver problemas de programación cuadrática, consulte Quadratic Programming Algorithms. Para ver algoritmos de solver de mínimos cuadrados lineales o no lineales, consulte Algoritmos de mínimos cuadrados (ajuste de modelos). Para ver algoritmos de solver no lineales, consulte Algoritmos de optimización no lineal sin restricciones y Algoritmos de optimización no lineal con restricciones. Para ver los algoritmos de los solvers de Global Optimization Toolbox, consulte la documentación de Global Optimization Toolbox.

Para la resolución de ecuaciones no lineales, solve representa internamente cada ecuación como la diferencia entre el lado izquierdo y el lado derecho. Entonces, solve intenta minimizar la suma de cuadrados de los componentes de la ecuación. Para ver los algoritmos para resolver sistemas de ecuaciones no lineales, consulte Algoritmos de resolución de ecuaciones. Cuando el problema también tiene límites, solve llama a lsqnonlin para minimizar la suma de cuadrados de los componentes de la ecuación. Consulte Algoritmos de mínimos cuadrados (ajuste de modelos).

Nota

Si su función objetivo es una suma de cuadrados y desea que solve la reconozca como tal, escríbala como norm(expr)^2 o sum(expr.^2) y no como expr'*expr o cualquier otro formato. El analizador interno reconoce una suma de cuadrados solo cuando se representa como el cuadrado de una norma o una suma explícita de cuadrados. Para obtener más detalles, consulte Write Objective Function for Problem-Based Least Squares. Para ver un ejemplo, consulte Nonnegative Linear Least Squares, Problem-Based.

Consulte también

| |

Temas relacionados