Ho deciso di partecipare a e per questo ho dovuto utilizzare pacchetti per risolvere problemi di ottimizzazione. Ho scelto lo strumento di Google or-tools, che funge da interfaccia per diversi risolutori. Contiene diversi strumenti di ottimizzazione, ma gli sviluppatori affermano di supportare anche diversi pacchetti esterni, inclusi i commerciali Gurobi e CPLEX. Tuttavia, noi non siamo ricchi e utilizzeremo i gratuiti SCIP e GLPK (sviluppati da un autore locale, tra l'altro). Con mia sorpresa, non ho trovato istruzioni su come far funzionare tutto questo splendore in un ambiente virtuale Python, sia nei nostri spazi che nel segmento anglofobo di Internet, e ho dovuto lavorarci un po'. Per chi ha fretta, leggete subito , agli altri propongo di conoscere la mia poco raffinata grafomania che descrive le peripezie nell'installazione del software di Google. Sì, ho dimenticato di dire subito che tutto è stato installato su Manjaro Linux.

Primi passi
Tutti e tre i pacchetti esistono nel repository di Python, quindi li installiamo tramite pip.
Ognuno di essi ha la propria interfaccia, e or-tools è stato scelto proprio per provare diversi pacchetti senza dover riscrivere sostanzialmente il programma. Quindi il compito è fare in modo che or-tools integri questi risolutori e li faccia eseguire tramite se stesso. E cosa pensate? L'or-tools installato tramite pip non vede i risolutori installati tramite pip, e loro non vedono lui (chi l’avrebbe mai detto). Quindi bisogna davvero dare un'occhiata a ciò che scrivono nella .
Nella documentazione scrivono che è necessario compilare dai sorgenti affinché or-tools possa integrare i pacchetti esterni. Proviamo a compilare, e non riesce, perché i risolutori installati tramite pip non sono visibili.
Pertanto, i metodi più semplici per installare tutti i pacchetti tramite pip non funzionano, perché or-tools non integra i risolutori, e i risolutori non installano le librerie come or-tools desidera, generando errori e deridendoti.
Successivamente, nella dicono che è necessario compilare i risolutori dai sorgenti, e poi compilare or-tools dai sorgenti. Detto-fatto! Ho installato SCIP, ho installato GLPK, ma si è presentata una domanda non descritta nella documentazione: come installare or-tools in un ambiente virtuale.
L'unico comando scritto nella documentazione, make python, installa il pacchetto globalmente nel sistema (sorprendente, vero?).
Tuttavia, sono stato fortunato: durante la ricerca ingegneristica con il metodo delle scimmie infinite, ho accidentalmente digitato il comando make help, e mi ha restituito un elenco di tutte le opzioni di compilazione di or-tools, tra cui la possibilità di compilare il pacchetto wheel. Questo è il comando make python_package, nel caso (lo ripeterò alla fine). Quindi, è tempo di compilare e lanciare?

Cerchiamo il problema
Niente funziona durante la fase di compilazione di or-tools, dà errore su librerie GLPK difettose.

La compilazione con SCIP con i parametri dalla documentazione va a buon fine, ma or-tools continua a rifiutarsi di funzionare al momento dell'importazione.

Non ho trovato soluzioni a questi problemi, quindi sono andato su GitHub per chiedere agli sviluppatori perché l'installazione seguendo le loro istruzioni restituisce errori da qualche parte nel loro codice.

Hmm, grazie per le spiegazioni
Mentre aspettavo una risposta su GitHub, ho navigato su internet, sperando di trovare qualcosa che mi aiutasse. E incredibilmente, ho trovato. Era il team leader del progetto, dove scriveva di come collegare GLPK a or-tools. E questo metodo ha finalmente funzionato! Ora, se compiliamo tutto senza SCIP, ma con GLPK, possiamo lavorarci. Già un progresso.
Tuttavia, il team leader di or-tools non consigliava di usare GLPK, dicendo che i risultati mostrati non sono molto buoni, e voglio comunque vincere SCIP e farlo funzionare. Un vicino nel blog mi ha suggerito che il pacchetto di Google funziona con versioni specifiche. Diamo un'occhiata e vediamo una chiara indicazione della versione 6.0.0. Nonostante nel makefile fosse indicata la versione 6.0.2, proviamo a installare una versione più vecchia e voilà!
E ora, ancora una volta, la sequenza di azioni operativa.
Sequenza di installazione
- Scarica l'archivio SCIP, assicurandoti che sia chiaramente indicata la compatibilità con la versione che stai scaricando (nel mio caso ) e decomprimi.
- Scarica GLPK (al momento della scrittura, l'ultima versione è 4.65) e decompressa.
- Installa SCIP con il comando
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Installa GLPK con il comando:
./configure --prefix= --with-pic --enable-shared make make install - Scarica OR-Tools da GitHub
git clone https://github.com/google/or-tools - Installa OR-Tools con i comandi:
make third_party make python_packageSe l'ultimo comando non funziona, installa wheel con il comando:
pip install wheel - Attiva l'ambiente virtuale, vai nella cartella del pacchetto Python e installalo da lì.
Se devi installare non in un ambiente virtuale, ma globalmente per l'intero sistema invece di:
make python_packageeseguire il comando:
make python
Fonte: habr.com
