Decidi editar radicalmente minha resposta com base em alguns dos comentários.
Eu não usei TAO. Ao examinar a documentação, parece que a única maneira pela qual o TAO pode lidar com problemas de otimização restrita (excluindo o caso especial de apenas restrições de caixa) é converter o problema em uma desigualdade variacional usando as condições de Karush-Kuhn-Tucker (KKT) , que são necessários sob a qualificação de restrição (o tipo que geralmente vejo é a condição do ponto Slater ) e suficiente sob a convexidade do objetivo e das restrições (mais geralmente, a invexidade do tipo 1). Sefnão é convexa, a formulação da desigualdade variacional usando as condições KKT NÃO é equivalente ao problema de otimização original; portanto, estritamente falando, se você deseja um ótimo global para o problema de otimização, não deve expressá-lo como uma desigualdade variacional. De qualquer maneira, seria difícil encontrar um ótimo global para a otimização com restrição de PDE (veja abaixo); portanto, talvez seja bom ignorar esses detalhes. Dado o que Wolfgang disse, eu ficaria cético em usar o TAO; Eu já sou cético porque ele não implementa métodos para resolver programas não lineares (PNL) como PNL, em vez de desigualdades variacionais.
Eu não sou especialista em otimização com restrição de PDE; colegas de trabalho e associados da mina trabalham em problemas de otimização restritos à ODE. Sei que, para formulações intrusivas, Larry Biegler (e outros) usará métodos de colocação para discretizar o PDE e torná-lo uma PNL muito grande e esparsa, e ele o resolverá usando métodos de pontos interiores. Para realmente resolver o problema da otimização global, você também precisará gerar relaxações convexas, mas, tanto quanto eu sei, essa abordagem não é adotada porque os problemas de otimização restritos ao PDE levam a PNLs tão grandes que seria difícil resolvê-los. otimização global. Menciono esses detalhes apenas porque a formulação do problema influencia fortemente a escolha do pacote do solucionador. Para formulações não intrusivas, a PDE repetida resolve informações de gradiente para algoritmos de otimização.
Algumas pessoas que estudam problemas de otimização com restrição de EDO usam uma abordagem semelhante para discretizar o problema usando a colocação e um método numérico e depois relaxam a PNL resultante para produzir uma formulação convexa usada em um algoritmo de otimização global. Uma abordagem alternativa à otimização com restrição de ODE é relaxar o problema e depois discretizar a ODE, que é a abordagem adotada em meu laboratório. Pode ser possível relaxar certas classes de problemas de otimização restritos ao PDE, mas não conheço nenhum trabalho existente feito sobre esse problema. (Foi um projeto em potencial em meu laboratório em um ponto.)
Por fim, o que importa não é a diferenciabilidade do PDE original, mas a diferenciabilidade da discretização em relação às variáveis de decisão.
Se o problema discretizado for diferenciável duas vezes em relação às variáveis de decisão, os seguintes pacotes calcularão uma solução local:
- IPOPT é um solucionador de pontos interiores de código aberto desenvolvido por Andreas Wächter na IBM. É um código de qualidade muito alta. Como solucionador de pontos internos, é melhor para funções objetivas com matrizes jacobianas grandes e esparsas e seria útil para otimização com restrição de PDE
- O SNOPT é um solucionador de programação quadrática seqüencial comercial que é outro código de alta qualidade. É melhor para funções objetivas com matrizes jacobianas pequenas e densas, então eu não esperaria que fosse útil para otimização com restrição de PDE, mas você pode tentar.
- NLopt é um pequeno código-fonte aberto escrito por Steven Johnson no MIT que contém implementações básicas de vários algoritmos de otimização não-lineares. Todos os algoritmos devem ser adequados para resolver problemas de restrição de limites.
fmincon
no Matlab implementa vários algoritmos (incluindo ponto interior e programação quadrática sequencial) para otimização não linear
- GAMS e AMPL são linguagens de modelagem comerciais usadas para formular problemas de otimização e contêm interfaces para um grande número de solucionadores de programação não-lineares. Sei que o GAMS possui uma versão de avaliação que pode ser usada para problemas menores e as instâncias de problemas também podem ser enviadas ao servidor NEOS para solução também.
No entanto, é possível que a discretização seja diferenciada apenas uma vez em relação às variáveis de decisão; nesse caso, você deve usar a descida mais íngreme projetada ou algum outro método de otimização de primeira ordem ao calcular uma solução local. Como muitos estudos se concentram em problemas nos quais métodos de segunda ordem podem ser usados (e quando você pode usá-los, suas propriedades de convergência superiores os tornam uma escolha melhor), não consegui encontrar muitas implementações de descidas mais íngremes que não fossem soluções problemas de lição de casa. A Biblioteca Científica GNU tem uma implementação, mas é apenas para fins de demonstração. Você provavelmente precisaria codificar sua própria implementação.
Se o problema for contínuo apenas em relação às variáveis de decisão, você poderá usar métodos diretos para resolvê-lo localmente. Há uma excelente pesquisa sobre métodos diretos de Kolda, Lewis e Torczon . O mais conhecido desses métodos é o algoritmo simplex Nelder-Mead . Não é garantido que converja para um mínimo local em várias dimensões, mas encontrou um uso prático considerável de qualquer maneira.
A escolha do pacote realmente depende da linguagem que você deseja usar para resolver o problema, se a solução do problema com restrição de limite for apenas parte de um algoritmo que você deseja implementar (ou se é a única etapa do algoritmo, nesse caso, linguagens de modelagem se tornar mais viável para o código de produção), o tipo e tamanho do problema e se você precisar de algum paralelismo.