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

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

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

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

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.

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ł 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 blog zwrócił mi uwagę na to, że pakiet Google'a działa z konkretnymi wersjami. Sprawdzamy 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
- Pobierz archiwum SCIP, upewniając się, że wyraźnie wskazano wsparcie dla tej wersji, którą pobierasz (w moim przypadku ) i rozpakuj.
- Pobierz GLPK (w momencie pisania posta ostatnia wersja to 4.65) i rozpakuj.
- Zainstaluj SCIP poleceniem
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Zainstaluj GLPK poleceniem:
./configure --prefix= --with-pic --enable-shared make make install - Pobierz OR-Tools z GitHuba
git clone https://github.com/google/or-tools - Zainstaluj OR-Tools poleceniami:
make third_party make python_packageJeśli ostatnia komenda nie działa, zainstaluj wheel poleceniem:
pip install wheel - 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_packageWykonaj polecenie:
make python
Źródło: habr.com
