Estou tentando otimizar um distribuidor de fluxo em um tanque, para que a distribuição de velocidade e temperatura em qualquer seção transversal seja relativamente uniforme. Existem muitos parâmetros que posso ajustar para a máxima uniformidade da seção transversal, como o número de tubos de entrada, sua posição, orientação e direção. Sei que posso criar várias geometrias diferentes e testar cada uma individualmente, mas isso consome muito tempo. Gostaria de poder escrever um programa que possa testar iterativamente vários casos ao mesmo tempo (em paralelo) e escolher de forma adaptativa um novo conjunto de geometrias para testar com base nos resultados anteriores. Como posso fazer isso da melhor maneira?
optimization
Paulo
fonte
fonte
Respostas:
O que você quer fazer é otimizar a forma usando métodos baseados em gradiente. Essencialmente, significa que você precisa calcular o gradiente da função objetivo escrita nos parâmetros do seu modelo.
Para um pequeno número de parâmetros, você pode usar o FD, mas para um grande número de parâmetros, é necessário procurar métodos adjuntos. Se você estiver usando um código comercial ou o código de outra pessoa que não possa resolver as equações adjuntas, FD é sua única opção.
Veja os livros básicos de otimização de formas básicas.
Edit: Para problemas estruturais de FE, você pode conferir o livro de Choi e Kim I e II
fonte
Se você parametrizar adequadamente sua peça de construção geométrica, isso é um problema de otimização de caixa preta com parâmetros contínuos e discretos.
DAKOTA http://dakota.sandia.gov/ e NOMAD http://www.gerad.ca/NOMAD/Project/Home.html são dois pacotes úteis que permitem escolher automaticamente as melhores seleções de parâmetros. (O DAKOTA possui melhor suporte a aplicativos, mas o NOMAD provavelmente possui os melhores otimizadores.)
Para variar a geometria, introduza um parâmetro discreto ou contínuo para cada controle com o qual você deseja influenciar a geometria e automatize a construção da geometria a partir da coleção de controles. Observe que os métodos sem derivativos são muito lentos em altas dimensões, portanto, mantenha o número de parâmetros razoavelmente pequeno.
Depois de terminar de explorar o espaço com um dos pacotes acima, você pode refinar a análise fazendo uma otimização mais precisa, na qual todos os parâmetros discretos e todos os parâmetros contínuos são fixados, dos quais não é possível obter uma derivada analítica. Mas você pode aumentar o número de parâmetros de forma contínua em relação aos quais pode calcular derivadas analíticas, pois um otimizador baseado em gradiente (como o IPOPT https://projects.coin-or.org/Ipopt ) pode lidar com problemas muito maiores .
Se você não souber como obter a derivada, mas a dependência for suave, considere usar um programa de diferenciação automática ou codificar seu problema contínuo no AMPL; nesse caso, a interface do solucionador cuidará das derivadas.
Para o básico sobre otimização de formas, ver, por exemplo, Haftka, RT e Grandhi, RV, otimização de formas truturais - Uma pesquisa, Computer Methods in Applied Mechanics and Engineering 57 (1986), 91-106. (Confie na descrição da modelagem; mas não use os solucionadores que recomendam, pois a tecnologia de otimização melhorou muito desde então.)
fonte
No que diz respeito à parametrização da geometria (como Geoff apontou que não é trivial) - posso sinceramente recomendar Brenda Kulfan - Método Universal de Representação de Geometria Paramétrica, J. Aircraft, Vol.45, No.1.2008 .
A abordagem descrita é aplicável na otimização aerodinâmica de aeronaves.
fonte
Também há otimização de espaço adjacente, que parece ser muito mais rápida que a otimização paramétrica padrão no CFD. Recentemente, teve um grande aumento de popularidade na comunidade CFD em geral, e no OpenFOAM, especialmente. No momento, estamos organizando um workshop sobre o OpenFOAM e recebemos muitas submissões abstratas sobre esse método. Se você estiver interessado, verifique isso , para outras informações, basta pesquisar no google "otimização de forma de espaço adjacente em CFD".
Informação adicional:
Se você pudesse usar o OpenFOAM, existe uma biblioteca baseada em Python usada para isso, para manipular uma grande quantidade de casos e alterar seus parâmetros chamados PyFoam . Para uma geometria simples, você pode definir uma malha como um simples blockMesh e iterar sobre o que quiser. Para um caso simples, trata-se de escrever alguns loops em Python. Veja como o script se parece se você alterar a velocidade da condição de limite de "entrada". Alterações simples na geometria da malha seriam mais algumas linhas de código ...
fonte
Você precisaria de:
Os seguintes recursos são cruciais para a ferramenta CFD:
Então, eu posso recomendar o seguinte software:
Biblioteca de simulação avançada que oferece
Alta performance:
Alta flexibilidade e compatibilidade:
Geração e manipulação de primitivas geométricas .
fonte