Odlučil sem sodelovati v 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 , 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.

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 .
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 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?

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

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

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.

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 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 v blogu me je napotil k misli, da Google-ov paket deluje z določenimi različicami. Oglejmo si 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
- Prenesite arhiv SCIP, prepričajte se, da je jasno navedena podpora za različico, ki jo prenašate (v mojem primeru ) in ga razpakirajte.
- Prenesite GLPK (v trenutku objave je zadnja različica 4.65) in ga razpakirajte.
- Namestite SCIP z ukazom
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Namestite GLPK z ukazom:
./configure --prefix= --with-pic --enable-shared make make install - Prenesite OR-Tools z GitHub-a
git clone https://github.com/google/or-tools - Namestite OR-Tools z ukazi:
make third_party make python_packageČe zadnja ukaz ne deluje, namestite wheel z ukazom:
pip install wheel - 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_packagerun the command:
make python
Izvor: habr.com
