Comment automatiser le processus d'optimisation de la conception d'un objet physique?

9

J'essaie d'optimiser un distributeur de débit dans un réservoir de telle sorte que la distribution de la vitesse et de la température à travers n'importe quelle section transversale soit relativement uniforme. Il y a de nombreux paramètres que je peux ajuster à l'uniformité transversale maximale, tels que le nombre de tuyaux d'entrée, leur position, leur orientation et leur direction. Je sais que je peux créer un certain nombre de géométries différentes et les tester individuellement, mais cela prend beaucoup de temps. J'aimerais pouvoir écrire un programme qui peut tester plusieurs cas à la fois (en parallèle), et choisir de manière adaptative un nouvel ensemble de géométries à tester en fonction des résultats précédents. Comment puis-je faire cela au mieux?

Paul
la source
1
La partie de recherche de paramètres, pour moi, est la partie facile. La partie non triviale est le paramétrage de la géométrie.
Geoff Oxberry

Réponses:

4

Ce que vous voulez faire, c'est optimiser la forme en utilisant des méthodes basées sur un gradient. Cela signifie essentiellement que vous devez calculer le gradient de la fonction objectif par rapport aux paramètres de votre modèle.

Pour un petit nombre de paramètres, vous pouvez utiliser FD, mais pour un grand nombre de paramètres, vous devez examiner les méthodes adjointes. Si vous utilisez un code commercial ou le code de quelqu'un d'autre qui ne peut pas résoudre les équations adjointes, FD est votre seule option.

Consultez les livres de base sur l'optimisation des formes de base.

Edit: Pour les problèmes structurels FE, vous pouvez consulter le livre de Choi et Kim I et II

stali
la source
Certains paramètres ne sont que des nombres entiers ... Une approche basée sur un gradient peut-elle toujours s'appliquer?
Paul
Recommandez-vous de bons tutoriels / livres sur l'optimisation des formes?
Paul
Pour quelque chose de court / simple, vous pouvez lire ceci: acdl.mit.edu/mdo/mdo_06/EulerAdjoint.pdf . Comme je l'ai dit avec FD, c'est trivial car il suffit de calculer le gradient (c'est-à-dire d'exécuter votre code CFD plusieurs fois, en fonction du nombre de paramètres), puis d'utiliser le gradient pour effectuer l'optimisation. En règle générale, il faut quelques itérations avant que les estimations des paramètres convergent. Pour les grands paramètres, cela coûte cher et vous devrez recourir à des méthodes adjointes pour calculer le gradient.
stali
Merci, Stali. C'était une très bonne introduction aux méthodes adjointes.
Paul
5

Si vous paramétrez correctement votre pièce de construction géométrique, il s'agit d'un problème d'optimisation de boîte noire avec des paramètres mixtes discrets et continus.

DAKOTA http://dakota.sandia.gov/ et NOMAD http://www.gerad.ca/NOMAD/Project/Home.html sont deux packages utiles qui vous permettent de choisir automatiquement les meilleures sélections de paramètres. (DAKOTA a un meilleur support d'application, mais NOMAD a probablement les meilleurs optimiseurs.)

Pour faire varier la géométrie, introduisez un paramètre discret ou continu pour chaque contrôle avec lequel vous souhaitez influencer la géométrie et automatisez la construction de la géométrie à partir de la collection de contrôles. Notez que les méthodes sans dérivé sont assez lentes dans les dimensions élevées, donc gardez le nombre de paramètres raisonnablement petit.

Après avoir fini d'explorer l'espace avec l'un des packages ci-dessus, vous pouvez affiner l'analyse en effectuant une optimisation plus précise dans laquelle tous les paramètres discrets et tous les paramètres continus sont fixés pour lesquels vous ne pouvez pas obtenir de dérivé analytique. Mais vous pouvez augmenter le nombre de paramètres de forme continue par rapport auxquels vous pouvez calculer des dérivés analytiques, car un optimiseur basé sur un gradient (tel que IPOPT https://projects.coin-or.org/Ipopt ) peut gérer efficacement des problèmes beaucoup plus importants .

Si vous ne savez pas comment obtenir le dérivé mais que la dépendance est fluide, vous pouvez envisager d'utiliser un programme de différenciation automatique ou de coder votre problème continu dans AMPL, auquel cas l'interface du solveur prendra en charge les dérivés.

Pour les bases de l'optimisation de forme, voir, par exemple, Haftka, RT et Grandhi, RV, optimisation de forme structurelle - Une étude, Méthodes informatiques en mécanique appliquée et en génie 57 (1986), 91-106. (Faites confiance à la description de la modélisation; mais n'utilisez pas les solveurs qu'ils recommandent, car la technologie d'optimisation s'est beaucoup améliorée depuis lors.)

Arnold Neumaier
la source
Quelles approches puis-je adopter pour paramétrer la géométrie?
Paul
Voir l'ajout à ma réponse.
Arnold Neumaier
@Paul: Je viens de corriger une erreur stupide dans mon écriture - les paramètres de géométrie peuvent bien sûr être discrets ou continus!
Arnold Neumaier
3

Il y a aussi l'optimisation de l'espace adjoint, qui semble être beaucoup plus rapide que l'optimisation paramétrique standard dans CFD. Récemment, il a eu une grande augmentation de popularité au sein de la communauté CFD en général, et dans OpenFOAM en particulier. Nous organisons actuellement un atelier sur OpenFOAM et nous avons reçu de nombreuses soumissions de résumés concernant cette méthode. Si vous êtes intéressé, vérifiez ceci , pour d'autres informations, google "optimisation de la forme de l'espace adjoint dans CFD".

Information additionnelle:

Si vous pouviez utiliser OpenFOAM, il existe une bibliothèque basée sur Python qui est utilisée pour une telle chose, pour manipuler une grande quantité de cas et changer leurs paramètres appelés PyFoam . Pour une géométrie simple, vous pouvez définir un maillage comme un simple blockMesh et répéter ce que vous voulez. Pour un cas simple, il s'agit d'écrire quelques boucles en Python. Voici à quoi ressemble le script si vous modifiez la vitesse des conditions aux limites "d'entrée". De simples changements de géométrie de maillage constitueraient quelques lignes de code supplémentaires ...

tmarique
la source
2

Vous auriez besoin de:

  1. un optimiseur et
  2. un outil CFD suffisamment capable (flexible) pour gérer différentes conceptions au sein d'un concept concret ou même appartenir à différents concepts.

Les fonctionnalités suivantes sont cruciales pour l'outil CFD:

  • Haute efficacité de calcul (vitesse) afin de traiter une grande quantité de conceptions distinctes dans un délai raisonnable.
  • Grande flexibilité et convivialité des techniques numériques afin d'exclure toute intervention manuelle dans le processus de recherche / analyse.
  • Manipulation de la géométrie programmatique.

Je peux donc recommander les logiciels suivants:

  1. Insight Toolkit qui fournit un bon nombre d’optimiseurs pouvant être couplés à
  2. Bibliothèque de simulation avancée qui offre

    • Haute performance:

      • La bibliothèque est accélérée matériellement, c'est-à-dire capable d'utiliser du matériel GPU ou FPGA (si disponible), ce qui signifie une accélération de 10 à 100 par rapport au programme basé sur le processeur. Sur le CPU normal, il utilise également des fonctionnalités avancées telles que SIMD.
      • Il est basé sur une approche de compilation dynamique, ce qui signifie qu'il n'est pas nécessaire de sacrifier les performances pour la flexibilité. Cela se traduit par une accélération jusqu'à 10 fois par rapport à la technique de compilation standard.
      • ASL peut être utilisé dans une infrastructure de cluster et dans des ordinateurs multi-GPU.
    • Haute flexibilité et convivialité:

      • Les techniques numériques sans maillage sont basées sur une grille rectangulaire et des approches aux limites immergées. Ces fonctionnalités permettent une optimisation de conception automatisée , car aucune génération de maillage n'est requise.
      • La bibliothèque est basée sur une approche de compilation dynamique, ce qui signifie qu'il n'est pas nécessaire de sacrifier les performances pour la flexibilité. Cela permet de formuler un algorithme général et efficace unique pour différents modèles / concepts.
    • Génération et manipulation de primitives géométriques .

user1876484
la source