Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu

Odlučil sem sodelovati v tekmovanju in potreboval sem pakete za reševanje optimizacijskih nalog. Izbral sem Google or-tools, ki predstavlja vmesnik za različne reševalce (ali reševalne sisteme?). Vsebuje več orodij za optimizacijo, vendar ustvarjalci trdijo, da podpira več zunanjih paketov, vključno s komercialnimi Gurobi in CPLEX. Vendar smo mi revni ljudje, zato bomo uporabili brezplačne SCIP in GLPK (od domačega razvijalca, mimogrede). Presenetilo me je, da nisem našel nobenih navodil o tem, kako spraviti to čudovito orodje v delu v virtualnem okolju Pythona, bodisi v našem bodisi v angleško govorečem segmentu interneta, zato sem moral malce delati. Za tiste, ki se mudi, preberite takoj tukaj, ostalim pa predlagam, da se seznanijo z mojim dvomljivo kakovostnim pisanjem, ki opisuje peripetije namestitve Googlove programske opreme. Da, takoj sem pozabil povedati, da je bilo vse nameščeno v Manjaro Linuxu.

Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu

Prvi koraci

Vsi trije paketi obstajajo v Pythonovem repozitoriju, zato jih namestimo preko pip.

Vsak od njih ima svoj vmesnik, or-tools pa je bil izbran prav za to, da preizkusimo različne pakete brez bistvenega ponovno pisanja programa, zato je naloga, da or-tools poveže te reševalce in omogoči njihovo zagon preko sebe. In kaj mislite? Or-tools, nameščen preko pip, ne zazna reševalcev, nameščenih preko pip, ti pa njega ne zaznavajo (kdo bi si mislil). Torej, treba bo pregledati, kaj pišejo v dokumenti.
Dokumentaciji piše, da je treba zgraditi iz izvorne kode, da or-tools poveže zunanje pakete. Poskusili smo zgraditi, in nič ne deluje, ker reševalcev, nameščenih preko pip, ne vidimo.
Skladno s tem preproste metode namestitve vseh paketov preko pip ne delujejo, ker or-tools ne črpa reševalcev, reševalci ne nameščajo knjižnic tako, kot želi or-tools, vsi me obremenjujejo z napakami, me imenujejo neumno in se na vse načine smejijo.

Nadalje v dokumentaciji piše, da je treba reševalce zgraditi iz izvorne kode, nato pa iz izvorne kode zgraditi samega or-tools. Rekli so in storili! Namestil sem SCIP, namestil sem GLPK, a se je pojavilo vprašanje, ki ni opisano v dokumentaciji, kako torej namestiti or-tools v virtualnem okolju.

Edina zapisane v dokumentah ukaz make python namesti paket globalno v sistem (presenetljivo, da?).

Vendar mi je uspelo: med inženirskim iskanjem z metodo neskončnih opic sem po naključju vtipkal ukaz make help, in prejel seznam vseh možnosti gradnje or-tools, med katerimi je bila tudi možnost za gradnjo wheel paketa. To je ukaz make python_package, če je kaj (bomo ga še enkrat ponovili na koncu). Torej, čas je, da začnemo graditi in zagnati?

Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu

Iščemo težavo

Nič ne deluje v fazi gradnje or-tools, pritožuje se na slabe knjižnice GLPK.

Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu

Gradnja s SCIP z nastavitvami iz dokumentacije poteka uspešno, vendar or-tools še vedno zavrača delo ob trenutku uvoza.

Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu

Samostično rešitev teh težav nisem našel, zato sem se odpravil na GitHub k razvijalcem, vprašati, zakaj namestitev po njihovih navodilih daje napake nekje znotraj njihove kode.

Namestitev or-tools z SCIP in GLPK v virtualno okolje Python 3.7 na Linuxu
Hmm, hvala za pojasnila

Medtem ko sem čakal na odgovor na GitHubu, sem brskal po internetu v upanju, da bom našel nekaj, kar mi bo pomagalo. In kot ni presenetljivo, sem našel. To je bil blog timlid projekta, kjer je pisal o tem, kako povezati GLPK z or-tools. In ta način je končno deloval! Zdaj, če vse sestavimo brez SCIP, ampak z GLPK, pa lahko s tem celo delamo. Že napredek.

Vendar timlid ekipe or-tools ni priporočal uporabe GLPK, pravi, da rezultati niso zadovoljivi, pa tudi vseeno bi želeli premagati SCIP in ga prisiliti, da deluje. Sosednji objava v blogu me je napotil k misli, da Google-ov paket deluje z določenimi različicami. Oglejmo si seznam sprememb izdaj in vidimo tam jasno navedbo različice 6.0.0. Kljub temu, da je v makefile navedena različica 6.0.2, poskusimo namestiti starejšo različico in voila!

Zdaj pa še enkrat delovni postopek.

Postopek namestitve

  1. Prenesite arhiv SCIP, prepričajte se, da tukaj je jasno navedena podpora za različico, ki jo prenašate (v mojem primeru developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) in ga razpakirajte.
  2. Prenesite GLPK (v trenutku objave je zadnja različica 4.65) in ga razpakirajte.
  3. Namestite SCIP z ukazom
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Namestite GLPK z ukazom:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Prenesite OR-Tools z GitHub-a
    git clone https://github.com/google/or-tools
  6. Namestite OR-Tools z ukazi:
    make third_party
    make python_package
    

    Če zadnja ukaz ne deluje, namestite wheel z ukazom:

    pip install wheel
  7. Aktivirajte virtualno okolje, preidite v mapo s Python paketom in ga namestite od tam.

    Če ga je treba namestiti ne v virtualno okolje, ampak globalno za celotno sistemo, namesto:

    make python_package

    run the command:

    make python
    

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster