Реших да участвам в и ми беше нужно да използвам пакети за решаване на оптимизационни задачи. Избрах инструмента на Google or-tools, който представлява интерфейс за различни решатели. Той съдържа няколко инструмента за оптимизация, но създателите твърдят, че поддържа и няколко външни пакета, включително комерсиалните Gurobi и CPLEX. Обаче ние не сме богати хора и ще използваме безплатните SCIP и GLPK (от отечествен разработчик, между другото). Учудващо, не намерих нито една инструкция за това как да накарам всичко това да работи във виртуалното окружение на Python, нито в нашия, нито в англоговорящия сегмент на интернет, и трябваше да поработя малко. За тези, които бързат, четете веднага , а на останалите предлагам да се запознаят с качеството на моята графомания, описваща перипетиите около инсталацията на софтуера на Google. Да, забравих да кажа, че всичко беше инсталиранo в Manjaro Linux.

Първи стъпки
Всички три пакета съществуват в репозитория на Python, така че ги инсталираме чрез pip.
Всеки от тях има свой интерфейс, а or-tools беше избран точно за да пробваме различни пакети, без съществено пренаписване на програмата, затова задачата е or-tools да свърже тези решатели и да ги стартира през себе си. И какво мислите? Инсталираният чрез pip or-tools не вижда инсталираните чрез pip решатели, а те не виждат него (кой би могъл да предположи). Затова е нужно да погледнем какво пишат в .
Документите пишат, че трябва да се компилират от изходния код, за да може or-tools да свърже външните пакети. Опитваме да компилираме и нищо не излиза, защото инсталираните чрез pip решатели не са видими.
Следователно най-простите начини за инсталиране на всички пакети чрез pip не работят, защото or-tools не извлича решателите, решателите не инсталират библиотеките така, както иска or-tools, и всички ти хвърлят грешки, наричат те глупав и се подиграват всевъзможно.
По-нататък в пише, че трябва да компилираме решателите от изходния код, след което да компилираме самия or-tools от изходния код. Казано - сторено! Инсталирах SCIP, инсталирах GLPK, но възникна не описаният в документацията въпрос как да инсталирам or-tools в виртуалното окружение.
Единствената команда, написана в документацията, make python, инсталира пакета глобално в системата (ужасно, нали?).
Обаче аз имах късмет: в процеса на инженерно търсене с безкрайни маймуни случайно набере командата make help и ми даде списък с всички варианти за компилиране на or-tools, сред които имаше възможност да компилирам пакет wheel. Тази команда е make python_package, ако се чудите (ще я повторя в края). Така че, време ли е да компилираме и стартираме?

Търсим проблема
Нищо не работи на етапа на компилиране на or-tools, той дава грешки за лоши библиотеки GLPK.

Компилацията със SCIP с параметрите от документацията минава успешно, но or-tools все пак отказва да работи при импортирането.

Не открих решения на тези проблеми самостоятелно, затова се отправих към GitHub при разработчиците, за да питам защо инсталацията по техните указания дава грешки някъде в техния код.

Хмм, благодаря за разясненията
Докато чаках отговор в GitHub, се разрових в интернет, в надеждата да открия нещо, което да ми помогне. И какво да видя, намерих. Това беше тимлидът на проекта, където той пишеше как да свържа GLPK с or-tools. И този метод най-накрая проработи! Сега, ако компилирам всичко без SCIP, но с GLPK, това даже може да работи. Вече има напредък.
Обаче тимлидът на екипа or-tools не препоръчваше да се използва GLPK, казвайки, че резултатите показват не особени успехи и все пак искам да победя SCIP и да го накарам да работи. Съседният в блогът ми подсказа, че гугловският пакет работи с конкретни версии. Нека разгледаме и виждаме там ясно посочена версия 6.0.0. Въпреки че в makefile е посочена версия 6.0.2, опитваме се да инсталираме по-стара версия и ето го!
А сега отново работната последователност на действията.
Последователност на инсталиране
- Свалете архива на SCIP, уверявайки се, че е ясно указана поддръжката на версията, която сваляте (в моя случай ) и го разархивирайте.
- Свалете GLPK (към момента на поста последната версия е 4.65) и го разархивирайте.
- Инсталирайте SCIP с командата
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Инсталирайте GLPK с командата:
./configure --prefix= --with-pic --enable-shared make make install - Свалете OR-Tools от GitHub
git clone https://github.com/google/or-tools - Инсталирайте OR-Tools с командите:
make third_party make python_packageАко последната команда не работи, инсталирайте wheel с командата:
pip install wheel - Активирайте виртуалната среда, преминете в папката с Python пакета и го инсталирайте оттам.
Ако трябва да инсталирате не във виртуалната среда, а глобално за цялата система вместо:
make python_packageизпълнете командата:
make python
Източник: habr.com
