Ich habe beschlossen, an teilzunehmen und benötigte dafür Pakete zur Lösung von Optimierungsproblemen. Ich wählte das Google-Tool or-tools, das eine Schnittstelle für verschiedene Solver bietet. Es enthält mehrere Optimierungstools, aber die Entwickler behaupten, dass es mehrere externe Pakete, einschließlich der kommerziellen Gurobi und CPLEX, unterstützt. Da wir nicht wohlhabend sind, verwenden wir die kostenlosen SCIP und GLPK (übrigens von einem heimischen Entwickler). Zu meiner Überraschung fand ich keine einzige Anleitung, wie man all dieses fantastische Zeug in einer virtuellen Python-Umgebung zum Laufen bringt, weder in unserem noch im englischsprachigen Internetsegment, und ich musste etwas herumprobieren. Für diejenigen, die es sehr eilig haben, lesen Sie sofort , den anderen empfehle ich, sich mit meiner fragwürdigen Graphomanie vertraut zu machen, die die Schwierigkeiten bei der Installation der Google-Software beschreibt. Ich habe vergessen zu erwähnen, dass alles unter Manjaro Linux installiert wurde.

Erste Schritte
Alle drei Pakete sind im Python-Repository verfügbar, deshalb installieren wir sie über pip.
Jeder von ihnen hat seine eigene Schnittstelle, und or-tools wurde genau dafür ausgewählt, um verschiedene Pakete auszuprobieren, ohne die Programme wesentlich umschreiben zu müssen. Daher besteht die Aufgabe darin, dass or-tools diese Solver integriert und sie über sich selbst ausführt. Und was denkt ihr? Das über pip installierte or-tools erkennt die über pip installierten Solver nicht, und die erkennen es auch nicht (wer hätte das gedacht). Also müssen wir wirklich schauen, was in den .
Dokumentationen steht. Dort wird gesagt, dass man aus dem Quellcode bauen 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.
Daher funktionieren die einfachsten Installationsmethoden für alle Pakete über pip nicht, weil or-tools die Solver nicht anzieht. Die Solver installieren die Bibliotheken nicht so, wie es or-tools möchte, was zu vielen Fehlern führt, und man wird als dumm beschimpft und ausgelacht.
Weiter in den steht, dass man die Solver aus dem Quellcode kompilieren muss, und dann or-tools selbst aus dem Quellcode bauen muss. Gesagt, getan! Ich habe SCIP installiert, GLPK installiert, aber es gibt ein nicht in der Dokumentation beschriebenes Problem: Wie installiert man or-tools in einer virtuellen Umgebung.
Der einzige im Dokument vermerkte Befehl make python installiert das Paket global auf dem System (überraschend, oder?).
Ich hatte jedoch Glück: Während meiner ingenieurtechnischen Suche durch endlose Affen hatte ich zufällig den Befehl make help eingegeben, und es zeigte mir eine Liste aller Build-Optionen für or-tools an, darunter die Möglichkeit, das Wheel-Paket zu erstellen. Das ist der Befehl make python_package, nur zur Info (ich werde ihn am Ende noch einmal wiederholen). Also, ist es an der Zeit, zu bauen und zu starten?

Wir suchen nach dem Problem
Nichts funktioniert während des Builds von or-tools, er beschwert sich über fehlerhafte GLPK-Bibliotheken.

Der Build mit SCIP mit Parametern aus der Dokumentation wird erfolgreich abgeschlossen, aber or-tools weigert sich dennoch, beim Import zu arbeiten.

Ich fand selbst keine Lösungen für diese Probleme, also ging ich zu GitHub zu den Entwicklern, um zu fragen, warum die Installation gemäß ihrer Anleitung Fehler ausgibt, irgendwo in ihrem Code.

Hmm, danke für die Erklärungen
Während ich auf eine Antwort auf GitHub wartete, surfte ich im Internet und hoffte, etwas zu finden, das mir hilft. Und wie erstaunlich es ist, fand ich etwas. Es war Teamleiter des Projekts, der darüber schrieb, wie man GLPK mit or-tools verbindet. Und dieser Weg hat endlich funktioniert! Jetzt, wenn man alles ohne SCIP, aber mit GLPK zusammenstellt, kann man damit sogar arbeiten. Es gibt bereits Fortschritte.
Der Teamleiter des or-tools-Teams riet jedoch davon ab, GLPK zu verwenden, da die Ergebnisse nicht überzeugend sind und man doch SCIP besiegen und zum Laufen bringen möchte. Der benachbarte Blog hat mich auf den Gedanken gebracht, dass das Google-Paket mit bestimmten Versionen arbeitet. Lassen Sie uns 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 Arbeitsabläufe.
Installationsablauf
- Laden Sie das SCIP-Archiv herunter und stellen Sie sicher, dass die Unterstützung für die Version, die Sie herunterladen, eindeutig angegeben ist (in meinem Fall ) und entpacken Sie es.
- Laden Sie GLPK (zum Zeitpunkt des Beitrags die letzte Version 4.65) herunter und entpacken Sie es.
- Installieren Sie SCIP mit dem Befehl
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Installieren Sie GLPK mit dem Befehl:
./configure --prefix= --with-pic --enable-shared make make install - Lade OR-Tools von GitHub herunter
git clone https://github.com/google/or-tools - Installiere OR-Tools mit den folgenden Befehlen:
make third_party make python_packageWenn der letzte Befehl nicht funktioniert, installiere das Wheel mit dem Befehl:
pip install wheel - Aktiviere die virtuelle Umgebung, gehe in den Ordner mit dem Python-Paket und installiere es von dort.
Falls du nicht in einer virtuellen Umgebung, sondern global für das gesamte System installieren möchtest, anstatt:
make python_packageführen Sie den Befehl aus:
make python
Quelle: habr.com
