Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu

Odlučio sam sudjelovati u natjecanju i trebao mi je alat za rješavanje problema optimizacije. Odabrao sam Googleov alat or-tools, koji predstavlja sučelje za različite rješavače. Sadrži nekoliko alata za optimizaciju, ali stvaraoci navode podršku za nekoliko vanjskih paketa, uključujući komercijalne Gurobi i CPLEX. No, mi nismo bogati ljudi, pa ćemo koristiti besplatne SCIP i GLPK (inače domaći razvijatelj). Na moje iznenađenje, nisam našao nikakve upute o tome kako natjerati svu tu ljepotu da radi u virtualnom okruženju Pythona, ni u našem ni u engleskom segmentu interneta i morao sam se malo potruditi. Za one koji su jako nestrpljivi, čitajte odmah ovdje, ostalima predlažem da upoznaju moju grafomaniju loše kvalitete koja opisuje peripetije instalacije Googleovog softvera. Da, zaboravio sam odmah reći da se sve instaliralo na Manjaro Linuxu.

Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu

Prvi koraci

Sve tri paketa postoje u Python repozitoriju, pa ih instaliramo putem pip.

Svaki od njih ima svoje sučelje, a or-tools je odabran upravo da bi se mogli isprobati različiti paketi bez značajnijeg prepisivanja programa, tako da je zadatak natjerati or-tools da poveže te rješavače i omogući njihovo pokretanje. I što mislite? Instalirani or-tools preko pip-a ne vidi rješavače instalirane putem pip-a, a oni ne vide njega (tko bi to mogao pomisliti). To znači da treba pogledati što piše u dokumentaciju.
Dokumentaciji piše da treba graditi iz izvora, kako bi or-tools povezao vanjske pakete. Pokušavamo sastaviti, i ništa ne ide, jer rješavači instalirani putem pip-a nisu vidljivi.
Prema tome, najjednostavniji načini instalacije svih paketa putem pip-a ne funkcioniraju, jer or-tools ne povlači rješavače, rješavači ne postavljaju biblioteke onako kako to želi or-tools, svi bacaju greške na vas, nazivaju vas glupim i ismijavaju vas.

Dalje u dokumentaciji piše da treba skupiti rješavače iz izvora, a zatim iz izvora skupiti sam or-tools. Rečeno – učinjeno! Instalirao sam SCIP, instalirao sam GLPK, ali se postavlja pitanje koje nije opisano u dokumentaciji kako postaviti or-tools u virtualno okruženje.

Jedina upisana komanda make python instalira paket globalno u sistem (iznenađujuće, zar ne?).

Ipak, imao sam sreće: tokom istraživanja metodom beskrajnih majmuna, slučajno sam otkucao komandu make help, i izlistala mi je sve opcije kompilacije or-tools, među kojima se našla mogućnost izrade wheel paketa. To je komanda make python_package, ako što. Pa, je li došlo vreme za kompilaciju i pokretanje?

Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu

Tražimo problem

Ništa ne radi u fazi kompilacije or-tools, javlja grešku na lošim bibliotekama GLPK.

Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu

Kompilacija sa SCIP s parametrima iz dokumentacije prolazi uspešno, ali or-tools se i dalje odbija pokrenuti u trenutku uvoza.

Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu

Nisam pronašao rešenja za ove probleme sam, pa sam otišao na GitHub da pitam programere zašto instalacija prema njihovim uputstvima stvara greške negde unutar njihovog koda.

Instalacija or-tools s SCIP i GLPK u virtuelno okruženje Python 3.7 na Linuxu
Hmm, hvala na objašnjenju

Dok sam čekao odgovor na GitHubu, pretraživao sam internet, nadajući se da ću pronaći nešto što će mi pomoći. I, kako to čudno zvučalo, pronašao sam. To je bio blog vođa projekta, gde je pisao o tome kako povezati GLPK sa or-tools. I ovaj način konačno je uspeo! Sada, ako sve kompajliramo bez SCIP, ali sa GLPK, onda se to čak može koristiti. Već je napredak.

Međutim, vođa tima or-tools nije savetovao korišćenje GLPK, govoreći da rezultati koje daje nisu sjajni, i želim ipak pobediti SCIP i naterati ga da radi. Susedni post blog me je inspirisao na pomisao da Googleov paket radi sa određenim verzijama. Pogledajmo spisak izmena izdanja i vidimo tamo jasno označenu verziju 6.0.0. Iako je u makefile-u označena verzija 6.0.2, pokušavamo instalirati stariju verziju i voilà!

A sada ponovo radna sekvenca postupaka.

Sekvenca instalacije

  1. Preuzmite arhivu SCIP, osiguravajući da ovdje je jasno označena podrška za verziju koju preuzimate (u mom slučaju developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) i raspakujte.
  2. Preuzmite GLPK (u trenutku pisanja, poslednja verzija 4.65) i raspakujte.
  3. Instalirajte SCIP komandom
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Instalirajte GLPK komandom:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Preuzmite OR-Tools sa GitHub-a
    git clone https://github.com/google/or-tools
  6. Instalirajte OR-Tools komandom:
    make third_party
    make python_package
    

    Ako posljednja komanda ne radi, instalirajte wheel s komandom:

    pip install wheel
  7. Aktivirati virtualno okruženje, otići u mapu s Python paketom i instalirati ga od tamo.

    Ako treba instalirati ne u virtualno okruženje, već globalno za cijeli sustav umjesto:

    make python_package

    izvršite naredbu:

    make python
    

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster