Main Content

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 especificar surrogateopt (Global Optimization Toolbox) como el solver en el argumento Solver de solve.

  • Use el enfoque basado en solvers con ga o surrogateopt 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

| | (Global Optimization Toolbox) | (Global Optimization Toolbox)