Wie kann ich den Prozess der Optimierung des Designs eines physischen Objekts automatisieren?


9

Ich versuche, einen Strömungsverteiler in einem Tank so zu optimieren, dass die Geschwindigkeits- und Temperaturverteilung über einen beliebigen Querschnitt relativ gleichmäßig ist. Es gibt viele Parameter, die ich an die maximale Gleichmäßigkeit des Querschnitts anpassen kann, wie z. B. die Anzahl der Einlassrohre, ihre Position, Ausrichtung und Richtung. Ich weiß, dass ich verschiedene Geometrien erstellen und jede einzeln testen kann, aber das ist sehr zeitaufwändig. Ich möchte in der Lage sein, ein Programm zu schreiben, das mehrere Fälle gleichzeitig (parallel) iterativ testen und adaptiv einen neuen Satz von Geometrien zum Testen basierend auf den vorherigen Ergebnissen auswählen kann. Wie kann ich das am besten machen?


1
Der Teil der Parametersuche ist für mich der einfache Teil. Der nicht triviale Teil parametrisiert die Geometrie.
Geoff Oxberry

Antworten:


4

Was Sie tun möchten, ist die Formoptimierung mit gradientenbasierten Methoden. Dies bedeutet im Wesentlichen, dass Sie den Gradienten der Zielfunktion anhand Ihrer Modellparameter berechnen müssen.

Für eine kleine Anzahl von Parametern können Sie FD verwenden, für eine große Anzahl von Parametern müssen Sie jedoch die zugehörigen Methoden untersuchen. Wenn Sie einen kommerziellen Code oder den Code einer anderen Person verwenden, der die zugehörigen Gleichungen nicht lösen kann, ist FD Ihre einzige Option.

Schauen Sie sich die grundlegenden Bücher zur Optimierung der Grundform an.

Bearbeiten: Für strukturelle FE-Probleme können Sie das Buch von Choi und Kim I und II lesen


Einige der Parameter sind nur Ganzzahlen ... Kann ein gradientenbasierter Ansatz weiterhin angewendet werden?
Paul

Empfehlen Sie gute Tutorials / Bücher zur Formoptimierung?
Paul

Für etwas Kurzes / Einfaches können Sie dies lesen: acdl.mit.edu/mdo/mdo_06/EulerAdjoint.pdf . Wie ich bereits sagte, ist es bei FD trivial, da Sie nur den Gradienten berechnen müssen (dh Ihren CFD-Code abhängig von der Anzahl der Parameter einige Male ausführen müssen) und dann den Gradienten verwenden, um die Optimierung durchzuführen. Normalerweise dauert es einige Iterationen, bis die Parameterschätzungen konvergieren. Bei großen Parametern wird dies teuer und Sie müssen auf benachbarte Methoden zurückgreifen, um den Gradienten zu berechnen.
stali

Danke, stali. Das war eine sehr gute Einführung in adjungierte Methoden.
Paul

5

Wenn Sie Ihr Geometriekonstruktionsteil entsprechend parametrisieren, ist dies ein Problem der Black-Box-Optimierung mit gemischten diskreten und kontinuierlichen Parametern.

DAKOTA http://dakota.sandia.gov/ und NOMAD http://www.gerad.ca/NOMAD/Project/Home.html sind zwei nützliche Pakete, mit denen Sie automatisch die besten Parameter auswählen können. (DAKOTA hat eine bessere Anwendungsunterstützung, aber NOMAD hat wahrscheinlich die besseren Optimierer.)

Um die Geometrie zu variieren, geben Sie für jedes Steuerelement, mit dem Sie die Geometrie beeinflussen möchten, einen diskreten oder kontinuierlichen Parameter ein und automatisieren Sie die Konstruktion der Geometrie aus der Sammlung von Steuerelementen. Beachten Sie, dass derivatfreie Methoden in hohen Dimensionen ziemlich langsam sind. Halten Sie daher die Anzahl der Parameter relativ klein.

