Come posso automatizzare il processo di ottimizzazione del design di un oggetto fisico?


9

Sto cercando di ottimizzare un distributore di flusso in un serbatoio in modo tale che la distribuzione di velocità e temperatura su qualsiasi sezione trasversale sia relativamente uniforme. Esistono molti parametri che posso regolare sulla massima uniformità della sezione trasversale, come il numero di tubi di ingresso, la loro posizione, orientamento e direzione. So di poter creare diverse geometrie diverse e testarle singolarmente, ma ciò richiede molto tempo. Mi piacerebbe essere in grado di scrivere un programma in grado di testare ripetutamente più casi contemporaneamente (in parallelo) e di scegliere adattivamente una nuova serie di geometrie da testare in base ai risultati precedenti. Come posso farlo al meglio?


1
La parte di ricerca dei parametri, per me, è la parte facile. La parte non banale sta parametrizzando la geometria.
Geoff Oxberry,

Risposte:


4

Quello che vuoi fare è l'ottimizzazione della forma usando metodi basati sul gradiente. Significa essenzialmente che è necessario calcolare il gradiente della funzione obiettivo rispetto ai parametri del modello.

Per un numero limitato di parametri è possibile utilizzare FD, ma per un gran numero di parametri è necessario esaminare i metodi aggiunti. Se si utilizza un codice commerciale o il codice di qualcun altro che non è in grado di risolvere le equazioni aggiuntive, FD è l'unica opzione.

Consulta i libri di base sull'ottimizzazione della forma.

Modifica: per problemi strutturali FE è possibile consultare il libro di Choi e Kim I e II


Alcuni parametri sono solo numeri interi ... È ancora possibile applicare un approccio basato sul gradiente?
Paolo

Mi consiglia qualche buon tutorial / libro sull'ottimizzazione della forma?
Paolo

Per qualcosa di breve / semplice puoi leggere questo: acdl.mit.edu/mdo/mdo_06/EulerAdjoint.pdf . Come ho detto con FD è banale in quanto devi solo calcolare il gradiente (il che significa eseguire il tuo codice CFD un sacco di volte, a seconda del numero di parametri) e quindi utilizzare il gradiente per eseguire l'ottimizzazione. In genere sono necessarie alcune iterazioni prima che convergano le stime dei parametri. Per parametri di grandi dimensioni questo diventa costoso e dovrai ricorrere a metodi aggiuntivi per calcolare il gradiente.
stali,

Grazie, Stali. Questa è stata un'ottima introduzione ai metodi aggiunti.
Paul

5

Se si parametrizza la parte di costruzione della geometria in modo appropriato, questo è un problema di ottimizzazione della scatola nera con parametri discreti e continui misti.

DAKOTA http://dakota.sandia.gov/ e NOMAD http://www.gerad.ca/NOMAD/Project/Home.html sono due pacchetti utili che ti consentono di scegliere automaticamente le migliori selezioni di parametri. (DAKOTA ha un miglior supporto per le applicazioni, ma NOMAD probabilmente ha i migliori ottimizzatori.)

Per variare la geometria, introdurre un parametro discreto o continuo per ciascun controllo con cui si desidera influenzare la geometria e automatizzare la costruzione della geometria dalla raccolta di controlli. Si noti che i metodi senza derivati ​​sono piuttosto lenti in dimensioni elevate, quindi mantenere il numero di parametri ragionevolmente piccolo.

Dopo aver terminato di esplorare lo spazio con uno dei pacchetti di cui sopra, è possibile perfezionare l'analisi eseguendo un'ottimizzazione più accurata in cui vengono fissati tutti i parametri discreti e tutti i parametri continui per i quali non è possibile ottenere una derivata analitica. Ma è possibile aumentare il numero di parametri di forma continui rispetto ai quali è possibile calcolare derivati ​​analitici, in quanto un ottimizzatore basato sul gradiente (come IPOPT https://projects.coin-or.org/Ipopt ) può gestire in modo efficiente problemi molto più grandi .

Se non sai come ottenere la derivata ma la dipendenza è fluida, puoi prendere in considerazione l'utilizzo di un programma di differenziazione automatica o la codifica del problema continuo in AMPL, nel qual caso l'interfaccia del risolutore si prenderà cura dei derivati.

Per le basi sull'ottimizzazione della forma vedi, ad esempio, Haftka, RT e Grandhi, RV, ottimizzazione della forma trutturale - Un sondaggio, Computer Methods in Applied Mechanics and Engineering 57 (1986), 91-106. (Fidati della descrizione della modellazione; ma non usare i solutori che raccomandano, poiché la tecnologia di ottimizzazione è molto migliorata da quel momento.)


Quali approcci posso adottare per parametrizzare la geometria?
Paolo

Vedi l'aggiunta alla mia risposta.
Arnold Neumaier,

@Paul: ho appena corretto un errore sciocco nella mia scrittura - i parametri della geometria possono ovviamente essere discreti o continui!
Arnold Neumaier,


3

C'è anche l'ottimizzazione dello spazio aggiuntivo, che sembra essere molto più veloce dell'ottimizzazione parametrica standard in CFD. Recentemente ha avuto un grande aumento di popolarità all'interno della comunità CFD in generale, e in OpenFOAM in particolare. Attualmente stiamo organizzando un seminario su OpenFOAM e abbiamo ricevuto molte osservazioni astratte su questo metodo. Se sei interessato, controlla questo , per altre informazioni, basta google "ottimizzazione della forma dello spazio aggiunto in CFD".

Informazioni addizionali:

Se potessi usare OpenFOAM, esiste una libreria basata su Python che viene utilizzata proprio per questo, per manipolare una grande quantità di casi e modificare i loro parametri chiamati PyFoam . Per una geometria semplice, potresti definire una mesh come un semplice blocco Mesh e scorrere su ciò che desideri. Per un semplice caso, si tratta di scrivere alcuni loop in Python. Ecco come appare lo script se si modifica la velocità della condizione al contorno "inlet". Semplici modifiche alla geometria della mesh sarebbero alcune righe di codice in più ...


2

Avresti bisogno di:

  1. un ottimizzatore e
  2. uno strumento CFD che è abbastanza (flessibile) da gestire diversi progetti all'interno di un concetto concreto o addirittura appartenenti a concetti diversi.

Le seguenti funzioni sono cruciali per lo strumento CFD:

  • Alta efficienza di calcolo (velocità) al fine di trattare un elevato numero di progetti separati in un lasso di tempo ragionevole.
  • Elevata flessibilità e amabilità delle tecniche numeriche al fine di escludere l'intervento manuale nel processo di ricerca / analisi.
  • Manipolazione della geometria programmatica.

Quindi posso consigliare il seguente software:

  1. Insight Toolkit che fornisce un buon numero di ottimizzatori che possono essere associati
  2. Libreria di simulazione avanzata che offre

    • Alte prestazioni:

      • La libreria è accelerata dall'hardware, ovvero in grado di utilizzare hardware GPU o FPGA (se disponibile), il che significa 10-100 velocità rispetto a un programma basato su CPU. Anche sulla normale CPU utilizza funzionalità avanzate come SIMD.
      • Si basa su un approccio di compilazione dinamica, il che significa che non è necessario sacrificare le prestazioni per la flessibilità. Ciò si traduce in una velocità fino a 10 volte maggiore rispetto alla tecnica di compilazione standard.
      • ASL può essere utilizzato nell'infrastruttura del cluster e nei computer multi-GPU.
    • Alta flessibilità e amabilità:

      • Le tecniche numeriche senza mesh si basano su una griglia rettangolare e approcci al contorno immersi. Queste funzionalità consentono l' ottimizzazione automatica del design, poiché non è richiesta la generazione di mesh.
      • La libreria si basa su un approccio di compilazione dinamica, il che significa che non è necessario sacrificare le prestazioni per la flessibilità. Ciò consente di formulare un singolo algoritmo generale ed efficiente per diversi progetti / concetti.
    • Generazione e manipolazione di primitivi geometrici .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.