J'ai décidé de participer à 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 , 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.

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 .
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 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 ?

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

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.

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.

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 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 dans son blog, m'a fait penser que le paquet de Google fonctionnait avec des versions spécifiques. Regardons 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
- Télécharger l'archive SCIP, en vous assurant que la prise en charge de la version que vous téléchargez est clairement indiquée (dans mon cas ) et décompresser.
- Télécharger GLPK (à l'heure de ce post, la dernière version est 4.65) et décompresser.
- Installer SCIP avec la commande
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Installer GLPK avec la commande :
. /configure --prefix= --with-pic --enable-shared make make install - Télécharger OR-Tools depuis GitHub
git clone https://github.com/google/or-tools - Installer OR-Tools avec les commandes :
make third_party make python_packageSi la dernière commande ne fonctionne pas, installez wheel avec la commande :
pip install wheel - 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_packageexécutez la commande :
make python
Source : habr.com