Nachdem Sie den Raum mit einem der oben genannten Pakete erkundet haben, können Sie die Analyse verfeinern, indem Sie eine genauere Optimierung durchführen, bei der alle diskreten Parameter und alle kontinuierlichen Parameter festgelegt sind, für die Sie keine analytische Ableitung erhalten können. Sie können jedoch die Anzahl der kontinuierlichen Formparameter erhöhen, für die Sie analytische Ableitungen berechnen können, da ein gradientenbasierter Optimierer (wie IPOPT https://projects.coin-or.org/Ipopt ) weitaus größere Probleme effizient lösen kann .

Wenn Sie nicht wissen, wie Sie die Ableitung erhalten, die Abhängigkeit jedoch reibungslos ist, können Sie ein automatisches Differenzierungsprogramm verwenden oder Ihr kontinuierliches Problem in AMPL codieren. In diesem Fall kümmert sich die Solver-Schnittstelle um die Ableitungen.

Zu den Grundlagen der Formoptimierung siehe z. B. Haftka, RT und Grandhi, RV, Strukturformoptimierung - Eine Übersicht, Computer Methods in Applied Mechanics and Engineering 57 (1986), 91-106. (Vertrauen Sie der Beschreibung der Modellierung; verwenden Sie jedoch nicht die von ihnen empfohlenen Löser, da sich die Optimierungstechnologie seitdem erheblich verbessert hat.)


Welche Ansätze kann ich zur Parametrisierung der Geometrie wählen?
Paul

Siehe den Zusatz zu meiner Antwort.
Arnold Neumaier

@Paul: Ich habe gerade einen dummen Fehler in meinem Schreiben korrigiert - Geometrieparameter können natürlich diskret oder kontinuierlich sein!
Arnold Neumaier


3

Es gibt auch eine adjungierte Raumoptimierung, die viel schneller zu sein scheint als die standardmäßige parametrische Optimierung in CFD. In letzter Zeit hat die Popularität in der CFD-Community im Allgemeinen und in OpenFOAM im Besonderen stark zugenommen. Wir organisieren derzeit einen Workshop zu OpenFOAM und haben viele abstrakte Beiträge zu dieser Methode erhalten. Wenn Sie interessiert sind, überprüfen Sie dies , für weitere Informationen, googeln Sie einfach "adjungierte Raumformoptimierung in CFD".

Zusätzliche Information:

Wenn Sie OpenFOAM verwenden könnten, gibt es eine Python-basierte Bibliothek, die für genau solche Zwecke verwendet wird, um eine große Anzahl von Fällen zu bearbeiten und deren Parameter namens PyFoam zu ändern . Für eine einfache Geometrie können Sie ein Netz als einfaches blockMesh definieren und über alles iterieren, was Sie möchten . In einem einfachen Fall geht es darum, einige Schleifen in Python zu schreiben. So sieht das Skript aus, wenn Sie die Geschwindigkeit der Einlassgrenzbedingung ändern. Einfache Änderungen der Netzgeometrie wären ein paar weitere Codezeilen ...


2

Du bräuchtest:

  1. ein Optimierer und
  2. Ein CFD-Tool, das in der Lage (flexibel) genug ist, unterschiedliche Designs innerhalb eines konkreten Konzepts zu verarbeiten oder sogar zu unterschiedlichen Konzepten zu gehören.

Folgende Funktionen sind für das CFD-Tool von entscheidender Bedeutung:

  • Hohe Recheneffizienz (Geschwindigkeit), um eine große Anzahl separater Designs in einem angemessenen Zeitrahmen zu behandeln.
  • Hohe Flexibilität und Liebenswürdigkeit der numerischen Techniken, um manuelle Eingriffe in den Such- / Analyseprozess auszuschließen.
  • Manipulation der programmatischen Geometrie.

Daher kann ich folgende Software empfehlen:

  1. Insight Toolkit , das eine Reihe von Optimierern bietet, mit denen gekoppelt werden kann
  2. Erweiterte Simulationsbibliothek , die bietet

    • Hochleistung:

      • Die Bibliothek ist hardwarebeschleunigt, dh sie kann GPU- oder FPGA-Hardware (falls verfügbar) verwenden, was eine Beschleunigung von 10 bis 100 gegenüber CPU-basierten Programmen bedeutet. Auch auf der regulären CPU werden erweiterte Funktionen wie SIMD verwendet.
      • Es basiert auf einem dynamischen Kompilierungsansatz, sodass keine Leistungseinbußen für die Flexibilität erforderlich sind. Dies führt zu einer bis zu 10-fachen Beschleunigung gegenüber der Standardkompilierungstechnik.
      • ASL kann in der Clusterinfrastruktur und in Computern mit mehreren GPUs verwendet werden.
    • Hohe Flexibilität und Liebenswürdigkeit:

      • Die netzfreien numerischen Techniken basieren auf rechteckigen Gittern und eingetauchten Grenzansätzen. Diese Funktionen ermöglichen eine automatisierte Entwurfsoptimierung, da keine Netzgenerierung erforderlich ist.
      • Die Bibliothek basiert auf einem dynamischen Kompilierungsansatz, sodass die Leistung nicht für Flexibilität beeinträchtigt werden muss. Dies ermöglicht die Formulierung eines einzigen allgemeinen und effizienten Algorithmus für verschiedene Designs / Konzepte.
    • Erzeugung und Manipulation von geometrischen Grundelementen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.