Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux

J'ai décidé de participer à une compétition et j'avais besoin d'utiliser des paquets pour résoudre des problèmes d'optimisation. J'ai choisi l'outil or-tools de Google, qui est une interface pour différents solveurs. Il contient plusieurs outils d'optimisation, mais les créateurs déclarent la prise en charge de certains paquets externes, y compris les commerciaux Gurobi et CPLEX. Cependant, nous ne sommes pas riches, et nous utiliserons les gratuits SCIP et GLPK (qui sont développés localement, d'ailleurs). À ma grande surprise, je n'ai trouvé aucune instruction sur comment faire fonctionner tout cela dans un environnement virtuel Python, ni dans notre segment ni dans le segment anglophone d'Internet, et j'ai dû prendre un peu de temps. Pour ceux qui sont pressés, lisez tout de suite ici, les autres peuvent découvrir la qualité discutable de ma graphomanie, décrivant les péripéties de l'installation du logiciel de Google. Oui, j'ai oublié de dire tout de suite que tout a été installé sur Manjaro Linux.

Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux

Premiers pas

Tous les trois paquets existent dans le dépôt Python, donc on les installe via pip.

Chacun d'eux a sa propre interface, et or-tools a été choisi justement pour essayer différents paquets, sans réécrire substantiellement le programme, donc l'objectif est que or-tools connecte ces solveurs et permette de les exécuter via lui-même. Et que pensez-vous ? Or-tools installé via pip ne voit pas les solveurs installés via pip, et eux ne le voient pas (qui l'aurait cru). Donc, il faut jeter un œil à ce que disent les documentation.
Dans la documentation, il est dit qu'il faut compiler à partir des sources pour que or-tools puisse se connecter aux paquets externes. Nous essayons de compiler, mais cela ne fonctionne pas, car les solveurs installés via pip ne sont pas visibles.
Par conséquent, les moyens les plus simples d'installer tous les paquets via pip ne fonctionnent pas, car or-tools ne tire pas les solveurs, et les solveurs n'installent pas les bibliothèques comme or-tools le souhaite, tous vous envoient des erreurs, vous traitent d'idiot et se moquent de vous.

Ensuite, dans la documentation il est dit qu'il faut compiler les solveurs à partir des sources, puis compiler or-tools à partir des sources. Dit et fait ! J'ai installé SCIP, j'ai installé GLPK, mais se pose la question non décrite dans la documentation de comment installer or-tools dans un environnement virtuel.

La seule commande écrite dans la documentation `make python` installe le paquet globalement sur le système (surprenant, n'est-ce pas ?).

Cependant, j'ai eu de la chance : lors de ma recherche d'ingénierie par méthode des singes infinis, j'ai accidentellement tapé la commande `make help`, et j'ai obtenu une liste de toutes les options de compilation d'or-tools, parmi lesquelles se trouvait la possibilité de compiler un paquet wheel. C'est la commande `make python_package`, au fait (je la répéterai encore à la fin). Alors, est-il temps de compiler et de lancer ?

Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux

Cherchons le problème

Rien ne fonctionne lors de la compilation d'or-tools, il se plaint de mauvaises bibliothèques GLPK.

Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux

La compilation avec SCIP avec les paramètres de la documentation se passe bien, mais or-tools refuse toujours de fonctionner lors de l'importation.

Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux

Je n'ai pas trouvé de solution à ces problèmes par moi-même, donc je me suis dirigé vers GitHub pour demander aux développeurs pourquoi l'installation selon leurs instructions générait des erreurs quelque part dans leur code.

Installation d'or-tools avec SCIP et GLPK dans un environnement virtuel Python 3.7 sous Linux
Hmm, merci pour les éclaircissements

En attendant une réponse sur GitHub, je fouillais sur Internet, espérant trouver quelque chose qui pourrait m'aider. Et comme il est surprenant de constater, j'ai trouvé. C'était blog le chef de projet, où il écrivait comment relier GLPK à or-tools. Et cette méthode a enfin fonctionné ! Maintenant, si l'on compile tout sans SCIP, mais avec GLPK, on peut même travailler avec ça. Déjà un progrès.

Cependant, le chef de l'équipe or-tools ne conseillait pas d'utiliser GLPK, disant que les résultats n'étaient pas très bons, et qu'on souhaite tout de même triompher de SCIP et le faire fonctionner. Le voisin post dans son blog, m'a fait penser que le paquet de Google fonctionnait avec des versions spécifiques. Regardons la liste des changements de versions et nous y voyons une indication explicite de la version 6.0.0. Bien qu'il soit mentionné dans le makefile que la version est 6.0.2, nous essayons d'installer une version antérieure et voilà !

Et maintenant, encore une fois, la séquence d'actions qui fonctionne.

Séquence d'installation

  1. Télécharger l'archive SCIP, en vous assurant que ici la prise en charge de la version que vous téléchargez est clairement indiquée (dans mon cas developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) et décompresser.
  2. Télécharger GLPK (à l'heure de ce post, la dernière version est 4.65) et décompresser.
  3. Installer SCIP avec la commande
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Installer GLPK avec la commande :
    . /configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Télécharger OR-Tools depuis GitHub
    git clone https://github.com/google/or-tools
  6. Installer OR-Tools avec les commandes :
    make third_party
    make python_package
    

    Si la dernière commande ne fonctionne pas, installez wheel avec la commande :

    pip install wheel
  7. Activez l'environnement virtuel, accédez au dossier contenant le package Python et installez-le à partir de là.

    S'il est nécessaire d'installer non pas dans un environnement virtuel, mais globalement pour tout le système au lieu de :

    make python_package

    exécutez la commande :

    make python
    

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster