Espero que esta pergunta não seja muito específica para o compsci.
tillsten
Geoff Oxberry: Apenas uma curiosidade, mas por que você editou a parte linear? Eu acho que é uma parte bastante impotente da descrição do problema, a solução seria bem diferente para uma otimização de mínimos quadrados não lineares.
tillsten
Aliás, as outras edições são ótimas!
tillsten
Você pode resolver isso facilmente com seu próprio código de maneira muito eficiente. Não há necessidade de CVXOPT.
Royi 9/07/19
Respostas:
11
Eu escrevi uma resposta completa (abaixo da linha) antes de descobrir o CVXPY , que (como o CVX para MATLAB) faz todo o trabalho duro para você e tem um exemplo muito curto quase idêntico ao seu aqui . Você só precisa substituir a linha relevante por
p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])
Minha resposta antiga, fazendo da maneira mais difícil com o CVXOPT:
Seguindo a sugestão de Geoff de enquadrar sua função objetiva,
∥Ax−b∥22=⟨xTAT−bT,Ax−b⟩=xTATAx−bTAx−xTAb−bTb
Obviamente, todos os termos são escalares, então você pode transpor o terceiro e largar o último (como ele não depende de e, portanto, não muda, qual fornece um mínimo, embora seja necessário adicioná-lo novamente depois de resolver para obter o valor correto do seu objetivo) para obter
Isso (incluindo suas restrições) tem a forma de um programa quadrático, conforme indicado em a documentação do CVXOPT aqui , onde também há código de exemplo para resolver esse problema.xx
Esse problema é um problema de otimização diferenciável, convexo e não linear que pode ser resolvido no CVXOPT, IPOPT ou em qualquer outro solucionador de otimização convexo.
Respostas:
Eu escrevi uma resposta completa (abaixo da linha) antes de descobrir o CVXPY , que (como o CVX para MATLAB) faz todo o trabalho duro para você e tem um exemplo muito curto quase idêntico ao seu aqui . Você só precisa substituir a linha relevante por
Minha resposta antiga, fazendo da maneira mais difícil com o CVXOPT:
Seguindo a sugestão de Geoff de enquadrar sua função objetiva,
Obviamente, todos os termos são escalares, então você pode transpor o terceiro e largar o último (como ele não depende de e, portanto, não muda, qual fornece um mínimo, embora seja necessário adicioná-lo novamente depois de resolver para obter o valor correto do seu objetivo) para obter Isso (incluindo suas restrições) tem a forma de um programa quadrático, conforme indicado em a documentação do CVXOPT aqui , onde também há código de exemplo para resolver esse problema.x x
fonte
Em vez do problema que você resolveu, resolva
Esse problema é um problema de otimização diferenciável, convexo e não linear que pode ser resolvido no CVXOPT, IPOPT ou em qualquer outro solucionador de otimização convexo.
fonte