or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux

Es nolēmu piedalīties sacensībās un man vajadzēja izmantot pakotnes optimizācijas uzdevumu risināšanai. Izvēlējos Google rīku or-tools, kas ir saskarne dažādiem risinātājiem. Tajā ir vairākas optimizācijas instrumenti, taču radītāji apgalvo, ka tas atbalsta arī dažas ārējās pakotnes, tostarp komerciālās Gurobi un CPLEX. Tomēr mēs neesam bagāti, tādēļ izmantosim bezmaksas SCIP un GLPK (starpcitu, no vietējā izstrādātāja). Manam pārsteigumam es neatradu nevienu instrukciju par to, kā visu šo brīnišķo lietu darbināt Python virtuālajā vidē ne mūsu, ne angliski runājošajās interneta telpās, un nācās nedaudz piepūlēties. Tiem, kas ļoti steidzas, lasiet tūlīt šeit, pārējiem piedāvāju iepazīties ar manas ne pārāk augstās kvalitātes grafomanijas aprakstu par Google programmatūras uzstādīšanas peripetijām. Jā, aizmirsu uzreiz pieminēt, ka viss tika instalēts Manjaro Linux.

or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux

Pirmie soļi

Visas trīs pakotnes pastāv Python repozitorijā, tādēļ instalēsim tās caur pip.

Katram no tiem ir savs saskarsmes veids, un or-tools tika izvēlēts tieši tādēļ, lai izmēģinātu dažādas pakotnes bez ievērojamas programmas pārprogrammēšanas, tāpēc uzdevums ir panākt, lai or-tools piesaistītu šos risinātājus un ļautu tos palaist caur sevi. Un ko jūs domājat? Pip caur or-tools instalētais risinātājs neredz pip caur instalētos risinātājus, un tie neredz viņu (kas gan varētu to padomāt). Tātad, ir jāskatās, ko raksta dokumentācijā.
Dokumentācijā raksta, ka nepieciešams būvēt no avota koda, lai or-tools varētu piesaistīt ārējās pakotnes. Mēģinām būvēt, un nekas nesanāk, jo pip caur instalētie risinātāji nav redzami.
Attiecīgi, visvienkāršākie veidi, kā instalēt visas pakotnes caur pip, nedarbojas, jo or-tools nepiesaista risinātājus, risinātāji neinstalē bibliotēkas tā, kā to vēlas or-tools, visi bagātīgi noraksta tevi ar kļūdām, saucot par muļķi un visādi izsmiekli.

Tālāk dokumentācijā raksta, ka nepieciešams būvēt risinātājus no avota koda, tad būvēt arī or-tools no avota koda. Teikts - darīts! Instalēju SCIP, instalēju GLPK, bet radās jautājums, kas nav aprakstīts dokumentācijā - kā uzstādīt or-tools virtuālajā vidē. Viņi saka, ka jāizveido risinātāji no avota kodiem, tad no avota kodiem jāsavāc pats or-tools. Teikts - izdarīts! Uzstādīju SCIP, uzstādīju GLPK, bet radās neaprakstīts dokumentācijā jautājums, kā uzstādīt or-tools virtuālajā vidē.

Vienīgā komandā, kas norādīta dokumentos, make python instalē pakotni globāli sistēmā (neticami, vai ne?).

Tomēr man paveicās: meklējot risinājumus ar bezgalīgo pērtiķu metodi, es nejauši ievadīju komandu make help, un man tika parādīts visu or-tools salikšanas variantu saraksts, tostarp iespēja izveidot wheel pakotni. Tas ir make python_package, ja kaut kas (es to atkārtošu vēlreiz beigās). Nu tad, vai ir pienācis laiks salikt un palaist?

or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux

Meklējam problēmu

Nekas nedarbojas or-tools salikšanas posmā, tas sūdzas par sliktām GLPK bibliotēkām.

or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux

Salikšana ar SCIP saskaņā ar dokumentācijas parametriem norit veiksmīgi, bet or-tools joprojām atsakās darboties importēšanas brīdī.

or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux

Es neatradu risinājumus šīm problēmām pats, tāpēc devos uz GitHub pie izstrādātājiem, jautājot, kāpēc instalācija pēc viņu norādījumiem rada kļūdas viņu kodā.

or-tools uzstādīšana ar SCIP un GLPK Python 3.7 virtuālajā vidē Linux
Hmmm, paldies par skaidrojumiem

Kamēr gaidīju atbildi uz GitHub, es klīdu pa internetu, cerot atrast kaut ko, kas man palīdzētu. Un kā tas nebūtu pārsteidzoši, es atradu. Tas bija blogā projekta komandas vadītājs, kurš rakstīja par to, kā sasaistīt GLPK ar or-tools. Un šī metode beidzot nostrādāja! Tagad, ja saliek visu bez SCIP, bet ar GLPK, tad ar to pat var strādāt. Jau progress.

Tomēr or-tools komandas vadītājs neieteica izmantot GLPK, sakot, ka rezultāti nav īpaši labi, un tomēr gribas uzvarēt SCIP un likt tam darboties. Blakus ziņa blogs lika padomāt, ka Google pakotne strādā ar konkrētām versijām. Apskatām izmaiņu sarakstu versijās un redzam tur skaidru versijas 6.0.0 norādi. Neskatoties uz to, ka make failā norādīta versija 6.0.2, mēģinām instalēt vecāku versiju un voilà!

Un tagad vēlreiz darbību secība.

Instalēšanas secība

  1. Lejupielādējiet SCIP arhīvu, pārliecinoties, ka šeit ir skaidri norādīta atbalstītā versija, kuru jūs lejupielādējat (manā gadījumā developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) un izpakojiet.
  2. Lejupielādējiet GLPK (raksta laikā jaunākā versija 4.65) un izpakojiet.
  3. Instalējiet SCIP ar komandu
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Instalējiet GLPK ar komandu:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Lejupielādējiet OR-Tools no GitHub
    git clone https://github.com/google/or-tools
  6. Instalējiet OR-Tools ar komandām:
    make third_party
    make python_package
    

    Ja, ja pēdējā komanda nedarbojas, uzstādiet wheel ar komandu:

    pip install wheel
  7. Aktivizējiet virtuālo vidi, pārejiet uz mapi ar Python pakotni un instalējiet to no turienes.

    Ja nepieciešams instalēt ne virtuālajā vidē, bet globāli visai sistēmai, vietā:

    make python_package

    izpilda komandu:

    make python
    

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster