Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux

Jeg besluttede mig for at deltage i konkurrencen og jeg havde brug for at bruge pakker til at løse optimeringsopgaver. Jeg valgte Googles værktøj or-tools, som fungerer som et interface til forskellige løsere (eller solver?). Det indeholder flere optimeringsværktøjer, men skaberne angiver, at der er support for flere eksterne pakker, inklusive de kommercielle Gurobi og CPLEX. Men vi er ikke rige mennesker, så vi vil bruge de gratis SCIP og GLPK (fra en indenlandsk udvikler, for resten). Til min overraskelse fandt jeg ingen instruktioner om, hvordan man får alt dette til at fungere i et virtuelt Python-miljø, hverken på vores eller på det engelsksprogede internettet, så jeg måtte bøvle lidt. Til dem, der har det meget travlt, læs straks her, resten af jer anbefales at blive bekendt med kvaliteten af min grafo-mani, der beskriver peripetierne ved installationen af Googles software. Ja, jeg glemte straks at nævne, at alt blev installeret på Manjaro Linux.

Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux

First Steps

Alle tre pakker findes i Python-repositoriet, så vi installerer dem via pip.

Hver af dem har sit eget interface, og or-tools blev valgt netop for at kunne eksperimentere med forskellige pakker uden væsentlig omskrivning af programmet, så opgaven er at få or-tools til at tilslutte disse løsere og køre dem gennem sig. Og hvad tror du? Den or-tools, der er installeret via pip, ser ikke de installerte løsere, og de ser ikke ham (hvem kunne have troet det). Så jeg måtte se på, hvad der står i dokumentationen.
Dokumentationen angiver, at man skal kompilere fra kildekoden for at or-tools kan tilslutte de eksterne pakker. Vi prøver at kompilere, men det lykkes ikke, fordi de installerte løsere ikke er synlige.
Derfor fungerer de mest enkle installationsmetoder via pip ikke, fordi or-tools ikke henter løsere, og løsere installerer ikke biblioteker, som or-tools ønsker, alle overbringer dig fejl, kalder dig dum og latterliggør dig på forskellige måder.

I dokumentationen står der at man skal kompilere løsere fra kildekoden og derefter kompilere selve or-tools fra kildekoden. Så blev det gjort! Jeg installerede SCIP, installerede GLPK, men der opstod et ikke-beskrevet spørgsmål i dokumentationen om, hvordan man installerer or-tools i et virtuelt miljø.

Den eneste kommando, der er dokumenteret som make python, installerer pakken globalt på systemet (overraskende, ikke?).

Men jeg var heldig: i løbet af min ingeniørmæssige søgning ved hjælp af de uendelige aber, indtastede jeg ved et tilfælde kommandoen make help, og fik en liste over alle byggemulighederne for or-tools, hvoraf muligheden for at bygge en wheel-pakke var inkluderet. Det er kommandoen make python_package, for dem, der skulle være i tvivl (jeg vil gentage den i slutningen). Så hvad nu, er det tid til at bygge og køre?

Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux

Lad os finde problemet

Intet fungerer på byggefasen af or-tools, det klager over dårlige GLPK-biblioteker.

Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux

Bygningen med SCIP med parametrene fra dokumentationen lykkes, men or-tools nægter stadig at fungere ved import.

Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux

Jeg fandt ikke nogen løsninger på disse problemer, så jeg gik til GitHub og spurgte udviklerne, hvorfor installationen efter deres instruktioner giver fejl et sted i deres kode.

Installation af or-tools med SCIP og GLPK i et virtuelt miljø Python 3.7 på Linux
Hmm, tak for afklaringerne

Mens jeg ventede på svar på GitHub, søgte jeg rundt på internettet i håbet om at finde noget, der kunne hjælpe mig. Og som det ikke skulle være, fandt jeg noget. Det var blog projektlederen, der skrev om, hvordan man forbinder GLPK med or-tools. Og denne metode fungerede endelig! Nu, hvis man bygger alt uden SCIP, men med GLPK, så kan man faktisk arbejde med det. Der er allerede fremskridt.

Men projektlederen fra or-tools anbefalede ikke at bruge GLPK, idet han sagde, at resultaterne ikke er så gode, og at man alligevel ønsker at overvinde SCIP og få det til at fungere. En kollega post i sin blog fik mig til at tænke på, at Googles pakke fungerer med specifikke versioner. Lad os kigge på udgivelsesnoterne og ser der, at version 6.0.0 er tydeligt angivet. På trods af at der i makefilen er angivet version 6.0.2, prøver vi at installere en ældre version, og voilà!

Og nu endnu en gang den fungerende fremgangsmåde.

Installationsrækkefølgen

  1. Download SCIP-arkivet og sikre, at her den version, du downloader, klart understøttes (i mit tilfælde developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) og pak det ud.
  2. Download GLPK (på tidspunktet for indlægget den nyeste version 4.65) og pak det ud.
  3. Installer SCIP med kommandoen
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Installer GLPK med kommandoen:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Download OR-Tools fra GitHub
    git clone https://github.com/google/or-tools
  6. Installer OR-Tools med kommandoerne:
    make third_party
    make python_package
    

    Hvis den sidste kommando ikke virker, installér wheel med kommandoen:

    pip install wheel
  7. Aktiver det virtuelle miljø, gå til mappen med Python-pakken, og installer den derfra.

    Hvis du skal installere det globalt for hele systemet i stedet for:

    make python_package

    execute the command:

    make python
    

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster