Cómo desarrollar solucionadores para software de optimización matemática, como GAMS y AMPL

  1. Antes de preocuparse por las conexiones al software de modelado, primero desarrolle y pruebe a fondo el solucionador. Asegúrese de que tenga alguna función de canje que haga que un usuario lo prefiera a los solucionadores existentes.
  2. Determine si su solucionador puede actuar como una “caja negra” (el modelo entra, sale la solución) o si algunas características requieren “ganchos” en el software de modelado (a veces llamadas devoluciones de llamada).
  3. Si su solucionador se ajusta a la descripción de la “caja negra”, diríjase a un paquete de modelado a la vez, descubra qué formatos de archivo admiten y cómo se comunican con los solucionadores. Creo que la mayoría de los paquetes de modelado comenzaron con, y probablemente todavía tienen, un mecanismo donde escriben el problema en un archivo (texto o binario) con una convención de nomenclatura específica, invocan al solucionador (presumiblemente pasando el nombre del archivo del modelo y tal vez el nombre espere el archivo de la solución), espere a que termine el proceso del solucionador y luego lea la solución (en un formato especificado por el paquete de modelado) de un archivo que escribe el solucionador.
  4. Si necesitas ganchos, eso es más complicado. Deberá ponerse en contacto con el proveedor del paquete de modelado y ver si tienen una API que expongan a los desarrolladores (o si están dispuestos a trabajar con los desarrolladores para unir el paquete de modelado al solucionador).

AMPL : Para AMPL, hay un método muy bien establecido para conectar un solucionador. Esencialmente implica escribir código que lea la definición del modelo del archivo .nl que genera AMPL, resuelve los problemas y luego genera un archivo .sol que AMPL vuelve a leer. La biblioteca AMPL también proporciona rutinas de diferenciación automática numérica para ayudar en problemas no lineales.
Conectando su solucionador a AMPL

GAMS : No estoy seguro de cuál es el estado actual de las cosas, pero la ruta para conectar un solucionador solía ser a través de GAMSlinks (que parece no mantenerse).
https://projects.coin-or.org/GAM

ps hay un proyecto llamado NLPy que permite escribir rápidamente un “solucionador” en Python (es decir, la biblioteca proporciona funciones para leer archivos .nl y escribir archivos .sol; usted escribe la lógica del solucionador en Python). Lo usé en la escuela de posgrado para manipular modelos AMPL dentro de Python. Parece que no se mantiene activamente, por lo que su kilometraje puede variar.

Github: optimizadores / nlpy
Documentos: documentación de NLPy

Suponiendo que ya conoce la codificación y el desarrollo básico de la GUI, consulte este muy buen libro:

https://www.amazon.com/Model-Bui

O:

https://www.cs.princeton.edu/~rs