Postanowiłem wziąć udział w 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. Reszcie 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.

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… .
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 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?

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

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

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.

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. 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ł. na blogu podsunął mi pomysł, że pakiet Google działa z konkretnymi wersjami. Zobaczmy. 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
- Pobierz archiwum SCIP, upewniając się, że wyraźnie zaznaczono obsługę wersji, którą pobierasz (w moim przypadku ) i rozpakuj.
- Pobierz GLPK (w momencie publikacji najnowsza wersja to 4.65) i rozpakuj.
- Zainstaluj SCIP za pomocą polecenia
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=<path>/scipoptsuite-6.0.0 - Zainstaluj GLPK za pomocą polecenia:
./configure --prefix=<install_path> --with-pic --enable-shared make make install - Pobierz OR-Tools z GitHub
git clone https://github.com/google/or-tools - Zainstaluj OR-Tools za pomocą poleceń:
make third_party make python_packageJeżeli ostatnie polecenie nie zadziała, zainstaluj koło za pomocą polecenia:
pip install wheel - 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_packageuruchom polecenie:
make python
Źródło: www.habr.com
