Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe

Rozhodol som sa zúčastniť sa súťaže a potreboval som na to použiť balíky na riešenie optimalizačných úloh. Vybral som si nástroj or-tools od Googlu, ktorý predstavuje rozhranie pre rôznych riešiteľov. Obsahuje niekoľko optimalizačných nástrojov, ale jeho tvorcovia tvrdia, že podporuje aj niekoľko externých balíkov, vrátane komerčných Gurobi a CPLEX. Avšak sme chudobní a použijeme bezplatné SCIP a GLPK (od tuzemského vývojára, mimochodom). Na moje prekvapenie som nenašiel žiadne inštrukcie o tom, ako rozbehnúť toto všetko v virtuálnom prostredí Pythonu, ani v našich, ani v anglicky hovoriacich segmentoch internetu, a tak som musel trocha zápasiť. Pre tých, ktorí veľmi pospíchajú, čítajte hneď tu, ostatným ponúkam spoznať moju grafomániu, popisujúcu peripetie inštalácie googlovského softvéru. Áno, zabudol som povedať, že všetko sa inštalovalo na Manjaro Linuxe.

Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe

Prvé kroky

Všetky tri balíky existujú v repozitári Pythonu, takže ich inštalujeme pomocou pip.

Každý z nich má svoje rozhranie, a or-tools bol vybraný práve na to, aby som mohol skúšať rôzne balíky, bez podstatného prepisovania programu, takže úlohou je, aby or-tools prepojil tieto riešitele a umožnil ich spúšťanie cez seba. A čo si myslíte? Nainštalovaný or-tools cez pip nevidí inštalované riešitele cez pip a oni nevidia jeho (kto by to mohol povedať). Znamená to, že sa musíme pozrieť, čo píšu v dokumenácie.
Dokumentácii píšu, že je potrebné zostaviť z prameňov, aby or-tools prepojil externé balíky. Skúšame zostaviť, a nič sa nedarí, pretože inštalované riešitele cez pip nie sú viditeľné.
Teda najjednoduchšie spôsoby inštalácie všetkých balíkov cez pip nefungujú, pretože or-tools neprepája riešitele, riešitelia nenainštalujú knižnice tak, ako si or-tools želá, všetci hádžu chyby a nazývajú ťa hlupákom a posmievajú sa ti.

Ďalej v dokumentácii píšu, že je potrebné zostaviť riešitele z prameňov, potom z prameňov zostaviť samotný or-tools. Povedané-skonané! Nainštaloval som SCIP, nainštaloval som GLPK, ale objavil sa nepopísaný v dokumentácii problém, ako nainštalovať or-tools do virtuálneho prostredia.

Jediný príkaz zapísaný v dokumentoch make python nainštaluje balík globálne do systému (prekvapujúce, však?).

Mne sa však podarilo: počas inžinierskeho hľadania metódou nekonečných opíc som náhodou zadal príkaz make help a dostal som zoznam všetkých možných zostavení or-tools, medzi ktorými bola aj možnosť zostaviť wheel balík. Je to príkaz make python_package, ak by to niekoho zaujímalo (mám ho na mysli ešte raz na konci). Takže, je čas zostaviť a spustiť?

Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe

Hľadáme problém

Nič nefunguje v etape zostavovania or-tools, sťažuje si na zlé knižnice GLPK.

Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe

Zostavenie so SCIP s parametrami z dokumentácie prebieha úspešne, ale or-tools sa aj tak odmieta spustiť pri importovaní.

Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe

Samostatne som nenašiel riešenie týchto problémov, tak som sa vybral na GitHub za vývojármi, aby som sa opýtal, prečo inštalácia podľa ich pokynov vyvoláva chyby niekde vo vnútri ich kódu.

Inštalácia or-tools s SCIP a GLPK vo virtuálnom prostredí Python 3.7 na Linuxe
Hmmm, ďakujem za vysvetlenia

Kým som čakal na odpoveď na GitHube, prehľadával som internet, v nádeji, že nájdem niečo, čo mi pomôže. A ako to nie je prekvapujúce, našiel som to. Bol to blog teamlead projektu, kde písal o tom, ako prepojiť GLPK s or-tools. A tento spôsob konečne zafungoval! Teraz, ak sa všetko zostaví bez SCIP, ale s GLPK, dá sa s tým aj pracovať. Už pokrok.

Avšak teamlead tímu or-tools neodporúčal používať GLPK, hovoril, že výsledky sú priam zlé a je potrebné poraziť SCIP a donútiť ho, aby fungoval. Susedný príspevok blog ma naviedol na myšlienku, že googlovský balík funguje s konkrétnymi verziami. Pozrieme sa na zoznam zmien vydania a vidíme tam jasné uvedenie verzie 6.0.0. Napriek tomu, že v makefile je uvedená verzia 6.0.2, skúšame nainštalovať staršiu verziu a voila!

A teraz ešte raz pracovný postup.

Postup inštalácie

  1. Stiahnuť archív SCIP, a uistiť sa, že tu je jasne uvedená podpora verzie, ktorú sťahujete (v mojom prípade developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) a rozbaliť.
  2. Stiahnuť GLPK (v čase písania posledná verzia 4.65) a rozbaliť.
  3. Nainštalovať SCIP príkazom
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Nainštalovať GLPK príkazom:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Stiahnuť OR-Tools z GitHubu
    git clone https://github.com/google/or-tools
  6. Nainštalovať OR-Tools príkazmi:
    make third_party
    make python_package
    

    Ak posledný príkaz nefunguje, nainštalujte wheel príkazom:

    pip install wheel
  7. Aktivujte virtuálne prostredie, prejdite do priečinka s Python balíkom a nainštalujte ho odtiaľ.

    Ak potrebujete nainštalovať nie do virtuálneho prostredia, ale globálne pre celý systém, namiesto:

    make python_package

    vykonajte príkaz:

    make python
    

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster