Ho deciso di partecipare a e avevo bisogno di utilizzare pacchetti per risolvere problemi di ottimizzazione. Ho scelto lo strumento or-tools di Google, che funge da interfaccia per diversi risolutori. Contiene vari strumenti di ottimizzazione, ma gli sviluppatori dichiarano la compatibilità con diversi pacchetti esterni, inclusi i commerciali Gurobi e CPLEX. Tuttavia, non siamo ricchi, quindi utilizzeremo i gratuiti SCIP e GLPK (sviluppati, tra l'altro, da un creatore locale). Con mia sorpresa, non ho trovato alcuna istruzione su come far funzionare tutta questa meraviglia in un ambiente virtuale Python, né nel nostro segmento né in quello anglofono di Internet, quindi ho dovuto lavorare un po' per sistemare le cose. Per chi ha fretta, leggete direttamente , agli altri consiglio di familiarizzare con la mia grafomania di discutibile qualità, che descrive le peripezie dell'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 loro ha la propria interfaccia, e or-tools è stato scelto proprio per provare diversi pacchetti senza dover riscrivere sostanzialmente il programma. Quindi, l'obiettivo è far sì che or-tools integri questi risolutori e li esegua attraverso di sé. E cosa pensate? Or-tools installato tramite pip non vede i risolutori installati tramite pip, e viceversa (chi l'avrebbe mai detto?). Dunque, bisogna dare un'occhiata a ciò che si scrive in .
La documentazione afferma che è necessario compilare dai sorgenti per consentire a or-tools di integrare pacchetti esterni. Proviamo a compilare, ma non funziona, poiché i risolutori installati tramite pip non sono riconosciuti.
Pertanto, i metodi più facili per installare tutti i pacchetti tramite pip non funzionano, poiché or-tools non carica i risolutori. I risolutori non installano le librerie nel modo in cui or-tools le desidera, tutti ti bombardano di errori, ti chiamano stupido e ridono di te.
Inoltre, nella si afferma che è necessario compilare i risolutori dai sorgenti e poi compilare or-tools dai sorgenti. Detto-fatto! Ho installato SCIP, ho installato GLPK, ma si presenta una questione non descritta nella documentazione: come installare or-tools nell'ambiente virtuale.
L'unico comando documentato make python installato pacchetto globalmente nel sistema (sorprendente, vero?).
Tuttavia, sono stato fortunato: nel processo di ricerca ingegneristica con il metodo delle scimmie infinite ho accidentalmente digitato il comando make help, e mi ha dato un elenco di tutte le opzioni di compilazione di or-tools, tra cui la possibilità di costruire il pacchetto wheel. Questo è il comando make python_package, se non lo sapevi (lo ripeterò di nuovo alla fine). Quindi, è ora di costruire e lanciare?

Cerchiamo il problema
Niente funziona durante la fase di compilazione di or-tools, lamenta librerie GLPK difettose.

La compilazione con SCIP usando i parametri della documentazione va a buon fine, ma or-tools si rifiuta comunque di funzionare al momento dell'importazione.

Non ho trovato soluzioni a questi problemi da solo, quindi sono andato su GitHub dai sviluppatori a chiedere perché l'installazione secondo le loro istruzioni genera errori all'interno del loro codice.

Hmm, grazie per le spiegazioni
Mentre aspettavo una risposta su GitHub, ho cercato su internet, sperando di trovare qualcosa che potesse aiutarmi. E, come non sorprende, ho trovato qualcosa. Era team leader del progetto, dove ha scritto di come collegare GLPK con or-tools. E questo metodo finalmente ha funzionato! Ora, se si compila tutto senza SCIP, ma con GLPK, si può anche lavorare con esso. Già un progresso.
Tuttavia, il team leader di or-tools ha sconsigliato di utilizzare GLPK, dicendo che i risultati non erano soddisfacenti, e si desidera comunque sconfiggere SCIP e farlo funzionare. Il vicino in un blog ha suggerito che il pacchetto di Google funziona con versioni specifiche. Guardiamo e vediamo un chiaro riferimento alla versione 6.0.0. Nonostante nel makefile sia indicata la versione 6.0.2, proviamo a installare una versione precedente e voilà!
E ora, di nuovo, la sequenza di azioni operative.
Sequenza di installazione
- Scaricare l'archivio SCIP, assicurandosi che sia chiaramente indicato il supporto per la versione che si sta scaricando (nel mio caso ) e decomprimere.
- Scaricare GLPK (al momento della scrittura il supporto più recente è la versione 4.65) e decomprimere.
- Installare SCIP con il comando
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Installare 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 seguenti comandi:
make third_party make python_packageSe l'ultimo comando non funziona, installa il pacchetto wheel utilizzando:
pip install wheel - Attiva l'ambiente virtuale, vai nella cartella del pacchetto Python e installalo da lì.
Se desideri installare a livello globale invece di utilizzare l'ambiente virtuale, sostituisci:
make python_packageeseguire il comando:
make python
Fonte: habr.com
