Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux

Ik heb besloten deel te nemen aan de wedstrijd en hiervoor had ik pakketten nodig om optimalisatieproblemen op te lossen. Ik koos voor het Google-hulpmiddel or-tools, dat een interface biedt voor verschillende oplosser (of is het solver?). Het bevat verschillende optimalisatietools, maar volgens de ontwikkelaars is er ondersteuning voor verschillende externe pakketten, waaronder de commerciële Gurobi en CPLEX. Echter, we zijn geen rijke mensen, dus we zullen de gratis SCIP en GLPK gebruiken (van een lokale ontwikkelaar, trouwens). Tot mijn grote verbazing vond ik geen enkele instructie over hoe dit prachtige overzicht in een virtuele Python-omgeving aan de praat te krijgen, zowel op onze als op Engelstalige internetruimtes, en ik moest even puzzelen. Voor degenen die heel snel zijn, lees dit meteen here, anderen stel ik voor om kennis te maken met de twijfelachtige kwaliteit van mijn grafomanie, die de peripetiën van de installatie van de Google-software beschrijft. Ja, ik vergat te zeggen dat alles geïnstalleerd werd op Manjaro Linux.

Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux

Eerste stappen

Alle drie de pakketten zijn beschikbaar in de Python-repository, dus we installeren ze via pip.

Elk van hen heeft zijn eigen interface, en or-tools is gekozen juist om verschillende pakketten uit te proberen zonder de programmatuur wezenlijk te herschrijven, dus de taak is om or-tools deze oplosser te laten aankoppelen en ze via zichzelf te laten uitvoeren. En wat denkt u? De via pip geïnstalleerde or-tools ziet de via pip geïnstalleerde oplosser niet, en zij zien or-tools niet (wie had dat kunnen denken). Dus, we moeten toch even kijken naar wat er staat in de documentatie.
In de documentatie staat dat je alles uit de broncode moet opbouwen, zodat or-tools de externe pakketten kan aankoppelen. We proberen te bouwen, maar het lukt niet, omdat de via pip geïnstalleerde oplosser niet zichtbaar is.
Daarom werken de eenvoudigste manieren om alle pakketten via pip te installeren niet, omdat or-tools de oplosser niet oppikt, en de oplosser de bibliotheken niet installeert zoals or-tools dat wil, terwijl alles vol fouten zit, je dom noemt en je op allerlei manieren uitlacht.

Verder in de documentatie staat dat je de oplosser uit de broncode moet opbouwen en vervolgens or-tools uit de broncode moet bouwen. Zeggen, doen! Ik heb SCIP geïnstalleerd, ik heb GLPK geïnstalleerd, maar er rijst een vraag die niet in de documentatie staat: hoe installeer ik or-tools in een virtuele omgeving.

De enige in de documenten beschreven opdracht make python installeert het pakket globaal op het systeem (verbazingwekkend, hè?).

Maar ik had geluk: tijdens mijn zoektocht als ingenieur, door eindeloze apenkoppen, typte ik toevallig de opdracht make help, en kreeg ik een lijst van alle compilatieopties voor or-tools, waaronder de mogelijkheid om een wheel-pakket te bouwen. Dit is de opdracht make python_package, voor het geval dat (ik herhaal het nogmaals aan het einde). Dus wat nu, is het tijd om te bouwen en te draaien?

Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux

Zoeken naar het probleem

Niets werkt tijdens de bouw van or-tools, het klaagt over slechte GLPK-bibliotheken.

Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux

De bouw met SCIP met parameters uit de documentatie verloopt succesvol, maar or-tools weigert nog steeds te werken op het moment van import.

Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux

Ik vond zelf geen oplossingen voor deze problemen, dus ging ik naar GitHub om de ontwikkelaars te vragen waarom de installatie volgens hun instructies fouten geeft ergens in hun code.

Installatie van or-tools met SCIP en GLPK in een virtuele omgeving Python 3.7 op Linux
Hmm, bedankt voor de verduidelijkingen

Terwijl ik op een antwoord op GitHub wachtte, zocht ik op internet in de hoop iets te vinden dat mij zou helpen. En tot mijn verbazing vond ik het. Het was blog de teamleider van het project, waar hij schreef over hoe je GLPK met or-tools kunt koppelen. En deze methode werkte eindelijk! Nu, als je alles zonder SCIP bouwt, maar met GLPK, dan kan je er zelfs mee werken. Al weer vooruitgang.

Maar de teamleider van or-tools adviseerde om GLPK niet te gebruiken, omdat de resultaten niet geweldig zijn, en je wilt uiteindelijk SCIP verslaan en het laten werken. De buurman bericht in de blog inspireerde me met het idee dat het Google-pakket met specifieke versies werkt. Laten we kijken naar de lijst met release-opmerkingen en we zien daar een duidelijke vermelding van versie 6.0.0. Ondanks dat in het makefile versie 6.0.2 staat, proberen we een oudere versie te installeren en voilà!

En nu nogmaals de werkende volgorde van actie.

Installatievolgorde

  1. Download het SCIP-archief en zorg ervoor dat here de ondersteuning voor die versie die je downloadt expliciet is aangegeven (in mijn geval developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) en pak het uit.
  2. Download GLPK (ten tijde van deze post is de laatste versie 4.65) en pak het uit.
  3. Installeer SCIP met de opdracht
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Installeer GLPK met de opdracht:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Download OR-Tools van GitHub
    git clone https://github.com/google/or-tools
  6. Installeer OR-Tools met de opdrachten:
    make third_party
    make python_package
    

    Als het laatste commando niet werkt, installeer dan wheel met het commando:

    pip install wheel
  7. Activeer de virtuele omgeving, ga naar de map met het Python-pakket en installeer het daar.

    Als je het niet in een virtuele omgeving, maar globaal voor het hele systeem wilt installeren in plaats van:

    make python_package

    voer de opdracht uit:

    make python
    

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster