Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux

Postanowiłem wziąć udział w zawodach i potrzebne mi były pakiety do rozwiązywania problemów optymalizacyjnych. Wybrałem narzędzie Google or-tools, które stanowi interfejs dla różnych rozwiązywaczy. Zawiera kilka narzędzi optymalizacji, a twórcy deklarują wsparcie dla kilku zewnętrznych pakietów, w tym komercyjnych Gurobi i CPLEX. Jednak nie jesteśmy bogatymi ludźmi, więc będziemy korzystać z darmowych SCIP i GLPK (a tak przy okazji, od krajowego dewelopera). Ku mojemu zaskoczeniu nie znalazłem żadnej instrukcji dotyczącej uruchomienia tego całego wspaniałego oprogramowania w wirtualnym środowisku Pythona, ani w polskim, ani anglojęzycznym internecie, więc musiałem trochę się pomęczyć. Dla tych, którzy się spieszą, czytajcie od razu tutaj, innym polecam zapoznać się z nieco wątpliwej jakości moją grafomanią, opisującą perypetie związane z instalacją oprogramowania Google. Tak, zapomniałem od razu powiedzieć, że wszystko instalowałem w Manjaro Linux.

Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux

Pierwsze kroki

Wszystkie trzy pakiety znajdują się w repozytorium Pythona, więc instalujemy je przez pip.

Każdy z nich ma własny interfejs, a or-tools został wybrany właśnie po to, aby próbować różnych pakietów bez znacznego przepisywania programu, więc celem jest to, aby or-tools połączył te rozwiązywacze i umożliwił ich uruchamianie przez siebie. I co myślicie? Zainstalowany przez pip or-tools nie widzi zainstalowanych przez pip rozwiązywaczy, a one nie widzą jego (kto by pomyślał). Oznacza to, że muszę jednak spojrzeć, co piszą w dokumentacji.
Dokumentach piszą, że trzeba zbudować z kodu źródłowego, aby or-tools połączył zewnętrzne pakiety. Próbujemy zbudować, i nic nie wychodzi, ponieważ zainstalowane przez pip rozwiązywacze są niewidoczne.
Z tego względu najprostsze sposoby instalacji wszystkich pakietów przez pip nie działają, ponieważ or-tools nie łapie rozwiązywaczy, a rozwiązywacze nie instalują bibliotek tak, jak tego oczekuje or-tools, wszyscy wysypują na ciebie błędy, nazywają cię głupim i w różny sposób się z ciebie śmieją.

Dalej w dokumentach piszą, że trzeba budować rozwiązywacze z kodu źródłowego, a następnie z kodu źródłowego zbudować sam or-tools. Powiedziano-zrobiono! Zainstalowałem SCIP, zainstalowałem GLPK, ale pojawił się problem, którego nie opisano w dokumentacji, jak zainstalować or-tools w wirtualnym środowisku.

Jedynym poleceniem zapisanym w dokumentacji jest make python, które instaluje pakiet globalnie w systemie (dziwne, prawda?).

Na szczęście udało mi się: w trakcie inżynierskiego poszukiwania metodą nieskończonych małp, przypadkowo wpisałem polecenie make help, które wyświetliło mi listę wszystkich opcji budowy or-tools, w tym możliwość zbudowania pakietu w formacie wheel. To polecenie to make python_package, żeby było jasne (powtórzę je jeszcze raz na końcu). No więc, czy nadszedł czas, aby zacząć budować i uruchamiać?

Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux

Szukamy problemu

Nic nie działa podczas budowy or-tools, zgłasza błędy związane z złymi bibliotekami GLPK.

Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux

Budowa z SCIP z parametrami z dokumentacji przebiega pomyślnie, ale or-tools i tak odmawia działania w momencie importu.

Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux

Nie znalazłem samodzielnie rozwiązania tych problemów, więc udałem się na GitHub do deweloperów, pytając, dlaczego instalacja zgodnie z ich instrukcjami wyświetla błędy gdzieś w ich kodzie.

Instalacja or-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 na Linux
Hmm, dziękuję za wyjaśnienia

Czekając na odpowiedź na GitHubie, przeszukiwałem internet, mając nadzieję znaleźć coś, co mi pomoże. I jak to nie jest zaskakujące, znalazłem to. To był blog lider projektu, który pisał o tym, jak połączyć GLPK z or-tools. I ten sposób w końcu zadziałał! Teraz, jeśli budować wszystko bez SCIP, ale z GLPK, to jest to nawet wykonalne. Już jakiś postęp.

Jednak lider zespołu or-tools nie zalecał używania GLPK, mówiąc, że wyniki są niezbyt dobre, a w końcu chcę pokonać SCIP i zmusić go do działania. Sąsiedni post blog zwrócił mi uwagę na to, że pakiet Google'a działa z konkretnymi wersjami. Sprawdzamy listę zmian wydań i widzimy tam wyraźne wskazanie wersji 6.0.0. Mimo że w pliku makefile jest wskazana wersja 6.0.2, próbujemy zainstalować starszą wersję i voilà!

A teraz jeszcze raz działająca sekwencja działań.

Sekwencja instalacji

  1. Pobierz archiwum SCIP, upewniając się, że tutaj wyraźnie wskazano wsparcie dla tej wersji, którą pobierasz (w moim przypadku developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) i rozpakuj.
  2. Pobierz GLPK (w momencie pisania posta ostatnia wersja to 4.65) i rozpakuj.
  3. Zainstaluj SCIP poleceniem
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Zainstaluj GLPK poleceniem:
    ./configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Pobierz OR-Tools z GitHuba
    git clone https://github.com/google/or-tools
  6. Zainstaluj OR-Tools poleceniami:
    make third_party
    make python_package
    

    Jeśli ostatnia komenda nie działa, zainstaluj wheel poleceniem:

    pip install wheel
  7. Aktywuj wirtualne środowisko, przejdź do folderu z pakietem Pythona i zainstaluj go stamtąd.

    Jeśli chcesz zainstalować go nie w wirtualnym środowisku, a globalnie dla całego systemu, zamiast:

    make python_package

    Wykonaj polecenie:

    make python
    

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster