Restricciones de enteros en optimización basada en problemas no lineales
Para resolver un problema de optimización no lineal con restricciones de enteros mediante el enfoque basado en problemas, lleve a cabo uno de los procedimientos siguientes:
Si cuenta con una licencia de Global Optimization Toolbox, formule el problema como se suele hacer en el enfoque basado en problemas.
ga
(Global Optimization Toolbox) es el solver predeterminado para un problema no lineal con restricciones de enteros. También puede especificarsurrogateopt
(Global Optimization Toolbox) como el solver en el argumentoSolver
desolve
.Use el enfoque basado en solvers con
ga
osurrogateopt
como el solver. El enfoque basado en solvers requiere que modifique la función objetivo y la función de restricción no lineal al cambiar entre estos solvers.Convierta el problema en una estructura utilizando
prob2struct
y, a continuación, use un solver externo.A veces, se puede aproximar de forma iterativa un problema no lineal de enteros utilizando
intlinprog
. Para ver un ejemplo de este enfoque, consulte Mixed-Integer Quadratic Programming Portfolio Optimization: Problem-Based.
Cuando se utiliza un solver externo y se llama a prob2struct
, es posible que necesite especificar el argumento nombre-valor Solver
.
Nota
Para un problema no lineal con restricciones de enteros, si no cuenta con licencia de Global Optimization Toolbox, deberá incluir el argumento Solver
.
Aunque cuente con una licencia de Global Optimization Toolbox, es posible que deba especificar el argumento de par nombre-valor Solver
. Un solver externo puede esperar que la estructura del problema esté en un formato que se corresponda con un solver en particular. Por ejemplo, para un problema con restricciones de enteros y lineales y una función objetivo cuadrática, un solver externo podría requerir que la función objetivo se exprese como matrices H y f en la expresión ½xTHx + fTx. Para obtener estas matrices, especifique el solver 'quadprog'
empleando el argumento nombre-valor Solver
.
problem = prob2struct(prob,"Solver","quadprog");
Si no especifica el solver quadprog
, la estructura del problema resultante puede contener un identificador de función para la función objetivo en lugar de matrices. En ambos casos, la estructura del problema resultante contiene las variables de enteros en el campo intcon
.
Nota
En el caso de un problema no lineal con restricciones de enteros, cuando se especifica un solver que no gestiona restricciones de enteros, prob2struct
envía una advertencia de que el solver no puede resolver la estructura resultante. Si entonces intenta resolver el problema llamando al solver de la estructura del problema, el solver ignora las restricciones de enteros. En este caso, la solución no es la solución al problema original, sino que es la solución al problema sin restricciones de enteros.
Consulte también
prob2struct
| solve
| ga
(Global Optimization Toolbox) | surrogateopt
(Global Optimization Toolbox)