Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux

Decidí participar en la competencia y necesitaba utilizar paquetes para resolver problemas de optimización. Elegí la herramienta de Google or-tools, que es una interfaz para diferentes solucionadores (¿o resolventes?). Contiene varios herramientas de optimización, pero sus creadores afirman la compatibilidad con varios paquetes externos, incluyendo comerciales como Gurobi y CPLEX. Sin embargo, no somos personas adineradas y utilizaremos los gratuitos SCIP y GLPK (de un desarrollador nacional, por cierto). Para mi sorpresa, no encontré ninguna instrucción sobre cómo hacer que toda esta maravilla funcione en un entorno virtual de Python, ni en el espacio de Internet de nuestro segmento ni en el de habla inglesa, así que tuve que trabajar un poco. Para aquellos que tienen mucha prisa, lean de inmediato aquí, a los demás les ofrezco conocer la desafiante calidad de mi grafomanía, que describe las peripecias de la instalación del software de Google. Sí, me olvidé de decir que se instaló todo en Manjaro Linux.

Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux

Primeros pasos

Los tres paquetes existen en el repositorio de Python, así que los instalamos a través de pip.

Cada uno de ellos tiene su propia interfaz, y or-tools fue elegido precisamente para probar diferentes paquetes sin reescribir sustancialmente el programa, por lo que la tarea es que or-tools conecte estos solucionadores y permita ejecutarlos a través de él. ¿Y qué creen? El or-tools instalado a través de pip no ve a los solucionadores instalados a través de pip, y ellos no lo ven a él (¿quién lo habría pensado?). Así que tenemos que ver qué dicen en la documentación.
La documentación dice que se debe compilar desde el código fuente para que or-tools pueda conectar paquetes externos. Intentamos compilar y no obtenemos resultados, porque no se ven los solucionadores instalados a través de pip.
Por lo tanto, las formas más simples de instalar todos los paquetes a través de pip no funcionan, porque or-tools no detecta a los solucionadores, los solucionadores no instalan bibliotecas como or-tools lo quiere, todos lanzan errores, te llaman tonto y se ríen de ti.

Luego en la documentación dicen que hay que compilar los solucionadores desde el código fuente, luego compilar el propio or-tools desde el código fuente. ¡Dicho y hecho! Instalé SCIP, instalé GLPK, pero surge una pregunta no descrita en la documentación: ¿cómo instalar or-tools en un entorno virtual?

El único comando especificado en la documentación, make python, instala el paquete globalmente en el sistema (¿increíble, verdad?).

Sin embargo, tuve suerte: en el proceso de búsqueda ingenieril, utilizando el método de los monos infinitos, accidentalmente escribí el comando make help y me mostró una lista de todas las opciones de compilación de or-tools, entre las cuales había una posibilidad de compilar el paquete wheel. Esa es la comando make python_package, por cierto (la repetiré al final). Así que, ¿es el momento de compilar y ejecutar?

Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux

Buscando un problema

Nada funciona en la etapa de compilación de or-tools, está quejándose de bibliotecas GLPK defectuosas.

Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux

La compilación con SCIP con los parámetros de la documentación se completa con éxito, pero or-tools se niega a funcionar en el momento de la importación.

Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux

No encontré soluciones a estos problemas por mí mismo, así que me dirigí a GitHub para preguntar a los desarrolladores por qué la instalación según sus instrucciones da errores en su código.

Instalación de or-tools con SCIP y GLPK en un entorno virtual de Python 3.7 en Linux
Hmm, gracias por las aclaraciones

Mientras esperaba una respuesta en GitHub, estuve buscando en internet, con la esperanza de encontrar algo que me ayudara. Y sorprendentemente, encontré algo. Era blog el líder del proyecto, donde escribió sobre cómo vincular GLPK con or-tools. ¡Y este método finalmente funcionó! Ahora, si compilo todo sin SCIP, pero con GLPK, puedo trabajar incluso con eso. Ya hay progreso.

Sin embargo, el líder del equipo de or-tools no aconsejaba usar GLPK, diciendo que los resultados no son muy buenos, y todavía quería vencer a SCIP y hacer que funcionara. Un blog vecino publicación me hizo pensar que el paquete de Google funciona con versiones específicas. Miramos la lista de cambios de lanzamientos y allí vemos una clara indicación de la versión 6.0.0. A pesar de que en el makefile se indica la versión 6.0.2, intentamos instalar una versión anterior y ¡voilà!

Y ahora una vez más, la secuencia de acciones que funciona.

Secuencia de instalación

  1. Descargar el archivo zip de SCIP, asegurándose de que aquí se indica claramente el soporte para la versión que estás descargando (en mi caso developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) y descomprimir.
  2. Descargar GLPK (en el momento de este post, la última versión es 4.65) y descomprimir.
  3. Instalar SCIP con el comando
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Instalar GLPK con el comando:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Descargar OR-Tools desde GitHub
    git clone https://github.com/google/or-tools
  6. Instalar OR-Tools con los comandos:
    make third_party
    make python_package
    

    Si el último comando no funciona, instala wheel con el comando:

    pip install wheel
  7. Activa el entorno virtual, dirige a la carpeta con el paquete de Python y instálalo desde allí.

    Si necesitas instalarlo no en un entorno virtual, sino de manera global para todo el sistema en lugar de:

    make python_package

    ejecute el comando:

    Telegram + 1C + Webhooks + Apache + Certificado autofirmado
    

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster