Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

Decidi participar de uma competição e precisava usar pacotes para resolver problemas de otimização. Escolhi a ferramenta or-tools do Google, que serve como uma interface para diferentes solucionadores. Ela contém várias ferramentas de otimização, mas os criadores afirmam dar suporte a diversos pacotes externos, incluindo os comerciais Gurobi e CPLEX. No entanto, somos pessoas com orçamento limitado, e usaremos os gratuitos SCIP e GLPK (de um desenvolvedor nacional, aliás). Para minha surpresa, não encontrei nenhuma instrução sobre como fazer toda essa maravilha funcionar em um ambiente virtual Python, tanto nos conteúdos em nosso idioma quanto nos de língua inglesa, e tive que me esforçar um pouco. Para aqueles que estão com pressa, leiam diretamente aqui, aos demais, sugiro conhecer a minha grafomania de qualidade duvidosa, que descreve as peripécias da instalação do software do Google. Ah, e eu esqueci de mencionar que tudo foi instalado no Manjaro Linux.

Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

Primeiros passos

Todos os três pacotes estão disponíveis no repositório do Python, então vamos instalá-los via pip.

Cada um deles tem sua própria interface, e o or-tools foi escolhido justamente para permitir testes com diferentes pacotes, sem a necessidade de reescrever muito o programa. Portanto, o objetivo é que o or-tools conecte esses solucionadores e permita sua execução através dele. E o que vocês acham? O or-tools instalado via pip não reconhece os solucionadores instalados também via pip, e eles não o reconhecem (quem diria). Então, precisamos dar uma olhada no que dizem as documentação.
documentações, que comentam que é necessário compilar a partir do código-fonte para que o or-tools reconheça pacotes externos. Tentamos compilar, mas não dá certo, porque os solucionadores instalados via pip não são visíveis.
Consequentemente, as maneiras mais simples de instalar todos os pacotes via pip não funcionam, pois o or-tools não puxa os solucionadores, os solucionadores não instalam as bibliotecas como o or-tools deseja, todos lançam erros, chamam você de burro e riem de você.

Em seguida, nas documentações dizem que é necessário compilar os solucionadores a partir do código-fonte e, em seguida, compilar o próprio or-tools a partir do código-fonte. Fui e fiz! Instalei o SCIP, instalei o GLPK, mas surgiu uma dúvida não descrita na documentação: como instalar o or-tools em um ambiente virtual.

O único comando documentado make python instala o pacote globalmente no sistema (surpreendente, não é?).

No entanto, eu tive sorte: durante uma busca de engenharia pelo método dos macacos infinitos, eu acidentalmente digitei o comando make help, e recebi uma lista de todas as opções de compilação do or-tools, entre as quais estava a opção de compilar o pacote wheel. Esse é o comando make python_package, só para lembrar (eu vou repeti-lo no final). Então, é hora de compilar e rodar?

Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

Procurando o problema

Nada funciona na etapa de compilação do or-tools, ele reclama sobre bibliotecas GLPK ruins.

Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

A compilação com SCIP usando os parâmetros da documentação é bem-sucedida, mas o or-tools ainda se recusa a funcionar no momento da importação.

Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

Não encontrei soluções para esses problemas por conta própria, então fui ao GitHub perguntar aos desenvolvedores por que a instalação seguindo as instruções deles gera erros em algum lugar do código deles.

Instalação do or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux
Hmm, obrigado pelos esclarecimentos

Enquanto esperava a resposta no GitHub, fiquei pesquisando na internet, na esperança de encontrar algo que me ajudasse. E, para minha surpresa, encontrei. Era blog o líder do projeto, onde ele escreveu sobre como conectar o GLPK ao or-tools. E esse método finalmente funcionou! Agora, se eu compilar tudo sem SCIP, mas com GLPK, é possível trabalhar com isso. Já é um progresso.

No entanto, o líder da equipe do or-tools não recomendou usar o GLPK, dizendo que os resultados não são bons, e ainda quero vencer o SCIP e fazê-lo funcionar. O blog vizinho post me fez pensar que o pacote do Google funciona com versões específicas. Vamos olhar a lista de alterações das versões e vemos uma indicação clara da versão 6.0.0. Apesar de que no makefile está indicada a versão 6.0.2, tentamos instalar uma versão mais antiga e voila!

E agora, mais uma vez a sequência de ações que funciona.

Sequência de instalação

  1. Baixe o arquivo do SCIP, certificando-se de que aqui o suporte para a versão que você está baixando está claramente indicado (no meu caso, developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0) e descompacte-o.
  2. Baixe o GLPK (na época da postagem a versão mais recente era 4.65) e descompacte.
  3. Instale o SCIP com o comando
    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0
    
  4. Instale o GLPK com o comando:
    . /configure --prefix= --with-pic --enable-shared
    make
    make install
    
  5. Baixe o OR-Tools do GitHub
    git clone https://github.com/google/or-tools
  6. Instale o OR-Tools com os comandos:
    make third_party
    make python_package
    

    Se a última comando não funcionar, instale o wheel com o comando:

    pip install wheel
  7. Ative o ambiente virtual, vá para a pasta do pacote Python e instale-o a partir de lá.

    Se precisar instalar não em um ambiente virtual, mas globalmente para todo o sistema, em vez de:

    make python_package

    execute o comando:

    make python
    

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster