Como automatizar o processo de otimização do design de um objeto físico?

9

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?

Paulo
fonte
11
A parte de pesquisa de parâmetros, para mim, é a parte mais fácil. A parte não trivial está parametrizando a geometria.
Geoff Oxberry

Respostas:

4

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

stali
fonte
Alguns dos parâmetros são apenas números inteiros ... Uma abordagem baseada em gradiente ainda pode ser aplicada?
Paul
Você recomenda bons tutoriais / livros sobre otimização de formas?
Paul
Para algo curto / simples, você pode ler o seguinte: acdl.mit.edu/mdo/mdo_06/EulerAdjoint.pdf . Como eu disse com o FD, é trivial, pois você só precisa calcular o gradiente (ou seja, executar seu código CFD várias vezes, dependendo do número de parâmetros) e, em seguida, usar o gradiente para realizar a otimização. Normalmente, são necessárias algumas iterações antes da convergência das estimativas de parâmetro. Para parâmetros grandes, isso fica caro e você terá que recorrer a métodos adjuntos para calcular o gradiente.
Stali #
Obrigado, Stali. Essa foi uma introdução muito boa aos métodos adjuntos.
Paul
5

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.)

Arnold Neumaier
fonte
Que abordagens posso adotar para parametrizar a geometria?
Paul
Veja a adição à minha resposta.
Arnold Neumaier
@ Paul: Acabei de corrigir um erro bobo na minha escrita - os parâmetros de geometria podem, é claro, ser discretos ou contínuos!
Arnold Neumaier
3

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

tmaric
fonte
2

Você precisaria de:

  1. um otimizador e
  2. uma ferramenta CFD capaz (flexível) o suficiente para lidar com projetos diferentes dentro de um conceito concreto ou mesmo pertencer a conceitos diferentes.

Os seguintes recursos são cruciais para a ferramenta CFD:

  • Alta eficiência computacional (velocidade) para tratar uma grande quantidade de projetos separados em um período de tempo razoável.
  • Alta flexibilidade e facilidade de utilização das técnicas numéricas para excluir a intervenção manual no processo de busca / análise.
  • Manipulação de geometria programática.

Então, eu posso recomendar o seguinte software:

  1. Insight Toolkit, que fornece um bom número de otimizadores que podem ser combinados com
  2. Biblioteca de simulação avançada que oferece

    • Alta performance:

      • A biblioteca é acelerada por hardware, ou seja, capaz de utilizar hardware GPU ou FPGA (se disponível), o que significa 10 a 100 velocidades versus programa baseado em CPU. Também na CPU comum, ele usa recursos avançados, como SIMD.
      • É baseado na abordagem de compilação dinâmica, o que significa que não há necessidade de sacrificar o desempenho por flexibilidade. Isso resulta em até 10 vezes a aceleração em relação à técnica de compilação padrão.
      • O ASL pode ser usado na infraestrutura de cluster e em computadores com várias GPUs.
    • Alta flexibilidade e compatibilidade:

      • As técnicas numéricas sem malha são baseadas em grade retangular e abordagens de limites imersos. Esses recursos permitem a otimização automatizada do projeto, uma vez que não é necessária geração de malha.
      • A biblioteca é baseada na abordagem de compilação dinâmica, o que significa que não há necessidade de sacrificar o desempenho por flexibilidade. Isso permite formular um algoritmo geral e eficiente único para diferentes projetos / conceitos.
    • Geração e manipulação de primitivas geométricas .

user1876484
fonte