O que exatamente é um "solucionador" de otimização?

8

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.

Carlos - o Mangusto - Perigo
fonte
Entendi "solucionador" como um otimizador para problemas com soluções exclusivas, mas talvez eu esteja mal informado.
Sycorax diz Restabelecer Monica
Em geral, um solucionador de otimização é semelhante a um motor é dirigir. Eu chamaria Gurobi de solucionador, é como um motor. MATLAB é como uma marca de carro, é o nome para o ambiente geral.
Matthew Gunn
Normalmente, ouço o "solucionador" usado para descrever o software , o que significa que ele se aplica à implementação de um algoritmo. Geralmente, o termo será reservado para problemas matemáticos com uma "solução bem definida". Uma solução exclusiva é suficiente, como @Sycorax diz, e os solucionadores de Gurobi parecem ser os problemas dessa classe. Mas não acho que seja necessário um único, por exemplo, problemas de otimização local e global podem ter soluções bem definidas, mas não únicas.
GeoMatt22

Respostas:

4

Sugiro que um solucionador é:

  • um pacote de software
  • que incorpora um ou mais algoritmos
  • para encontrar soluções para uma ou mais classes de problemas

As classes de problema fazem parte disso. É um solucionador de X.

assim

  • Eu chamaria Gurobi de "um solucionador de MIP / LP" .
  • E eu diria "O Matlab incorpora um solucionador de QP, que é exposto pela função Quadprog". Nesse caso, o "QP solver" real pode ou não existir como um produto independente.
  • Concorde é um solucionador de TSP
  • Concorde incorpora QSopt, que é um solucionador de LP

Eu acho que esse uso está alinhado com (por exemplo) a documentação do JuMP

JuMP é uma linguagem de modelagem específica de domínio para otimização matemática incorporada na Julia. Atualmente, ele suporta vários solucionadores de código-fonte aberto e comerciais (veja abaixo) para uma variedade de classes de problemas, incluindo programação linear, programação com números inteiros mistos, programação cônica de segunda ordem, programação semidefinida e programação não-linear.

Aqui está uma lista de coisas que o JuMP chama de solucionadores . Nenhum deles é algoritmo, todos são programas específicos

Lyndon White
fonte
5

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.

Carl
fonte
Por que o sistema precisa ser determinado? Não pode ser sub-determinado? Por exemplo. chamando a maioria das rotinas de resolução de sistemas lineares emx+y=1retornará uma solução.
Matthew Gunn
@MatthewGunn Talvez, mas por x+y=1 alguém poderia usar um gerador de números aleatórios porque qualquer x irá gerar um y. Agora, suponho que alguém possa chamar um gerador de números aleatórios de "solucionador". No entanto, acho que você admitiria, é muito difícil fazê-lo. Geralmente, um solucionador faria algo mais orgânico com números aleatórios, se os usasse.
Carl
2
Um solucionador fornece uma solução. Se o problema for "RESOLVERx+y=1" então x=1,y=0é uma solução e pode retornar essa solução (ou qualquer outra solução)! Dito de outra maneira, o Python lstsqnão é um solucionador de sistemas linear porque pode resolver sistemas indeterminados?
Matthew Gunn
@MatthewGunn Além disso, métodos iterativos de regressão podem ser programados para resolver sistemas determinados, mas isso não os tornaria solucionadores, pois seu principal uso é para sistemas sobredeterminados.
Carl #
11
sim, eu concordo que estou sendo meticuloso e peço desculpas por isso. Se eu estivesse escrevendo a resposta, não incluiria o texto "para determinados sistemas". Caso contrário, porém, excelente resposta! (Por exemplo, um outro exemplo ... os solucionadores de problemas booleanos de satisfação quase sempre têm uma infinidade de soluções e o objetivo é simplesmente encontrar uma delas (nesses problemas, os sistemas são quase sempre indeterminados).
Matthew Gunn,
1

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]=sin[πx]2 tem um mínimo global f[k]=0 para kZ)

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ção F:RnRm, uma solução para o sistema de equações especificado por

F[x]=0
é um vetor xRn de modo que todos m componentes de F[x]são zero. Dependendo da funçãoF, não pode haver soluções, uma única solução única ou muitas soluções (geralmente muitas infinitas), dependendo da dimensão do espaço nulo deF. No caso em queF é linear, ie F[x]=Axb para alguns ARm×n,bRm, nenhuma solução poderá existir a menos que mrank[A]n.

Por outro lado, para uma determinada função objetiva EF:RnRe conjunto viável ΩFRn, que dependem de F, uma solução para o problema de otimização especificado por

ϵ=minxΩFEF[x]
é um vetor xΩF de tal modo que EF[x]EF[y] para todos yΩF.

Na otimização "mínimos quadrados", a função EFé uma soma de quadrados. Os dois problemas mais comuns de mínimos quadrados são 1)

EF[x]=F[x]2 , ΩF=Rn
onde corresponde a um sistema de equações sobredeterminado e 2) onde corresponde a um sistema de equações sub-determinado .F
EF[x]=x2 , ΩF={yRn F[y]=0}
F

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.

    • As idéias de exclusivo / não exclusivo ou exato / aproximado não são totalmente claras. Digamos que nos concentramos apenas no caso de sistemas quadrados de equações, que devem remover a maioria dos pontos de contenção. É onipresente falar de "solucionadores iterativos" nesse campo (por exemplo, ~ 600.000 acessos no Google Scholar ). Portanto, a definição de fato de "solucionador" deve incluir essa classe de algoritmos, que por definição são essencialmente inexatos.
GeoMatt22
fonte
No entanto, para mínimos quadrados ordinários lineares . A solução pode ser única, mas produz uma estimativa de erro mínima de , que geralmente é inadequada e geralmente não concorda com uma equação de geração bivariada usando a simulação de Monte Carlo, enquanto a regressão de Deming mais mal correlacionada recuperaria essa linha geradora mais ou menos a regressão erro. OLS(x)OLS(y)y
22416 Carl
Eu sinto que é um desserviço chamar OLS linear em ; uma aproximação válida apenas sob condições restritivas que geralmente são ignoradas como uma "solução", pois perpetua um mito que é enganoso. y
Carl
@ Carl Eu atualizei para tentar esclarecer. Não entendo seus comentários completamente, mas eles parecem estar se referindo à solução de problemas da "ciência aplicada", como inferência estatística ou previsão de aprendizado de máquina. Na minha experiência (bastante ampla na ciência computacional), "solucionador" é usado para se referir a software para resolver um problema puramente matemático . Você pode verificar um solucionador, mas isso não é o mesmo que validar um modelo. Se o seu problema de ciência aplicada não satisfizer as suposições do problema matemático escolhido, a falha na validação não se deve ao solucionador.
GeoMatt22
Você é um cookie inteligente! Nunca duvide disso. Vou ler sua resposta e contribuir, se puder. No seu comentário acima, os solventes podem ser validados facilmente, a regressão não tão facilmente. Você implica um paradoxo: "O que é ciência que não é aplicada?" A ciência é o resultado de testar hipóteses, seja por prova ou tentativa e erro. Resposta, toda ciência é aplicada.
20246 Carl
Os termos de V&V são padrão, por exemplo, verificação, validação e capacidade preditiva em engenharia e física computacional "Resumidamente, verificação é a avaliação da precisão da solução de um modelo computacional. Validação é a avaliação da precisão de uma simulação computacional em comparação com dados experimentais. Na verificação, o relacionamento da simulação com o mundo real não é um problema. Na validação, o relacionamento entre a computação e o mundo real, ou seja, dados experimentais, é o problema ".
GeoMatt22
0

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.Xf(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.

user3644640
fonte