Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu

Rozhodl jsem se zúčastnit se soutěže a potřeboval jsem k tomu použít balíčky pro optimalizační úlohy. Vybral jsem si nástroj or-tools od Googlu, který představuje rozhraní pro různé řešitele. Obsahuje několik optimalizačních nástrojů, ale autoři tvrdí, že podporuje několik externích balíčků, včetně komerčních Gurobi a CPLEX. Nicméně, nejsme bohatí a použijeme bezplatné SCIP a GLPK (mimochodem od domácího vývojáře). K mému překvapení jsem nenašel žádné instrukce, jak to všechno rozběhnout ve virtuálním prostředí Pythonu, a musel jsem si s tím trochu pohrát. Pro ty, kdo spěchají, čtěte rovnou tady, ostatním doporučuji se seznámit s mojí pochybně kvalitní grafomanií, popisující peripetie instalace googlovského softwaru. Ano, zapomněl jsem hned říct, že se vše instalovalo v Manjaro Linuxu.

Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu

První kroky

Všechny tři balíčky existují v repozitáři Pythonu, takže je nainstalujeme přes pip.

Každý z nich má své vlastní rozhraní, a or-tools byl vybrán právě proto, abychom mohli vyzkoušet různé balíčky bez výrazného přepisování programu, takže úkolem je, aby or-tools připojil tyto řešitele a umožnil je spouštět skrze sebe. A co si myslíte? Nainstalovaný or-tools přes pip nevidí nainstalované řešitele přes pip a oni nevidí jeho (kdo by to mohl tušit). Tudíž musíme přece jen kouknout, co píší v dokumentaci.
Dokumentaci píší, že je potřeba sestavit ze zdrojových kódů, aby or-tools připojil externí balíčky. Zkoušíme sestavit, a nic nefunguje, protože nainstalované řešitele přes pip není vidět.
Samozřejmě, nejjednodušší způsoby instalace všech balíčků přes pip nefungují, protože or-tools nepřipojuje řešitele, řešitelé nenainstalují knihovny tak, jak by to or-tools chtěl, všichni házejí chyby, nazývají tě hloupým a všemožně se ti posmívají.

Dále v dokumentaci píšou, že je třeba sestavit řešitele ze zdrojových kódů, a potom sestavit samotný or-tools ze zdrojových kódů. Řečeno–uděláno! Nainstaloval jsem SCIP, nainstaloval jsem GLPK, ale byl zde nepopisovaný v dokumentaci problém, jak vůbec nainstalovat or-tools do virtuálního prostředí.

Jediný příkaz make python uvedený v dokumentech nainstaluje balíček globálně do systému (úžasné, že?).

Měl jsem však štěstí: během svého inženýrského pátrání metodou nekonečných opic jsem náhodou zadal příkaz make help a zobrazil se mi seznam všech variant kompilace or-tools, mezi nimiž byla možnost sestavit balíček wheel. Je to příkaz make python_package, pokud byste to potřebovali (ještě jednou ho zopakuji na konci). Tak co, je čas začít sestavovat a spouštět?

Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu

Hledáme problém

Na etapu sestavení or-tools nic nefunguje, hlásí špatné knihovny GLPK.

Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu

Sestavení přes SCIP podle parametrů v dokumentaci probíhá úspěšně, ale or-tools se přesto vzdorovitě odmítá spustit při importu.

Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu

Nenalezl jsem žádná řešení těchto problémů sám, a tak jsem se vydal na GitHub k vývojářům, abych se zeptal, proč instalace podle jejich pokynů vykazuje chyby někde v jejich kódu.

Instalace or-tools s SCIP a GLPK v virtuálním prostředí Python 3.7 na Linuxu
Hmm, děkuji za vysvětlení

Zatímco jsem čekal na odpověď na GitHubu, prozkoumával jsem internet, v naději, že najdu něco, co mi pomůže. A jak je to překvapivé, našel jsem to. Byl to blog team leader projektu, kde psal o tom, jak spojit GLPK s or-tools. A tento způsob konečně fungoval! Teď, pokud všechno sestavujeme bez SCIP, ale s GLPK, je to dokonce použitelné. Už nějaký pokrok.

Nicméně team leader or-tools nedoporučoval používat GLPK, říkal, že výsledky nejsou moc dobré, a chtělo by to přece porazit SCIP a donutit ho pracovat. Vedlejší příspěvek v blogu mě přivedl na myšlenku, že google balíček funguje s konkrétními verzemi. Podívejme se na seznam změn vydání a vidíme tam jasné označení verze 6.0.0. I když je v makefile uvedena verze 6.0.2, zkoušíme nainstalovat starší verzi a voilà!

A teď ještě jednou pracovní sekvenci akcí.

Sekvence instalace

  1. Stáhněte archiv SCIP, ujistěte se, že tady je jasně uvedena podpora pro verzi, kterou stahujete (v mém případě developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) a rozbalte.
  2. Stáhněte GLPK (v době psaní příspěvku poslední verze 4.65) a rozbalte.
  3. Nainstalujte SCIP příkazem
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Nainstalujte GLPK příkazem:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Stáhněte OR-Tools z GitHubu
    git clone https://github.com/google/or-tools
  6. Nainstalujte OR-Tools příkazy:
    make third_party
    make python_package
    

    Pokud poslední příkaz nefunguje, nainstalujte wheel pomocí příkazu:

    pip install wheel
  7. Aktivujte virtuální prostředí, přejděte do složky s Python balíčkem a nainstalujte jej odsud.

    Pokud chcete nainstalovat ne do virtuálního prostředí, ale globálně pro celý systém místo:

    make python_package

    vězte příkaz:

    make python
    

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster