Instalando or-tools com SCIP e GLPK em um ambiente virtual Python 3.7 no Linux

Decidi participar da competição e era necessário usar pacotes para ele resolver problemas de otimização. Eu escolhi a ferramenta ou ferramentas do Google, que é uma interface para diferentes solucionadores (ou resolvidos? Solvers?). Ele contém várias ferramentas de otimização, mas os criadores reivindicam suporte para vários pacotes externos, incluindo Gurobi comercial e CPLEX. No entanto, não somos pessoas ricas e, a propósito, usaremos SCIP e GLPK gratuitos (de um desenvolvedor doméstico). Para minha surpresa, nem uma única instrução sobre como fazer todo esse esplendor funcionar em um ambiente virtual de python, não encontrei nos espaços abertos dos nossos segmentos de Internet e de fala inglesa e tive que mexer um pouco. Para quem tem pressa, leia aqui, Sugiro que o restante se familiarize com a qualidade duvidosa da minha graphomania, que descreve os altos e baixos da instalação do software do Google. Sim, esqueci de dizer imediatamente que tudo estava instalado no Manjaro Linux.


Primeiros passos


Todos os três pacotes existem no repositório python, então instalamos via via pip.

Cada um deles tem sua própria interface, e o or-tools foi escolhido apenas para tentar vários pacotes, sem reescrever o programa de maneira significativa, portanto a tarefa é que o or-tools pegue esses solucionadores e os deixe executar por si. E o que você acha? Instalado via pip ou-tools não vê os solucionadores instalados através do pip e eles não o vêem (quem teria pensado). Portanto, você ainda precisa examinar o que eles escrevem na documentação .
Nas docas, eles escrevem o que precisa ser coletado da fonte para que o or-tools pegue pacotes externos. Tentamos coletar e nada sai, porque os solucionadores instalados através do pip não são visíveis.
Portanto, as maneiras mais fáceis de instalar todos os pacotes por meio do pip não funcionam, porque o or-tools não puxa solucionadores, os solucionadores não instalam bibliotecas como o or-tools deseja, todo mundo lança erros em você, eles o chamam de estúpido e riem de todas as maneiras possíveis.

Além disso, nas docas, eles escrevem que é necessário coletar solucionadores de códigos-fonte e depois de origem para coletar ou ferramentas. Não antes de dizer que acabou! O SCIP instalado, o GLPK instalado, mas a questão não descrita na documentação foi sobre como colocar ou ferramentas em um ambiente virtual.

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

No entanto, tive sorte: durante a pesquisa de engenharia usando o método do macaco sem fim, digitei acidentalmente make help e recebi uma lista de todas as opções de criação de ferramentas ou ferramentas, entre as quais a oportunidade de criar um pacote de rodas. Este é o comando make python_package, se for o caso (repetirei novamente no final). Então, é hora de construir e lançar?



Procurando um problema


Nada funciona na fase de construção das ferramentas, ele jura nas bibliotecas ruins do GLPK.



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



Como não consegui encontrar uma solução para esses problemas sozinho, fui ao github para que os desenvolvedores perguntassem por que a instalação de acordo com as instruções deles produz erros em algum lugar do código.


Hmm, obrigado pelos esclarecimentos

Enquanto esperava uma resposta no github, vasculhei a Internet, na esperança de encontrar algo que me ajudasse. E como não é surpreendente, eu encontrei. Era um blog do líder da equipe do projeto, onde ele escreveu sobre como vincular o GLPK às ferramentas ou. E esse método finalmente funcionou! Agora, se você criar tudo sem o SCIP, mas com o GLPK, poderá trabalhar com isso. Já está em progresso.

No entanto, o líder da equipe do or-tools não aconselhou o uso do GLPK, dizendo que os resultados não são importantes e eu ainda quero derrotar o SCIP e fazê-lo funcionar. A postagem vizinha no blog teve a idéia de que o pacote de lançamento do Google funciona com versões específicas. Examinamos a lista de alterações de versão e vemos indicações explícitas da versão 6.0.0 lá. Apesar de a versão 6.0.2 ser indicada no makefile, estamos tentando instalar uma versão mais antiga e pronto!

E agora, novamente, uma sequência de ações em funcionamento.

Sequência de instalação


  1. Faça o download do arquivo SCIP, certificando-se de que exista suporte claramente indicado para a versão que você baixa (no meu caso developers.google.com/optimization/support/release_notes#support-for-scip-6.0.0 ) e descompacte.
  2. Faça o download do GLPK (no momento da publicação da versão mais recente 4.65) e descompacte.
  3. Instalar comando SCIP

    make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=<path>/scipoptsuite-6.0.0
    
  4. Instale o GLPK com o comando:

    ./configure --prefix=<install_path> --with-pic --enable-shared
    make
    make install
    
  5. Faça o download do OR-Tools no github

    git clone https://github.com/google/or-tools
  6. Instale o OR-Tools com os comandos:

    make third_party
    make python_package
    

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

    pip install wheel
  7. Para ativar o ambiente virtual, vá para a pasta com o pacote Python e instale-o a partir daí.

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

    make python_package

    execute o comando:

    make python
    

All Articles