Quais são as diferenças entre os vários solucionadores de programação quadrática R?

9

Estou procurando um pacote para me ajudar a resolver alguns problemas de otimização quadrática e vejo que há pelo menos meia dúzia de pacotes diferentes. De acordo com esta página:

QP (programação quadrática, 90C20): cplexAPI , kernlab , limSolve , LowRankQP , quadprog , Rcplex , Rmosek

Alguns deles (Rmosek e cplexAPI) dependem de outros pacotes proprietários, por isso não estou interessado neles.

Quais são as diferenças notáveis ​​entre os outros pacotes QP?

Henry Henrinson
fonte
Você já olhou os documentos de referência fornecidos? O mesmo procedimento / algoritmo pode ter implementações diferentes. Se alguma coisa puder resolver um problema de QP usando métodos de ponto interior , região confiável ou conjunto ativo .
usεr11852
11
Há também o pacote osqp - para sistemas esparsos é de longe a implementação mais rápida disponível em R agora ...
Tom Wenseleers

Respostas:

11
  • Cplex (cplexAPI, Rcplex): não é de código aberto (mas há uma licença acadêmica anual renovável gratuita). Ele suporta matrizes esparsas. Foi o meu empacotador para o QP enquanto eu o estava usando. Lembre-se de que a licença acadêmica não permite usá-la em muitos núcleos (digamos mclapply()).
  • O ipop (o do kernlab) é implementado em R. puro. Isso torna desnecessariamente lento em grandes aplicativos. Não suporta matrizes esparsas.
  • O limSolve não resolve QP completo, apenas aqueles em que as restrições são do tipo igualdade. Nem todos os problemas de QP podem ser estruturados dessa maneira, mas quando podem, eles têm uma solução explícita. Não suporta matrizes esparsas.
  • LowRankQP: este na minha experiência é bom (rápido comparado aos outros de código aberto). Não suporta matrizes esparsas.
  • quadprog: implementação da linha de base do solucionador Goldfarb & Idnani Dual e Primal-Dual. Não suporta matrizes esparsas, mas é silencioso rapidamente para problemas de tamanho moderado.
  • Rmosek: nunca tentei.

Editar.

Desde que escrevi esta resposta, um novo pacote, o ipoptr agora está disponível no R-forge. Este post do R-blogger compara o desempenho no QP puro com o quadprog. Em resumo, o ipoptr suporta trigêmeos de matriz esparsa e tende a ser muito mais rápido que o quadprod quando as matrizes de design são esparsas. Quando as matrizes de design são densas, o quadprog ainda parece ser significativamente mais rápido.

user603
fonte
2
Minha experiência é que o quadprog ainda é mais rápido para problemas pequenos e médios, e o ipoptr é mais rápido apenas quando o problema é razoavelmente grande.
Neal Fultz
2
Há um conjunto recente de postagens de blog sobre esses tópicos. Veja, por exemplo, blog.ryanwalker.us/2015/02/…
chandler
11
Observe também que o quadprog requer matrizes definidas positivas na forma quadrática.
precisa saber é o seguinte
Há também o pacote osqp - para sistemas esparsos é de longe a implementação mais rápida disponível em R agora ...
Tom Wenseleers