Cómo conectar Mac / Xcode / C ++ con GAMS

En primer lugar, aquí hay algunas observaciones sobre su lista de solucionadores:

  1. Creo que algunos de los solucionadores que ha enumerado son solucionadores solo GAMS (BARON, AlphaBB, ANTIGONE.), Por lo que no podría haberlos llamado con C ++ de todos modos.
  2. Los solucionadores COIN-OR como Couenne aceptan archivos .NL como entradas, y generalmente se los llama desde lenguajes de modelado como AMPL. Se habló de desarrollar un contenedor C ++ para Couenne, pero no creo que haya sucedido.
  3. SCIP y la API Lindo deberían haberse llamado desde C ++, pero tal vez haya algo específico en su configuración de Xcode o su código que requirió ajustes.

Tiene razón en que la mayoría de estos solucionadores tienen interfaces existentes con GAMS. Si no me equivoco, desea saber si puede llamar a estos solucionadores a través de algún tipo de transferencia a través de GAMS sin escribir realmente el modelo en GAMS. Aquí hay algunos comentarios:

  1. Solo usa GAMS . A menos que tenga problemas con GAMS (por ejemplo, límite de 500 var / constr en versión gratuita, sin licencia, su problema es> 100,000 variables que hace que su representación sea ineficiente en cualquier lenguaje de modelado algebraico), le sugiero que escriba su modelo en GAMS y no en C ++ . Tu vida sería mucho más simple.

    Además, GAMS le brinda apalancamiento en forma de facilidades como pre-resolución y diferenciación automática (primera y segunda derivada); esta última es extremadamente importante para resolver los subproblemas de MINLP. Si tuviera que implementarlos en C ++, tendría que conectar una biblioteca AD como CppAd y escribir su propio pre-solucionador.

  2. Escribe un generador de código GAMS . Si realmente quiere usar C ++ para escribir el modelo Y también usa la interfaz de solución de GAMS, puede escribir un “generador de archivos GAMS” que genera un archivo .gms de las estructuras de su modelo C ++. Luego puede ejecutar el archivo .gms en GAMS. Esto no es fácil (debe comprender la sintaxis de GAMS), pero tampoco es tan difícil. Si su problema tiene una estructura especial pero simple (por ejemplo, su restricción no lineal es simplemente la multiplicación de unas pocas matrices grandes), entonces podría ser muy fácil generar un modelo en la sintaxis GAMS.

Finalmente, aquí hay un consejo que puede tomar en serio o ignorar. He tenido muchas Mac en mi vida (desde 1984 Classic hasta MacBook) y las amo, pero realmente debería considerar usar otra arquitectura para el trabajo relacionado con la optimización.

He pasado demasiado tiempo en la escuela de posgrado jugando con códigos de solucionador en Macs para saber que mi tiempo se gasta mejor trabajando en Linux (me sorprendió que la mayoría de los solucionadores compilaran la primera vez en Linux; en Mac, siempre había algo que necesitaba ajustes).

Verá, la mayoría de los códigos numéricos / de código abierto o de optimización académica están / fueron escritos en Linux (ocasionalmente en Windows) y a menudo “simplemente funcionan” en sus plataformas nativas. Es cierto, las Mac son compatibles con POSIX, etc., etc., pero son BSDish y el entorno a menudo es ligeramente diferente del cuadro Linux del desarrollador, por lo que cuando falla su Make, a menudo tiene que dedicar muchas horas en los foros para tratar de descubrir qué salió mal .

En algún momento debe preguntarse: ¿mi objetivo es resolver un problema de programación matemática o luchar con las complejidades de Xcode?

Si me hubiera quedado con la Mac para optimización / trabajo numérico, probablemente no me habría graduado.

PD: puedes ejecutar Linux dentro de una VM en la Mac.