Estou realmente confuso com o uso do solver na otimização computacional. Eu olhei em volta por um mês dentro e fora, para ver se consigo entender bem o que esse termo significa, mas ainda não o entendo bem.
Parece que, se eu gostaria de resolver um problema de otimização no aprendizado de máquina ou em outro lugar, me referiria ao procedimento computacional exato como um algoritmo e não como um solucionador. Por exemplo, se eu tivesse um programa quadrático, usaria a função Quadprog do MATLAB para resolver o QP.
Pessoalmente, não me referiria à função Quadprog como um solucionador de QP, porque é apenas uma função MATLAB ou um script. Eu não me referiria ao algoritmo exato por trás do Quadprog como um solucionador de QP, não me importo se é descida de gradiente, método de ponto interior, Newton Raphson ... todos eles são algoritmos para mim. Finalmente, não me referiria ao MATLAB como um solucionador de QP, porque esse não é o único objetivo do MATLAB. Parece que a palavra "solucionador" está faltando no meu vocabulário cotidiano, apesar de ter que trabalhar rotineiramente com otimização, isso me confunde bastante, apenas parece que não estou atualizado com o jargão.
Então, pelo meu raciocínio, algoritmos e MATLAB não são solucionadores. Mas suponha que eu tenha baixado alguns softwares como Gurobi ou YALMIP para resolver problemas de otimização, esses softwares são chamados de solucionadores? Muitas vezes ouvi pessoas referenciando o "solucionador" que você está usando no mesmo tom que o "software" que você está usando. O que diferencia softwares e solucionadores de otimização?
Sei que isso soa como uma pergunta realmente rudimentar, mas só fiz otimização no MATLAB.
fonte
Respostas:
Sugiro que um solucionador é:
As classes de problema fazem parte disso. É um solucionador de X.
assim
Eu acho que esse uso está alinhado com (por exemplo) a documentação do JuMP
Aqui está uma lista de coisas que o JuMP chama de solucionadores . Nenhum deles é algoritmo, todos são programas específicos
fonte
Um solucionador é uma rotina para encontrar respostas numéricas exatas para determinados sistemas. Por exemplo, ao usar Newton-Raphson para encontrar raiz (s). Quando um sistema é superdeterminado , geralmente se usa soluções aproximadas, por exemplo, regressão. Geralmente, não se referiria à regressão como um solucionador, embora, previsivelmente, a linguagem possa ser mal utilizada e muitas rotinas aproximadas sejam vagamente denominadas solucionadoras . Por exemplo, o pacote de software de otimização CUTEr contém algoritmos, pelo menos alguns dos quais para sistemas sobredeterminados, e outros que são solucionadores, por isso é fácil dizer que estou baixando um "solucionador". Os métodos de resolução e de regressão são exemplos de métodos de otimização.
fonte
lstsq
não é um solucionador de sistemas linear porque pode resolver sistemas indeterminados?Normalmente, ouço o "solucionador" usado para descrever o software, o que significa que ele se aplica a uma implementação específica de um algoritmo. Por exemplo, isso parece se aplicar à maioria das perguntas do SciComp.SE com a tag solver .
Geralmente, o termo parece ser reservado para problemas matemáticos com uma "solução bem definida". Uma solução única se qualificaria como suficiente "bem definido", conforme observado pela Sycorax nos comentários. (Os solucionadores de Gurobi parecem ser os problemas desta classe; pelo que vale Gurobi parece-me uma suíte ou biblioteca de solucionadores).
Mas não acho que único seja necessário . Por exemplo, problemas de otimização local e global podem ter soluções bem definidas, mas não exclusivas (por exemplo, a funçãof[ x ] = pecado[ πx]2 tem um mínimo global f[ k ] = 0 para k ∈ Z )
Discordo dessa resposta , que parece estar discutindo "solucionadores de sistemas de equações" em vez de "solucionadores de otimização". Por exemplo, em mínimos quadrados lineares, o problema de álgebra linear é superdeterminado, mas o problema de otimização é convexo , com uma solução exclusiva (em casos não degenerados). Observe também que a página "solucionador" da Wikipedia vinculada nessa resposta lista "problemas de otimização linear e não linear, problemas de caminho mais curto, problemas mínimos de extensão de árvore" entre seus exemplos.
Em resposta ao comentário, vou esclarecer o que quero dizer no caso "regressão".
Dada uma funçãoF:Rn→Rm , uma solução para o sistema de equações especificado por
Por outro lado, para uma determinada função objetivaEF:Rn→R e conjunto viável ΩF⊂Rn , que dependem de F , uma solução para o problema de otimização especificado por
Na otimização "mínimos quadrados", a funçãoEF é uma soma de quadrados. Os dois problemas mais comuns de mínimos quadrados são 1)
Plataformas comuns de álgebra linear, como o Matlab, podem combinar esses três problemas matemáticos distintos "sob o capô" na função de conveniência, como linsolve () . No entanto, bibliotecas de baixo nível ("solucionador"), como LAPACK , não serão.
Dois pontos finais de esclarecimento:
Um "solucionador" normalmente corresponde a um problema matemático bem definido, mas abstrato . Por exemplo, "inferência estatística" ou "previsão bem sucedida" não são esses problemas. Na linguagem da Ciência da Computação , você verifica um solucionador, valida um modelo.
fonte
Eu acho que a palavra solucionador provém da funcionalidade semelhante de resolver uma solução viável, como no complemento Solver do Excel a opção "valor de", que tenta encontrar modo que e mais restrições de igualdade e desigualdade. No mathematica, a função resolver faz o mesmo.X f(X)=Y
O inglês (especialmente graças à mídia dos EUA) tem uma tendência a evoluir com erros sendo copiados como 'cracker' ~ 'hacker'. O Solver pode ser semelhante. É bastante abstrato o suficiente para ocultar os nomes dos algoritmos de otimização reais. Freqüentemente, as implementações reais não são puramente um único algoritmo.
fonte