Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux

Postanowiłem wziąć udział w konkurs i konieczne było użycie pakietów do rozwiązywania problemów optymalizacyjnych. Wybrałem narzędzie Google or-tools, które jest interfejsem dla różnych solverów (czy solverów? solverów?). Zawiera ono kilka narzędzi optymalizacyjnych, ale twórcy deklarują wsparcie dla kilku zewnętrznych pakietów, w tym komercyjnych Gurobi i CPLEX. Nie jesteśmy jednak bogaci i będziemy korzystać z darmowych SCIP i GLPK (od rodzimego programisty, nawiasem mówiąc). Ku mojemu zaskoczeniu, nie znalazłem ani jednej instrukcji, jak sprawić, by całe to cudo działało w wirtualnym środowisku Pythona, w ogromie zarówno naszego, jak i anglojęzycznego segmentu Internetu, i musiałem trochę pomajstrować. Dla tych, którzy się spieszą, przeczytajcie od razu. tutajReszcie z was radzę przeczytać moje wątpliwe bazgroły opisujące tajniki instalacji oprogramowania Google. Aha, i zapomniałem wspomnieć, że wszystko zostało zainstalowane na Manjaro. Linux.

Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux

Pierwsze kroki

Wszystkie trzy pakiety znajdują się w repozytorium Pythona, dlatego instalujemy je za pomocą pip.

Każdy z nich ma swój własny interfejs, a or-tools został wybrany właśnie po to, by testować różne pakiety bez znaczącego przepisywania programu. Zadaniem or-tools jest więc podpięcie tych solverów i umożliwienie im uruchomienia się. A co o tym sądzicie? Zainstalowany przez pip, or-tools nie widzi solverów zainstalowanych przez pip, a same ich nie widzą (kto by pomyślał). Musimy więc jeszcze przyjrzeć się temu, co piszą w… dokumentacja.
W dokumentacji napisano, że należy kompilować ze źródeł, aby or-tools mógł wykrywać pakiety zewnętrzne. Próbujemy kompilować, ale nic nie działa, ponieważ solvery zainstalowane przez pip nie są widoczne.
W związku z tym najprostsze sposoby instalacji wszystkich pakietów za pomocą pip nie działają, ponieważ or-tools nie uruchamia programów do rozwiązywania problemów, programy do rozwiązywania problemów nie instalują bibliotek w sposób, w jaki chce tego or-tools, wszyscy zgłaszają ci błędy, nazywają cię głupim i śmieją się z ciebie na wszystkie możliwe sposoby.

Dalej w doki Piszą, że trzeba skompilować solvery ze źródeł, a następnie skompilować sam or-tools ze źródeł. Szybko powiedziane, szybko zrobione! Zainstalowałem SCIP, zainstalowałem GLPK, ale pojawiło się pytanie, którego nie opisano w dokumentacji: jak zainstalować or-tools w środowisku wirtualnym.

Jedynym poleceniem wymienionym w dokumentacji jest make python, które instaluje pakiet globalnie w systemie (zaskakujące, prawda?).

Miałem jednak szczęście: w trakcie poszukiwań inżynieryjnych metodą nieskończonych małp przypadkowo wpisałem polecenie make help, które wyświetliło mi listę wszystkich opcji kompilacji or-tools, w tym możliwość kompilacji pakietu wheel. To jest polecenie make python_package, nawiasem mówiąc (powtórzę je na końcu). Czy zatem czas na kompilację i uruchomienie?

Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux

Szukam problemu

Na etapie kompilacji or-tools nic nie działa, pojawia się komunikat o błędnych bibliotekach GLPK.

Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux

Kompilacja przy użyciu SCIP z parametrami z dokumentacji powiodła się, ale or-tools nadal odmawia współpracy w chwili importu.

Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux

Nie udało mi się samodzielnie znaleźć rozwiązania tych problemów, więc zwróciłem się do deweloperów na GitHub z pytaniem, dlaczego instalacja zgodnie z ich instrukcjami powoduje błędy gdzieś w ich kodzie.

Instalowanie narzędzi OR-tools z SCIP i GLPK w wirtualnym środowisku Python 3.7 Linux
Hmm, dziękuję za wyjaśnienie.

Czekając na odpowiedź na GitHubie, surfowałem po internecie, mając nadzieję znaleźć coś, co mi pomoże. I ku mojemu zaskoczeniu, znalazłem to. blog Lider zespołu projektowego, gdzie pisał o tym, jak połączyć GLPK z or-tools. I ta metoda w końcu zadziałała! Teraz, jeśli zbierzesz wszystko bez SCIP, ale z GLPK, możesz nawet z tym pracować. To już postęp.

Lider zespołu or-tools nie zalecił jednak korzystania z GLPK, twierdząc, że wyniki, jakie daje, nie są zbyt dobre i że nadal chcą pokonać SCIP i sprawić, by działał. pisać na blogu podsunął mi pomysł, że pakiet Google działa z konkretnymi wersjami. Zobaczmy. lista zmian w wydaniu i widzimy tam wyraźne wskazanie wersji 6.0.0. Pomimo faktu, że makefile wskazuje wersję 6.0.2, próbujemy zainstalować starszą wersję i voilà!

A teraz jeszcze raz kolejność działań.

Kolejność instalacji

  1. Pobierz archiwum SCIP, upewniając się, że tutaj wyraźnie zaznaczono obsługę 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 publikacji najnowsza wersja to 4.65) i rozpakuj.
  3. Zainstaluj SCIP za pomocą polecenia
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=<path>/scipoptsuite-6.0.0
    
  4. Zainstaluj GLPK za pomocą polecenia:
    ./configure --prefix=<install_path> --with-pic --enable-shared
    make
    make install
    
  5. Pobierz OR-Tools z GitHub
    git clone https://github.com/google/or-tools
  6. Zainstaluj OR-Tools za pomocą poleceń:
    make third_party
    make python_package
    

    Jeżeli ostatnie polecenie nie zadziała, zainstaluj koło za pomocą polecenia:

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

    Jeśli chcesz przeprowadzić instalację nie w środowisku wirtualnym, ale globalnie dla całego systemu, zamiast:

    make python_package

    uruchom polecenie:

    make python
    

Źródło: www.habr.com

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster