Qual é o software mais rápido (código aberto) para resolver problemas mistos de programação inteira


14

Eu tenho um problema de programação inteira mista. E eu estou usando o GLPK como meu solucionador. Mas eu achei que o GLPK é bom para o problema de Programação Linear, mas para a programação Inteira Mista, isso requer muito mais tempo, portanto, não atende aos nossos requisitos. Estou tão procurando outro software. Existe alguma outra boa ferramenta de código aberto para resolver problemas de programação inteira mista com velocidade rápida? Obrigado!


Você já viu as comparações com o SCIP ?
Ali

Respostas:


14

Se você quer algo de código aberto, provavelmente deseja experimentar o código CBC do COIN (eles também têm alguns outros solucionadores MILP, como uma estrutura de filiais e preços, ou SYMPHONY).

Gurobi e CPLEX serão consideravelmente mais rápidos e, na reunião INFORMS de 2011 ou 2012, Gurobi era mais rápido que o CPLEX (embora as métricas de desempenho sejam, obviamente, dependentes de problemas). Nas MILPs resolvidas em minha tese, Gurobi era aproximadamente 15-100 vezes mais rápido que o CBC, e o CPLEX era quase tão rápido quanto Gurobi, mas muito mais lento (como 12-80 vezes mais rápido).

Embora o pior desempenho seja realmente exponencial, o tempo de execução dependerá muito da estrutura do problema. É improvável que você consiga resolver um MILP com milhões de variáveis, a menos que explore uma estrutura especial (talvez se seja um programa estocástico que possa ser decomposto em muitos problemas muito menores), mas é inteiramente possível resolver MILPs não triviais com milhares de variáveis ​​em menos de um minuto. (Obviamente, também é possível que esses problemas levem uma hora ou mais para serem resolvidos.)

Como observa Brian Borchers, o CPLEX e o Gurobi têm licenças gratuitas disponíveis para alguns pesquisadores, um desses dois pacotes de software seria realmente o melhor para usar como um solucionador MILP de uso geral.


6

Problemas de programação linear inteira mista são muito mais difíceis de resolver do que problemas de programação linear. Em termos de complexidade computacional, os LPs podem ser resolvidos em tempo polinomial enquanto a solução de MILP é um problema NP-Hard. Os algoritmos conhecidos para resolver MILP têm complexidade exponencial de pior caso.

Existem outros pacotes de software para programação linear inteira mista que você pode ver, incluindo SCIP (gratuito para uso acadêmico), CPLEX (comercial, mas tem uma opção de licenciamento acadêmico) e GUROBI (também comercial com uma opção de licenciamento acadêmico). Um ou mais desses pacotes pode ser substancialmente mais rápido que o GLPK em seus problemas, mas não espere que nenhum deles seja tão rápido na solução do MILP quanto na solução de LPs de tamanhos semelhantes.


4

Se você quiser experimentar vários solucionadores diferentes, experimente a estrutura de modelagem JuMP de Julia . Ele permite que você escreva seu modelo como um modelo JuMP e depois alterne os solucionadores com uma linha de código. Por exemplo, para problemas de MILP, você pode escolher entre os solucionadores Bonmin, Cbc, Couenne, CPLEX, GLPK, Gurobi e MOSEK. Por isso, se você o escrever no JuMP, poderá tentar todos os solucionadores mencionados por Geoff e ver o que funciona sem ter que escrever um monte de código. Seus próprios testes pessoais serão a melhor fonte de conhecimento sobre quais são os algoritmos mais rápidos para seus problemas.


A estrutura do JuMP adiciona muita sobrecarga?
naught101

1
Não, o JuMP é feito via macros, portanto, é em tempo de compilação. De fato, o que o JuMP usa macros para reescrever código e usar a autodiferenciação para calcular funções eficientes para gradientes, jacobianos e hessianos; portanto, será mais rápido nos casos em que você não forneceria uma forma analítica para o gradiente / Jacobiano / Hessiano. Você pode realmente verificar via @code_llvmpara verificar o código de montagem resultante para ver se o código de cola é essencialmente nada (isso também ocorre porque Julia ingenuamente usa ponteiros de função e as mesmas matrizes de bits que C / Fortran).
Chris Rackauckas

@ChrisRackauckas Qual solucionador funciona melhor para problemas não-lineares com restrições não-lineares?
skan

Essa é uma pergunta completamente diferente, provavelmente não deveria ser feita em um comentário, mas eu costumo usar o JuMP com NLopt ou IPOPT, dependendo das restrições necessárias e se preciso de otimização global ou local.
Chris Rackauckas

3

Seguindo as sugestões de outras pessoas, usei o GAMS (comercial) para muitos projetos. É muito direto; tudo o que você precisa fazer é colocar a formulação matemática do seu problema. Ele pega as variáveis, restrições, funções objetivas e todos os dados de entrada. Em seguida, fornece uma variedade de solucionadores (otimizadores) para qualquer caso. Dependendo do seu caso, você adiciona solucionadores mais sofisticados.

Certamente, EASY vale a pena dar uma olhada. Estrutura de código aberto.

O termo "rápido" é muito vago! Você precisa ser mais específico; Rápido em termos de número de iterações? número de avaliações? Tempo decorrido? combinação destes?

No entanto, se você não está procurando um software e deseja resolver o problema, eu poderia sugerir o uso do otimizador global NSGA-II, que é um otimizador de código aberto de reputação e desempenho muito altos.

Se você fornecesse mais informações, eu poderia orientar com precisão.


1
Você precisa considerar seriamente o [openMDAO] [1], que é desenvolvido / suportado pela NASA e é bastante flexível!
T3rmInAt0r 7/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.