http://cran.r-project.org/web/packages/quadprog/quadprog.pdf
O pacote R quadprog
parece ser capaz de resolver o problema de programação quadrática somente quando a matriz é definida positivamente.
No entanto, há um caso em que a matriz não é positiva definida. tal como
Como posso resolver esse tipo de problema?
r
optimization
user67275
fonte
fonte
Respostas:
Existem rotinas de otimização especificamente para otimização local ou global de problemas de programação quadrática, independentemente de a função objetivo ser convexa.
BARON é um otimizador global de uso geral que pode lidar e tirar proveito de problemas de programação quadrática, convexos ou não.
O CPLEX possui um solucionador de programação quadrática que pode ser chamado com solutiontarget = 2 para encontrar um ótimo local ou = 3 para encontrar um ótimo global. No MATLAB, isso pode ser chamado com cplexqp.
Otimizadores locais de uso geral que podem lidar com restrições lineares também podem ser usados para encontrar um ótimo local. Um exemplo em R é https://cran.r-project.org/web/packages/trust/trust.pdf . Os otimizadores para R estão listados em https://cran.r-project.org/web/views/Optimization.html .
No MATLAB, a função quadprog na caixa de ferramentas de otimização pode ser usada para encontrar um ótimo local.
Em Julia, há uma variedade de otimizadores disponíveis.
O algoritmo de descida de gradiente "Qualquer" pode não levar você a nada, muito menos a lidar com restrições. Use um pacote desenvolvido por alguém que saiba o que está fazendo.
O problema de exemplo fornecido é facilmente resolvido com a otimização global comprovável. Talvez com a passagem de mais de 2 anos não seja mais necessário, ou talvez seja um exemplo que nunca foi, mas, em qualquer caso, o ideal global esteja em x = 0,321429, y = 0,535714
fonte
Você pode construir uma solução alternativa usando
nearPD
doMatrix
pacote assim:nearPD(D)$mat
.nearPD
calcula a matriz definida positiva mais próxima.fonte