¿Cuáles son algunos consejos para aprender la optimización discreta?

Esto necesariamente no será una respuesta completa.

La optimización discreta más o menos se bifurca en programación de enteros (IP) y programación de restricciones (CP). El MOOC de optimización discreta de modelado se centra principalmente en el último, con una mención muy breve del primero. Puede beneficiarse del aprendizaje continuo de CP, pero definitivamente querrá aprender más sobre IP. La IP tiene una base más matemática que la CP, por lo que deberá comprender el álgebra lineal y la convexidad bastante a fondo antes de profundizar en la IP.

Del mismo modo que se ha investigado considerablemente sobre los solucionadores de CP (especialmente en las limitaciones globales), también se ha investigado mucho sobre los solucionadores de PI Querrá desarrollar familiaridad con al menos uno, incluido cómo usar las API de su lenguaje de programación. Existen bastantes lenguajes de modelado comercial (AMPL, GAMS, MPL, OPL, por nombrar algunos) que son algo similares (pero más avanzados que) al lenguaje MiniZinc. Sin embargo, muchas empresas omiten el modelado de lenguajes y modelan archivos (como los archivos .mzn que vio) a favor de la codificación en un lenguaje de propósito general (C ++, Java, Python, …) mediante el uso de API para una biblioteca comercial de solucionadores. Aquí se pone complicado. Los principales solucionadores comerciales (específicamente CPLEX y Gurobi) tienen versiones académicas gratuitas para el profesorado, que luego pueden ponerlas a disposición de los estudiantes para su uso. Para alguien que estudia solo (no está inscrito en un curso), creo que las versiones completas no están disponibles, pero puede haber una versión para estudiantes de tamaño limitado.

Más allá de aprender las matemáticas de la optimización y convertirse en un programador competente en al menos un lenguaje de propósito general, creo que la mejor manera de aprender IP (y, probablemente, CP) es resolviendo problemas no triviales. Puede buscar algunos artículos de investigación que expliquen los modelos y también que hagan que sus datos estén disponibles, luego intente reproducir lo que hicieron.

También puede tomar algunos problemas de los MOOC y tratar de resolverlos de diferentes maneras. Por ejemplo, creo que hay un problema de “zorro, gallinas, granjero” en el MOOC de optimización discreta de modelado, que se resuelve utilizando un solucionador de restricciones. Puede intentar codificar eso como un programa entero y ver cómo lo hace (tanto en términos de obtener la respuesta correcta como de lograr un tiempo de solución decente).