Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux

Ich habe beschlossen, am Wettbewerb teilzunehmen und dafür mussten Pakete zur Lösung von Optimierungsaufgaben verwendet werden. Ich wählte das Google-Tool or-tools, das eine Schnittstelle für verschiedene Solver bietet. Es enthält mehrere Optimierungstools, aber die Entwickler geben an, dass mehrere externe Pakete, einschließlich kommerzieller wie Gurobi und CPLEX, unterstützt werden. Allerdings sind wir nicht wohlhabend, und wir werden die kostenlosen SCIP und GLPK verwenden (übrigens von einem inländischen Entwickler). Zu meinem Erstaunen fand ich keine Anleitung, wie man all diese Pracht in einer virtuellen Python-Umgebung zum Laufen bringt, sowohl im russischen als auch im englischsprachigen Internet-Segment, und musste ein wenig herumprobieren. Für die, die es eilig haben, lesen Sie sofort hier, allen anderen empfehle ich, sich mit meiner fragwürdigen Schreiberkunst vertraut zu machen, die die Widrigkeiten der Installation von Google-Software beschreibt. Ja, ich habe ganz vergessen zu erwähnen, dass alles auf Manjaro Linux installiert wurde.

Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux

Die ersten Schritte

Alle drei Pakete existieren im Python-Repository, also installieren wir sie über pip.

Jedes dieser Pakete hat seine eigene Schnittstelle, und or-tools wurde genau dafür ausgewählt, um verschiedene Pakete auszuprobieren, ohne die Anwendung erheblich umzuschreiben. Daher besteht die Aufgabe darin, dass or-tools diese Solver erkennt und sie über sich selbst ausführt. Und was denken Sie? Das über pip installierte or-tools erkennt die über pip installierten Solver nicht, und die wiederum erkennen es nicht (wer hätte das gedacht). Das bedeutet, wir müssen uns doch anschauen, was in den Dokumentation.
Dokumenten steht, wo erwähnt wird, dass man aus den Quellen kompilieren muss, damit or-tools die externen Pakete erkennt. Wir versuchen, es zu kompilieren, und es klappt nicht, weil die über pip installierten Solver nicht sichtbar sind.
Folglich funktionieren die einfachsten Installationsmethoden für alle Pakete über pip nicht, weil or-tools die Solver nicht abruft, die Solver die Bibliotheken nicht so installieren, wie or-tools es möchte, und alle dir Fehler entgegenwerfen, dich dumm nennen und sich auf verschiedene Weise über dich lustig machen.

Weiterhin wird in den Dokumenten gesagt, dass die Solver aus den Quellen kompiliert werden müssen, gefolgt von der Kompilierung von or-tools aus den Quellen selbst. Gesagt, getan! Ich habe SCIP installiert, GLPK installiert, aber es blieb die nicht in der Dokumentation beschriebene Frage, wie man or-tools in einer virtuellen Umgebung installiert.

Der einzige im Dokument vermerkte Befehl make python installiert das Paket global im System (erstaunlich, oder?).

Ich hatte jedoch Glück: Während meiner ingenieurtechnischen Suche durch endlose Versuche tippte ich zufällig den Befehl make help ein, und mir wurde eine Liste aller Build-Optionen für or-tools angezeigt, darunter die Möglichkeit, ein Wheel-Paket zu erstellen. Das ist der Befehl make python_package, nur damit das klar ist (ich wiederhole ihn am Ende noch einmal). Also, ist es Zeit, zu bauen und zu starten?

Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux

Wir suchen nach dem Problem

Nichts funktioniert in der Build-Phase von or-tools, er beschwert sich über schlechte GLPK-Bibliotheken.

Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux

Der Build mit SCIP unter Verwendung der Dokumentationsparameter verläuft erfolgreich, aber or-tools weigert sich trotzdem, beim Import zu arbeiten.

Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux

Ich habe selbst keine Lösungen für diese Probleme gefunden, also wandte ich mich auf GitHub an die Entwickler und fragte, warum die Installation gemäß ihren Anweisungen Fehler in ihrem Code ausgibt.

Installation der or-tools mit SCIP und GLPK in einer virtuellen Umgebung Python 3.7 auf Linux
Hmm, danke für die Erklärungen

Während ich auf eine Antwort auf GitHub wartete, durchforstete ich das Internet in der Hoffnung, etwas zu finden, das mir helfen würde. Und wie es nicht anders zu erwarten war, fand ich etwas. Es war Blogs der Projektleiter, der darüber schrieb, wie man GLPK mit or-tools verbindet. Und dieser Weg hat endlich funktioniert! Nun, wenn man alles ohne SCIP, aber mit GLPK baut, kann man damit sogar arbeiten. Fortschritt.

Der Teamleiter von or-tools riet jedoch davon ab, GLPK zu verwenden, und sagte, dass die Ergebnisse nicht wirklich gut sind, und es wäre schön, SCIP zu besiegen und es zum Laufen zu bringen. Ein benachbarter Post Blog regte mich dazu an, zu überlegen, dass das Google-Paket mit bestimmten Versionen funktioniert. Lass uns anschauen die Änderungsprotokolle der Releases und wir sehen dort einen klaren Hinweis auf die Version 6.0.0. Obwohl im Makefile die Version 6.0.2 angegeben ist, versuchen wir, eine ältere Version zu installieren und voilà!

Und jetzt noch einmal die funktionierende Reihenfolge der Schritte.

Reihenfolge der Installation

  1. Laden Sie das SCIP-Archiv herunter und stellen Sie sicher, dass hier die Unterstützung für die Version, die Sie herunterladen, klar angegeben ist (in meinem Fall developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) und entpacken Sie es.
  2. Laden Sie GLPK herunter (zum Zeitpunkt des Beitrags war die neueste Version 4.65) und entpacken Sie es.
  3. Installieren Sie SCIP mit dem Befehl
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Installieren Sie GLPK mit dem Befehl:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Laden Sie OR-Tools von GitHub herunter
    git clone https://github.com/google/or-tools
  6. Installieren Sie OR-Tools mit den Befehlen:
    make third_party
    make python_package
    

    Wenn der letzte Befehl nicht funktioniert, installieren Sie das Paket wheel mit diesem Befehl:

    pip install wheel
  7. Aktivieren Sie die virtuelle Umgebung, gehen Sie in den Ordner mit dem Python-Paket und installieren Sie es von dort.

    Wenn Sie es nicht in einer virtuellen Umgebung, sondern global für das gesamte System installieren möchten, verwenden Sie stattdessen:

    make python_package

    führen Sie den Befehl aus:

    make python
    

Quelle: habr.com

60GB SSD 8Gb DDR4