Am decis să particip la și am avut nevoie să folosesc pachete pentru rezolvarea problemelor de optimizare. Am ales instrumentul de la Google or-tools, care reprezintă o interfață pentru diferiți soluționatori (sau solvers?). Conține mai multe instrumente de optimizare, dar creatorii susțin că suportă și câteva pachete externe, inclusiv comerciale precum Gurobi și CPLEX. Totuși, suntem oameni fără mulți bani, așa că vom folosi SCIP și GLPK gratuite (de la un dezvoltator autohton, de altfel). Spre surprinderea mea, nu am găsit nicio instrucțiune despre cum să fac funcționeze toate aceste minuni într-un mediu virtual Python, în niciunul dintre segmentele de internet, fie ele românești sau anglofone, așa că a trebuit să îmi fac ceva timp. Pentru cei care se grăbesc, citiți direct , celorlați le propun să se familiarizeze cu grafomania mea de calitate îndoielnică, care descrie peripețiile instalării software-ului de la Google. Da, am uitat să spun de la bun început că totul s-a instalat pe Manjaro Linux.

Primii pași
Toate cele trei pachete există în depozitul Python, așa că le instalăm prin pip.
Fiecare dintre ele are propria interfață, iar or-tools a fost ales tocmai pentru a încerca diferite pachete, fără a rescrie semnificativ programul, deci sarcina este ca or-tools să integreze acești soluționatori și să permită rularea lor prin el. Și ce credeți? Or-tools instalat prin pip nu vede soluționatorii instalați prin pip, iar aceștia nu îl văd pe el (cine s-ar fi gândit). Așa că, trebuie să aruncăm o privire la .
În documentație se spune că trebuie compilat din sursă, pentru ca or-tools să integreze pachetele externe. Încercăm să compilăm, dar nu reușim, deoarece soluționatorii instalați prin pip nu sunt vizibili.
Prin urmare, cele mai simple metode de instalare a tuturor pachetelor prin pip nu funcționează, deoarece or-tools nu trage soluționatorii, soluționatorii nu instalează bibliotecile așa cum dorește or-tools, toți te bombardează cu erori, te numesc prost și râd de tine.
Mai departe în se spune că trebuie să compilezi soluționatorii din sursă, apoi să compilezi or-tools din sursă. Să vedem, am instalat SCIP, am instalat GLPK, dar a apărut o întrebare neclară în documentație: cum instalez or-tools într-un mediu virtual.
Singura comandă specificată în documentație, make python, instalează pachetul global în sistem (surprinzător, nu-i așa?).
Cu toate acestea, am avut noroc: în timpul căutărilor ingineresti prin metoda maimuțelor infinite, am tastat din întâmplare comanda make help și am primit o listă cu toate opțiunile de construire or-tools, printre care s-a aflat posibilitatea de a construi un pachet wheel. Aceasta este comanda make python_package, pentru cei interesați (o voi repeta încă o dată la final). Așadar, este timpul să construim și să lansăm?

Să căutăm problema
Nimic nu funcționează în etapa de construire a or-tools, dă greș din cauza unor biblioteci proaste GLPK.

Construcția cu SCIP, conform parametrilor din documentație, funcționează cu succes, dar or-tools tot refuză să funcționeze în momentul importului.

Nu am găsit soluții la aceste probleme, așa că m-am dus pe GitHub la dezvoltatori, întrebându-i de ce instalarea conform instrucțiunilor lor dă erori în interiorul codului lor.

Hmm, mulțumesc pentru clarificări
În timp ce așteptam un răspuns pe GitHub, navigam pe internet, sperând să găsesc ceva care să mă ajute. Și, paradoxal, am găsit. Era liderul de proiect, care a scris despre cum să conectezi GLPK cu or-tools. Și această metodă a funcționat în sfârșit! Acum, dacă construiesc totul fără SCIP, dar cu GLPK, funcționează chiar și așa. Este deja un progres.
Cu toate acestea, liderul echipei or-tools a recomandat să nu folosim GLPK, spunând că rezultatele sunt mediocri și, totuși, vrem să învingem SCIP și să-l facem să funcționeze. Vecinul de pe blog m-a făcut să mă gândesc că pachetul Google funcționează cu anumite versiuni. Să vedem și vedem acolo o mențiune explicită pentru versiunea 6.0.0. Deși în makefile este specificată versiunea 6.0.2, încercăm să instalăm o versiune mai veche și, voila!
Iată din nou secvența corectă de acțiuni.
Secvența de instalare
- Descărcați arhiva SCIP, asigurându-vă că este specificată clar suportul pentru versiunea pe care o descărcați (în cazul meu, ) și dezarhivați.
- Descărcați GLPK (la momentul scrierii, ultima versiune este 4.65) și dezarhivați.
- Instalați SCIP cu comanda
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Instalați GLPK cu comanda:
./configure --prefix= --with-pic --enable-shared make make install - Descărcați OR-Tools de pe GitHub
git clone https://github.com/google/or-tools - Instalați OR-Tools cu comenzile:
make third_party make python_packageDacă ultimul comandă nu funcționează, instalează wheel cu comanda:
pip install wheel - Activează mediul virtual, navighează în folderul cu pachetul Python și instalează-l de acolo.
Dacă trebuie să instalezi nu într-un mediu virtual, ci global pentru întreaga sistemă în loc de:
make python_packageexecutați comanda:
make python
Sursa: habr.com
