OpenCAE初歩情報交換会@ 北東北 in 岩大 2015/07/12 無料最適化関連ツールの調査 OpenCAE情報交換会 SH 本日の発表内容 • ① 最適化ツールは何に使うのか(最適化ツール概要)? • ② CAEの商用最適化ツール(PIDOツール) • ③ オープンソース Dakota調査 -Dakotaと各ツールとの連携 -Dakota GUIツール:Jaguar • ④ オープンソース OpenMDAO調査 • ⑤ 無料の形状自動作成・修正ツール調査 • ⑥ 無料のデータ結果可視化・統計分析ツール • ⑦ OpenFOAMのAdjoint法形状最適化機能 最適化ツールは何に使うの? 最適化手法/最適化アルゴリズムとは? → 何かの目標値を最大化または最小化するためのやり方、手順 -最適化手法の例 制御工学:変分法、最大原理、動的計画法 応用数学: 線形計画法 LP(Simplex法, 内点法) 非線形最適化法 NLP -制約条件無し:最急降下法,Newton法,共役勾配法(CG法) -制約条件有り:ペナルティ関数法,逐次2次計画法(SQP法) 経営工学:整数計画法,ミニマックス問題,ゲーム理論 情報工学:ニューラルネットワーク(NN), 進化戦略(ES), 遺伝的アルゴリスム(GA), 遺伝的プログラミング(GP) 人工生命, シュミレーテッドアニーリング(SA),PSO 3 最適化ツールは何に使うの? • 最適化の手法は腐るほどあり、またどんどんあたらしい手法 が提案されていますが、大きく分けて、目的値や変数を連続 量(実数連続関数)として扱う方法(古典的な方法とか数理 計画法とか呼ばれている)と、離散値(整数,2進数など)とし て扱う方法(一種の組み合わせ最適化問題, 例)遺伝的アル ゴリズムGAなど)があります。 • 特徴として以下のような特徴があります 特徴 具体手法 古典手法 (数理計画法) 計算量:少ない 勾配情報が必要 局所最適解に収束 データ:連続関数(実数) SQP(逐次2次計画法) ラグランジュ乗数法 ペナルティ法 最近の手法 (ヒューリスティックアプ ローチ) 計算量:多い 勾配情報不要 大域最適解に収束できる かもしれない? データ:離散値(整数) GA(遺伝的アルゴリズム) SA(焼きなまし法) PSO(粒子群最適化) (参考)最適化で用いられる用語 -最適化:構造、寸法、状態、方法、過程などを最も目的に 良く合致させること -設計変数(説明変数):最適化を行う際に変化可能な変数 (例:寸法、材料、荷重) -目的関数(評価関数):目標の達成度合いを示す関数 (例:軽量化(質量)、最短化(時間)、応力最小化(応力)) -制約条件:最適化問題に課せられる条件 (例:最大応力○ ○ 以下、金額、時間) -大域的最適化:解の全空間での最適化 -局所最適化:ローカルな最適化を行う -単一目的最適化と多目的最適化 (参考)大域的(Global)最適化と局所(Local)最適 Y 大域的最適点 局所最適点 初期探索点 X Xの可能範囲 -局所最適化:ある部分での局所的な最適化 数理計画法などの古典的手法が確立 -大域的最適化:解の全空間での最適化 => 数理計画法などの古典的な局所的最適解を求める アルゴリズムでは、大域的な最適解を得ることは難しい。 => GA, SA などの手法が用いられる。 (参考)単一目的最適化と多目的最適化 目的関数1 Y1 Y1,Y2 関数1最適点 目的関数2 Y2 関数2最適点 X パレート最適解 Xの可能範囲 -単一の目的関数を持つ場合には唯一の最適解が存在する場合 でも、多目的最適化問題では、2つ以上の目的関数が単一の 最適解を持つことはあまり無い。 => 多目的最適化問題では、他の部分より良いという意味で 最適解の集合を求め、これらをパレート最適解と呼ぶ。 多目的最適化アルゴリズム => スカラー化, 優先順位法 などの手法が用いられる。 シミュレーション最適化手法 -解析分野から見た最適化手法の分類具体的な解析手法: -パラメータ(寸法)最適化問題(有限個のパラメータ): 1)近似モデルを用いない ・GAなどの評価関数の勾配を用いないアルゴリズム +FEMプログラムの自動反復による最適化(汎用的) 2)近似モデルを用いる ・応答曲面法(RSM), 品質工学(タグチメソッド) ・感度解析,確率有限要素法, テーラ級数近似(線形問題) -形状最適化問題: ・Basis Vector法(Nastranなどのプログラムに装備) ベーシスベクトル法は、設計が考えられる基本形状候補 (ベーシスベクトル)の組み合わせにより最適形状を求める手法 (力法 (Azegami et al.,1994) システム応力の一様化) -位相最適化問題 密度法・均質化法(菊池 他, Quint) 平均コンプライアンスの最小化 [→類似手法:FSD(全応力設計法) 構成部材応力を許容値以下] 8 シミュレーション最適化手法の概要 構造解析分野から見た最適化手法の分類 形態による分類: -パラメータ(寸法)最適化問題:寸法、材料物性などパラメータを最適化 -形状最適化問題:位相を維持しつつ形状(物体境界位置)を最適化 -位相最適化問題:位相幾何学形状を最適化 ノンパラメトリック最適化 Adjoint法はこっち(設計変数が無限) DAKOTAやOpenMDAOはパラメータ最適化 (設計変数が有限個)のソフトである A B 初期形状 位相最適化 A’ B’ パラメータ最適化 形状最適化 9 シミュレーション最適化手法の概要 最近の流行 ・近似モデル(応答曲面法=RESPONSE SURFACE METHOD) を用いる手法が多く用いられる。 -理由: シミュレーションでは、ある設計条件が与えられた場合に1つの解(評価値, 応力や変位や温度 その他)を返すが、設計条件(設計変数)が変化した場合の応答関数 は数学一般における関数の最適化(最大化、最小化)問題のようにあらかじめ数式で与 えられているわけではない。 CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する 多項式モデル Y aij xi x j bi xi c 幾つかの解析結果から、設計変数変化に対する応答を近似する 近似式(近似モデル:例えば2次関数程度)を作成する事ができれば、 その近似式の最適解を求める事は従来の最適化技術で容易に実現できる。 Y = f (x1 , x2, x3, ......... , xn ) -> max or min 10 CAE商用最適化ツール(PIDOツール) • 商用の最適化ツールは最適設計支援ツール (以下PIDOツール:Process Integration & Design Optimization)と呼ばれて基本機能は CAEソフトの自動実行・ツール間統合・最適化 アルゴリズム・近似モデル作成(応答曲面)、 結果データ分析(可視化)などが行える。 • 代表的なソフトにmodeFrontier(IDAJ社), Isight(ダッソー社), Optimus(サイバーネット社) -最適解 などがある。 実験計画法 -相関分析 ツール間の連携手順 データ(変数,目的関数)定 義、パラメータ変更ルー ル(実験計画法)定義(GUI) 応答曲面法 CAEツール自動実行 (パラメータ自動変更) 結果自動収集 -設計ルール抽出 結果分析と 可視化(グラフ化等) 最適化アルゴリズム 市販CAE最適化ツールの例① (ISIGHTの例) 特徴: ・ 設計で利用されるCAD, CAE, 独自ツール, Excel など表計算、統計ツール etc. と連携 ・インターフェースが公開されており、ツール統合をGUI画面上で比較的容易に短時間で できる(Excel, ABAQUSなどは最初からコンポーネント化されており結合が容易) → GUIによるツール間連携設定 ・最適化アルゴリズム(古典的、ヒューリスティックetc.) ・近似モデル(多項式, Kriging, RBF) ・解析結果、設計変数、目的関数関係の可視化・分析 結果応答曲面表示 市販CAE最適化ツールの例② (modeFrontierの例) Isight, Optimus などと同様機能の他 - 多目的最適化機能(MOGA等, パレート最適解), 結果分析(マイニング機能) 市販ツールとOSSツール比較 商用ソフト (modeFrontier, Isight, OPTIMUS) OSS Dakota OSS OpenMDAO 備考 サンプリング 実験計画法 ○ ○ ○ OSSでも結構いける 直交表(OA)), ラテン超方格子(LH)、CCD etc. 最適化アルゴリズム ○ ○ ○ OSSでも結構いける 数理計画, GAなど 近似手法 ○ ○ ○ OSSでも結構いける 多項式近似, Krigingなど GUIによるツール連携 ○ × × × × モデル形状の自動変更は商用ツールで も無理 → 別の形状作成編集ツール要 ○ × × OSSでは結果分析が苦手 モデル形状の自動変 更 結果分析 △(そこそこ使える OpenMDAOは商用に近い DakotaはGUI設定画面なし が。。) Dakotaとは①? 自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標 (目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つ けてくれるツールです(最適化ツール) -ParaView と同じ SandiaNational Laboで開発されている - http://dakota.sandia.gov/ Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? • DAKOTAは具体的には何に使えるのか? -Optimization 設計最適化: 最適寸法や最適パラメータ決定 -Sensitivity Analysis 感度解析: 入力パラメータ変動に対する出力感度 -Calibration パラメータ同定: 未知パラメータ決定(物性値同定など) -Uncertainty Quantification 信頼度: 入力パラメータが変動した場合の応答 変動の確率分布推定 Dakota と各ツールとの連携① • Dakotaは任意のプログラムや解析ツールと連成 する場合、スクリプトなど外部インターフェースを 使って自動実行させる。 • 幾つかのスクリプトやbinary 連携ツールが examples Directory 以下に提供されているので これを使って連携実行させる compiled interface 以下にはmatlab 以外はつかえそうもなく script_interfacesの下のサンプルを利用すること にした(V5.3からMatlab以外にOSS scalibの直接 interface が準備された)。 • ABAQUS, NASTRANなど解析ツールの他、Python script, Excel Visual Basic script と 連携する例の sample がある。 Dakota と各ツールとの連携② • Dakotaと解析ツールは下記のように連携ユーザは以下3つファイ ルを準備する必要あり。 ① Dakota in File ③ Simulation 実行ス クリプト ② 解析入力 データ テンプ レートファイル Dakota と各ツールとの連携③ • • • 片持ちはりの反り計算の例題でABAQUSのSample が入っていたので、これを OSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる 前提:Linux 環境 (Ubuntsu) Calculix linux版 install 済み Calculix V2.1 を使用 P=6.666N D=1m S=4m 2次元平面応力要素を利用 B=2m P=1N S= 4m B= 2m D= 1m E=30e3Pa I= bt3/12 設計変数: S, B, P S=2-6m, B=1-3m, P=4-10N 目的関数: 梁の最大応力 σ→最小化 梁モデルの最大反り理論解 3 WL 3EI 19 M=PS (モーメント) σ = M/Z =PS/Z = PS/(DB^2/6) (最大応力) Dakota と各ツールとの連携④ • ①dakota_abaq_opt.in の中身を書き換える strategy, single_method graphics method, dot_mmfd variables, 今はこのモジュールなし。とりあえず下記入れ替え method, conmin_frcg max_iterations = 100 convergence_tolerance = 1e-4 continuous_design = 3 cdv_initial_point = 4.0 2.0 6.66667 cdv_lower_bounds = 2.0 1.0 4.0 cdv_upper_bounds = 6.0 3.0 10.0 cdv_descriptor = 'S' 'B' 'P‘ interface, application system #asynch evaluation_concurrency = 5 analysis_driver = 'abaq_driver' parameters_file = 'params.in' Application は現在認識しない results_file = 'results.out' ので 消す system だけ残す aprepro responses, num_objective_functions = 1 numerical_gradients method_source dakota Deprepro(dakotaに入って interval_type central fd_step_size .01 script file)にて置 いる=Perl no_hessians き換えることが可能 Dakotaに今入っていない Internet から Source Download しinstall aprepro-2.01.tar.gz (他のVersionはmake に失敗) • Dakota と各ツールとの連携⑤ ②fe.inp.appの書き換え(fe.inp.appはCalculix(abaqus)の解析入力ファイルのテンプレート {ECHO(OFF)} {include(params.in)} {ECHO(ON)} *HEADING *NODE 1, 0.0, 0.0 2, {S/4}, 0.0 3, {S/2}, 0.0 4, 0.0, {B/2} 5, {S/4}, {B/2} 6, {S/2}, {B/2} 7, 0.0, {B} 8, {S/4}, {B} 9, {S/2}, {B} *ELEMENT,TYPE=CPS8,ELSET=BEAM 1, 1, 3, 9, 7, 2, 6, 8, 4 **ELEMENT,TYPE=CPS4,ELSET=BEAM ** 1, 1, 2, 5, 4 ** 2, 2, 3, 6, 5 ** 3, 4, 5, 8, 7 ** 4, 5, 6, 9, 8 *SOLID SECTION,ELSET=BEAM,MATERIAL=AL2024T3 1.0 *MATERIAL,NAME=AL2024T3 *ELASTIC 30.000000e3, 0.3 *BOUNDARY 1, 2, , 0.0 3, 1, , 0.0 6, 1, , 0.0 9, 1, , 0.0 *STEP *STATIC *CLOAD ** 9, 2, 3.3333333, 9, 2, {P/2}, *EL PRINT, POSITION=AVERAGED AT NODES, ELSET=BEAM S *END STEP S, B, P はDakotaとAPREPROで変更する Parameter {S} , {B}, {P} のように 中括弧でパラメータを指定すると Aprepro(or Deprepro) がパラメータを自 動で置き換える Calculix V2.1 ではCPS4 が無いのでCPS8 に変更した Calculix ではELSET 指定が必要 Dakota と各ツールとの連携⑥ • ③ Abaqus_driver(解析自動実行スクリプト) を編集 #!/bin/csh -f # $argv[1] is params.in FROM Dakota # $argv[2] is results.out returned to Dakota # Workdir setup for running in parallel (file_tag option turned on) # In this simple case, all templatedir would contain is fe.inp.app #set num = `echo $argv[1] | cut -c 11-` #cp -r templatedir workdir.$num #mv $argv[1] workdir.$num/params.in #cd workdir.$num このScriptはcsh 向けに書か れているため、bsh 系は書式 を少し変える必要あり このコマンドでaprepro が各パラメータ{S}などを実 際の数字に置き換えたファイルを作成する # Pre-processing aprepro --nowarning -q fe.inp.app fe.inp ここをCalculix 用に編集 # Run ABAQUS #rm -f *.dat *.sta /usr/bin/ccx_2.1 -i fe ####>>&! abaqus.out # Post-processing grep ' 1 27' fe.dat | head -n 1 | awk '{print $3}' > $argv[2] # Results file move :and workdir cleanup for running in parallel #mv $argv[2] ../. #cd .. #rm -rf workdir.$num ここをCalculix 用に編集 Dakota と各ツールとの連携⑦ グラフ作成出力 • 最適化計算結果 %eval_id P=6.666N → 4N D=1m S=4m → 2m B=2m → 3m 黒:初期値, 赤字:最適化後数値 S 1 2 3 4 5 6 7 8 9 10 11 12 13 4 3.977324 3.886618 3.763126 3.741134 3.65915 3.331218 2 2 2 2 2 2 B 2 2.090318 2.451589 2.94344 3 3 3 3 3 3 3 3 3 P 6.66667 6.653404 6.600339 6.528094 6.517772 6.479296 6.32539 5.70062 4.560425 4 4 4 4 Dakota テキスト出力結果 FINAL OPTIMIZATION INFORMATION OBJ = 0.674360E+00 DECISION VARIABLES (X-VECTOR) 1) 0.20000E+01 0.30000E+01 0.40000E+01 梁の長さを短く 厚さ〈高さ) を大きく、荷重を小さくすれば応力が最小になると いう、常識的な結果が得られる。 obj_fn 6.8376 6.1956 4.2731 2.6934 2.5533 2.4655 2.123 0.96106 0.76884 0.67436 0.67436 0.67436 0.67436 Dakota と各ツールとの連携⑧ • 次にOpenFOAMとの連携を検討。例題は何でも良 かったのだが、TutorialのCavityFlowの例題を実施 駆動速度:U をパラメータ〈設計変数) Y 方向のマイナス方向速度 の最大値を目的関数とする。 Dakota と各ツールとの連携⑨ • Abaqus(calculix)のスクリプトインターフェース例 題をベースにファイルを編集する。編集するファ イルは以下の3つ - Dakota の入力ファイル(dakota_abaq_opt.in) - ソルバインターフェーススクリプト (abaq_driver ) - OpenFOAMの入力ファイルをベーステンプレー トファイルとして編集。 (今回は境界速度をパラメータにしているので、 0/U をテンプレートとして編集する) Dakota と各ツールとの連携⑩ • Dakota の入力ファイル(dakota_abaq_opt.in) strategy, single_method graphics,tabular_graphics_data method, conmin_frcg max_iterations = 100 convergence_tolerance = 1e-4 グラフデータを出力するように指定 #method, #dot_mmfd variables, continuous_design = 1 cdv_initial_point = 1.0 cdv_lower_bounds = 0.5 cdv_upper_bounds = 2.0 cdv_descriptor = 'U' 設計変数は1つU 初期値は1 最小値は0.5 最大値は2.0 interface, system #asynch evaluation_concurrency = 5 analysis_driver = 'abaq_driver' parameters_file = 'params.in' results_file = 'results.out' aprepro responses, num_objective_functions = 1 numerical_gradients method_source dakota interval_type central fd_step_size = .01 no_hessians ソルバーを実行する スクリプトファイルを指定 • Dakota と各ツールとの連携⑪ ソルバインターフェーススクリプト(abaq_driver ) #!/bin/csh –f # $argv[1] is params.in FROM Dakota # $argv[2] is results.out returned to Dakota mkdir work cp -r ./0 ./work/. cp -r ./constant ./work/. cp -r ./system ./work/. mv $argv[1] ./work/0/params.in cd ./work/0 # Pre-processing dprepro params.in U.temp U #cat U-1 U-2 U-3 > U #run OpenFOAM cd .. blockMesh icoFoam # Post-processing cd 0.5 more +381 U | head -n 1 | awk '{print $2}' > $argv[2] Work directory にOpenFOAM の入力ファイルをコピーする Dakota のプリプログラム Deprepro にて OpenFOAM 速度ファイルU の一部を自動で入れ替える設定をす る(Calculix の時使ったAprepro はOpenFOAMでは正 常に動かなかった) type value # Results file move :and workdir cleanup for running in parallel mv $argv[2] ../. cd .. mv $argv[2] ../. type cd .. value rm -r ./work fixedValue; uniform ({U} 0 0); fixedValue; uniform (1 0 0); Dakota と各ツールとの連携⑫ • 計算結果 FINAL OPTIMIZATION INFORMATION OBJ = -0.769003E+00 DECISION VARIABLES (X-VECTOR) 1) 0.20000E+01 境界速度を 2m/s で内部Y方向流速の最小値 (最大値)は-0.769m/s が得られる。 %eval_id 0 obj_fn -0.1 1 1 -0.36861 -0.2 2 1.095793 -0.40562 3 1.478966 -0.55656 4 2 -0.769 5 1.999999 -0.769 6 1.999999 -0.769 7 2 -0.769 -0.3 Uy U -0.4 -0.5 obj_fn -0.6 -0.7 -0.8 -0.9 0 0.5 1 1.5 U 2 2.5 Dakota と各ツールとの連携⑬ • 同様にCavity の問題でX,Y 寸法をパラメータ にして計算させてみる。 とりあえず最適化ではなく単純な パラメータSTUDYを実施してみた パラメータ X,Y 寸法 Y 方向のマイナス方向速度 の最大値を目的関数とする。 Y (m) X (m) Dakota と各ツールとの連携⑭ Dakota の入力ファイル(dakota_abaq_opt.in) ファイル中身 strategy graphics Method をパラメータSTUDYに切り替える tabular_graphics_data 4 4 はX, Y 最大最小値間隔をそれぞれ4分割して変化 single_method させる意味 method multidim_parameter_study partitions = 4 4 variables Parameter はX,Y 寸法で最小値は0.5, 最大値は2とした continuous_design = 2 lower_bounds 0.5 0.5 upper_bounds 2.0 2.0 descriptors 'X' ‘Y’ X(m) Y(m) interface analysis_drivers 'abaq_driver' 0.5 0.5 5×5 =25 ケース system #asynch evaluation_concurrency = 5 0.875 0.875 のパラメータstudy parameters_file 'params.in' × 1.25 1.25 を実施する results_file 'results.out' 1.625 1.625 aprepro responses 2 2 objective_functions 1 numerical_gradients method_source dakota multidim_parameter_study interval_type は総当たりで解析を実施するので次元数が大きくなると central fd_step_size 0.01 解析ケース数が膨大となるので注意が必要 no_hessians Dakota と各ツールとの連携⑮ • ソルバインターフェーススクリプト(abaq_driver ) #!/bin/bash –f mkdir work ./work に計算フォルダを作成し、必要なファ cp -r ./0 ./work/. cp -r ./constant ./work/. イルをコピーする cp -r ./system ./work/. mv params.in ./work/constant/polyMesh/params.in Dakota .パラメータファイル(params.in) cd ./work/constant/polyMesh # Pre-processing dprepro params.in blockMeshDict.temp blockMeshDict #run OpenFOAM cd .. cd .. blockMesh icoFoam を ./work/constant/polyMesh にコピーする blockMesh のテンプレートをdeprepro にて パラメータ数字に置き換える OpenFOAM実行 # Post-processing cd 0.5 more +381 U | head -n 1 | awk '{print $2}' > results.out 最終計算時間0.5 フォルダの流速Uの381行 目にU の最大値が 出ているのでそれを拾っ てきて Dakota の結果ファイル(results.out) に渡す # Results file move :and workdir cleanup for running in parallel mv results.out ../. cd .. ./work 以下の作業フォルダから結果ファイ mv results.out ../. cd .. ルをDakota 実行フォルダに回収し、 rm -r ./work 作業フォルダ./workを消す Dakota と各ツールとの連携⑯ blockMeshDict の template file 中身 パラメータ変更させたいXY座標値を{X}, {Y} の記号に置 vertices き換える ( 実行コマンド (0 0 0) % dakota -i dakota_abaq_opt.in Dakota コマンド実行 Directory ({X} 0 0) -Dakota input file: dakota_abaq_opt.in ({X} {Y} 0) -OpenFOAM 実行 Script : abaq_driver (Bash script) (0 {Y} 0) - OpenFOAM 入力file 元Directory :cavity (0 0 0.1) 0 ({X} 0 0.1) Constant polyMesh ({X} {Y} 0.1) system -blockMeshDictのテンプレート (0 {Y} 0.1) blockMeshDict.temp Work Directory ); 計算時にコピー 0 Constant system polyMesh Dakota と各ツールとの連携⑰ • しばらく計算すると以下の結果が得られる。 Y 0.5 0.875 1.25 1.625 2 0.5 0.875 1.25 1.625 2 0.5 0.875 1.25 1.625 2 0.5 0.875 1.25 1.625 2 0.5 0.875 1.25 1.625 2 obj_fn 0.5 -0.360726 0.5 -0.290734 0.5 -0.206985 0.5 -0.60085 0.5 0.596946 0.875 -0.300514 0.875 -0.366666 0.875 -0.335465 0.875 -0.279466 0.875 -0.225393 1.25 -0.219457 1.25 -0.342922 1.25 -0.372454 1.25 -0.354241 1.25 -0.317243 1.625 2.81395 1.625 -0.295194 1.625 -0.361606 1.625 -0.378085 1.625 -0.36565 2 -4.51749 2 -0.245306 2 -0.33235 2 -0.373322 2 -0.383536 4 3 Umax %eval_id X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 obj_fn 2 1 0 -1 -2 -3 -4 -5 0 0.5 1 1.5 2 2.5 Y座標 Y座標と流速Uymax の関係 Y寸法と最大流速はあまり相関 がみられないようだ。 GUIツール:Jaguar について -Jaguar とは:Dakota 専用のGUI tool -JAVAにて書かれている ある程度 input file 作成をSupportする。 結果の分析機能もあるようだが未確認 -最近バージョンでは残念ながらなくなってしまった GUIツール:Jaguarを使って入力ファイルを編集してみる① Jaguar を起動し、dakota_abaq_opt.inを読み込む -Method を切り替えてみる Method はDefine Flow のタグで設定する Windows 版ではobjective functionsの エラーが出る(bug と思われる) しかたないのでWindows版では一時 このエラー表示行を削除する。 〈実際にはエラーではなく、この行を消 してしまうとdakota が動かなくなる) GUIツール:Jaguarを使って入力ファイルを編集してみる② 一番下行で現在のMethodが Parameter Study に設定されているこ とを確認 GUIツール:Jaguarを使って入力ファイルを編集してみる③ このTag を選択すると他の手法に切り替えられる。 ここではDACE (design and analysis of computer experiments 計算機支援実験計画法) に切り替える •Central Composite Design •Box-Behnken Design •Orthogonal Array Designs • Grid Design • Monte Carlo Design • LHS Design • OA-LHS Design CCD: Central Composite Design を設定する GUIツール:Jaguarを使って入力ファイルを編集してみる④ IN ファイルを別名で保存する strategy graphics Method が dace のcentral_composite tabular_graphics_data に切り替わる single_method method dace CCD : 中央複合実験計画によって central_composite 9ケースのサンプリングが実施される %eval_id X 1 2 3 4 5 6 7 8 9 Y 1.25 0.5 2 1.25 1.25 0.5 2 0.5 2 obj_fn 1.25 -0.37245 1.25 -0.21946 1.25 -0.31724 0.5 -0.20699 2 -0.33235 0.5 -0.36073 0.5 0.596946 2 -4.51749 2 -0.38354 Dakota参考資料 ① マニュアル類:User Manual , Reference Manual, Theory Manual, Developers Manual 4種類マニュアルがある。いずれもSandia national laboratory のホームページからDownload 可能. http://dakota.sandia.gov 初心者は User’s Manual, Chapter 2: Tutorialから読む ② Dakota の教育コースをSandia Labo. で実施している模様でこの Presentation 資料もホームページで公開されている。 Optimization(最適化), Calibration(パラメータチューニング), Uncertain Qualification(信頼性) などがある。マニュアルよりは分かりやすい。 ③ Support(連絡先): –[email protected] –[email protected] OpenMDAOとは? ・いわゆる最適化ツール、自動的に解析に入力するパラメータを変更したパラメー タSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値に なるようなパラメータを見つけてくれるツール。Python で記述される。 ・2014/6/21のOpenCAE学会講習会にて片山さんが講習会を実施 ・片山さん資料に基づき自分の[email protected]にインストールしてみた ・春日さんのホームページにもインストール方法が記載されている - http://openmdao.org/ OpenMDAOインストールメモ① • インストールメモ - 基本的には片山さんが関西の勉強会 2013/8/3 の資料にアップしているやりかたにて問題なし。 - http://openmdao.org/ • go-openmdao.py を上記HOMEページからDownload して、 端末から実行するだけ abc$ python go-openmdao.py • 上記 Python script は インストラーで本体は入っていない。 ネットワークからダウンロードしつつインストールするので、 ネット接続した状態で実行する必要がある。 • 私の環境では、python-scipy が無いよ!と怒られたので、 これのみ追加インストール(人によって異なると思われる) abc$ sudo apt-get install python-scipy • Python がInstall されていればWindows にもそのままイン ストール可能の模様だが、未確認 (Windowsインストールパッケージが公開されている模様) OpenMDAOテストメモ② • . bin/activate にて仮想環境(virtualenv)に入る 。 この仮想環境はどういう意味があるのか不明であるが、と もかくそういうものらしい • (openmdao-0.9.5)dexcs@dexcs-laptop:~/openmdao0.9.5$ openmdao test プロンプトが変わって仮想環境に入ったことが確認できる。 テストコマンドを実行 (現在の最新版は0.9.7 ?) • テストが無事終了すると “Ran 813 tests in 124.134” のメッセージが表示 OpenMDAOテストメモ③ • openmdao gui にてGUIを起動する(ブラウザが起動) -WorkFlowにて動作手順 が定義できる Dakota(後述) よりは商用 最適化ツールに近いイ メージになっている。 -Dakotaと比較してこの GUIが使いやすそうで売 りなわけだが、恐ろしく不 安定で良く落ちる (OpenCAEユーザにはお なじみの現象) -上手く起動しないときは 一度kill して再度プロセ スを起動するとうまくいく ことが多い OpenMDAOテストメモ④ • • • • • • ワークフローをGUIで作成する Driver(実験計画法や最適化アルゴリズム(GA, 古典的数理計画法) はパラメータ変数をどのように変化させる 指示を行う部分。ソフトに通常に準備されているものを使う パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか、既存または他の人の作ったイ ンターフェースプログラムを利用する OpenFOAMのインターフェースは片山さん自作?のWrapperプログラムがある Install 方法: ネット接続した状態でOpenMDAO の仮想環境に入り下記コマンドをコマンドラインから実行: lib/python2.7/site-packages/openfoam_wrapper/openfoam_wrapper.py がDownload される pip install git+https://github.com/TatsuyaKatayama/openfoam_wrapper.gitDownloading/unpacking git+https://github.com/TatsuyaKatayama/openfoam_wrapper.git Dakotaのインターフェースも利用できるとのこと(動作未確認) Driver部分(SLSQP:逐次最小2乗計画法 (数理計画法の一種)最適化) Componet部分(Pythonプログラム↓) #!/bin/pythonfrom openmdao.main.api import Component from openmdao.lib.datatypes.api import Float (中略) x = self.x y = self.y self.f_xy = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0 OpenMDAOテストメモ⑤ 簡易ベンチマーク結果 ToolのPlot Variableで “assy.para.f_xy”と入力する と目的関数 f(x,y) の値がグ ラフで出力される。 最適解 の時のx,y, F(xy) はParaBoloidのWindow で左クリックEdit で表示 AssyのWindowsで左ク リック:Runを選択 OpenMDAOテストメモ⑥ -数理計画法部分を別のアルゴリズムに入れ替えてみる。SLSQPをCONMIN に置き換える(CONMINはCG勾配法のハズ?) PLOT の収束履歴が変わる。 CONMINの方が収束に時間 が掛る。 最適解 の時のx,y, F(xy) はSLSQPの時と同じであ ることが確認できる CONMINDriverをSLSQP のBOXに移動 CONMIN, SLSQP のように入れ替えても基本動作が変わら ないDriverの場合、変数間の連結が維持される 無料の形状自動作成・修正ツール調査① • 最適化では寸法などの形状パラメータを変数 にして最適化したい場合が多い(というか設 計問題はほとんどこれでしょ?) • しかし、商用ソフトでも解析モデルの形状 (メッシュ)を自動修正する機能は無い。 → 最適化ツールパラメータ自動変化に応じて モデルの形状を自動変更するツールが別途必 要になる 無料の形状自動作成・修正ツール調査② ツール名称 内容説明 blockMesh すべて手動で座標を記載するのである意 味最強か? モデル作成機能は×簡単な 形状(ブロック)のみ Salome パラメトリックに寸法を記述できる。 モデル作成手順をPythonで記録できるの で寸法をパラメータとすることも可能 FreeCAD パラメトリックにモデル形状修正が可 能(Pythonで自動修正可能?調査中) CAEseFree FRIENDSHIP-Frameworkの無料ソフト パラメトリック寸法変更が得意 使用時にネット接続が必要 ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版 CAD形状作成だけなら無料で使用できる Python スクリプトの自動実行も可能 Adventure CAD Adventure についている無料の簡易テキ スト記述式のCAD? BlockMesh よるはや や複雑な形状を作成できる SalomeのNoteBook機能 最適化ツール連携は可能?① • SalomeはNoteBookという機能がある。 これは寸法をパラメータ変数として入力してお くことで、パラメトリックなモデル作成を可能と する機能である。 • OpenCAE勉強会@富山(秋山さん),広島(F.A goさん)などの資料に使い方が公開. SalomeのNoteBook機能について・最適化ツール連携は?② ・NoteBOOKパラメータを入力して作成するのも効率的であるが、これは人間がGUI で操作してパラメータを変更するので、最適化ツールと連携させる場合は自動実行 させる必要がある。そこでPythonスクリプトから自動実行させる方法をためしてみた。 手順① Salomeで何か形状を作成する。メッシュもついでに作成 手順② ファイルメニューから”スクリプトを保存”(英語だとDump Study) を選択 SalomeのNoteBook機能について・最適化ツール連携は?③ 手順③ ファイル名は”test1.py” のように拡張子py を付けて保存する 手順④ 以下のようなPythonスクリプトが保存される - このスクリプトを参考に 一般のPython スクリプトからSalomeの機能を呼び出すス クリプトを作成することも可能だし、SalomeGUIからスクリプトを再度実行させること も可能であるが、今回はSalomeをバッチモードで起動する方法をためした。 import sys import salome salome.salome_init() theStudy = salome.myStudy #################################################### ## Begin of NoteBook variables section ## #################################################### notebook.set("AA", 10) notebook.set("BB", 20) notebook.set("CC", 15) ############################################### End of NoteBook variables section ## ################################################ ### GEOM component ~ 以下略 ~ SalomeのNoteBook機能について・最適化ツール連携は?④ 手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマ ニュアルに書かれている。具体的には Salomeを実行するシェルスクリプトの後 ろに ”-t” と実行させたい PythonScript を指定する。 手順⑥ Linuxでの実行例は下記 /opt/salome/SALOME-MECA-2014.1/appli_V7_3_0/runSalomeMeca -t test3.py 手順⑦ test3.py の寸法を編集変更して、再度実行する → エラーがなければ、寸法変更されたunvファイルが出力される • ################################################## #### Begin of NoteBook variables section ################################################## • notebook.set(“AA”, 15) ← 10から15に変更 • notebook.set("BB", 20) • notebook.set("CC", 15) Dakota でSalomeスクリプト起動① • DakotaでSalomeスクリプトを自動編集し、寸 法を自動変更して複数寸法のメッシュファイ ルを自動生成することをこころみた。 - モデル形状変更のみ(結果を抽出する部分 を作成するのが面倒だったため) - 実験計画は単純パラメータStudy(総あたり) - 各メッシュファイルをunv 形式で出力 <実行順に1.unv, 2.unv … と名前をつける> Dakota でSalomeスクリプト起動② • 3つのファイルを準備する - Dakotaのin ファイル, データテンプレート(こ こではSalome実行用Python Script), 実行用 のShell Script Dakota in file の一部 Method multidim_parameter_study partitions = 2 2 variables continuous_design = 2 lower_bounds 10.0 10.0 upper_bounds 20.0 20.0 descriptors 'X' 'Y' Dakota でSalomeスクリプト起動③ • Salome実行用Python ScriptをDakotaがパラメトリック に変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる) • 出力されたunvファイルが上書きされないようにファイ ル名を変更するShell Script を編集<結構面倒> • Dakota を実行、うまくいくとUnvが自動出力 dakota -i dakota_abaq_opt.in > table.out ###################################################### Begin of NoteBook variables section ###################################################### notebook.set(“AA”, {X}) ← Xに変更 notebook.set(“BB”, {Y}) ← Yに変更 notebook.set("CC", 15) Dakota でSalomeスクリプト起動④ 無事形状が変更されているかを確認 1.unv 2.unv FRIENDSHIP-Frameworkの無料ソフ トCAEseFreeを試してみる① • CAEseFree とは?OpenFOAMなどのモデル形状作成に無 料で使えるCADソフト/プリポストのようなもの?商用 版CAESE/FFWの機能制限無料版という位置づけ。商用 版ではCFDと自動連携して形状最適化ができるみた い?FREE版でもパラメータSTUDYはできる 形状をパラメトリックに変更可能なよ うで、形状最適化やパラメータスタ ディに便利のような感じである。 SLIDE SHARE にFN さんの資 料が上がっているので参照 FRIENDSHIP-Frameworkの無料ソフ トCaeseFreeを試してみる② • インストール方法など -Windows, Linux の32, 64bit 環境で動作する(Windows7 64bit, Ubuntu12.04LTS 64bit で動作することは確認した) -Install はHPからモジュール をダウンロードしてWindows はexe を実行、linux は圧縮 ファイルを展開するだけ - 初回起動時にユーザ登録 (Mail アドレス)が必須で、 二回目以降もライセンスを 確認しにサーバにアクセス するのでネット環境必須 FRIENDSHIP-Frameworkの無料ソフ トCaeseFreeを試してみる③ 簡単な操作例: ① CAD メニューのCurves, NACA 4DS カー ブを選択 ② パラメタ(デフォルト)と断面図が出てくる FRIENDSHIP-Frameworkの無料ソフ トCaeseFreeを試してみる④ 簡単な操作例: ③ パラメタを変えてみる 断面形状も勝手にかわる FRIENDSHIP-Frameworkの無料ソフ トCaeseFreeを試してみる⑤ データは基本的にSTL で出力する模様 形状を作ったらこれで出力すれ ばよいらしい? ABAQUS/CAE Student Editionとは? ・商用ソフトABAQUSの無料版 ・解析実行する場合メッシュデータ数が構 造解析1000節点、流体10000節点の制限 があるが、形状を作成するだけなら無制限、 形状はStep/Iges形式などで出力できる ・モデル作成手順をPythonスクリプトで出 力できる Adventure CAD • 形状をテキストで記述して作成する簡易 CAD, 平面をSweep,回転などして形状作成で きるので、ある程度形状は作成できる • コマンドが10個くらいしか無い box 0. 0. 0. 10. 50. 100. 原点と対角節点座標を 指定する 無料のデータ結果可視化・統計分析ツール • 結果のグラフ化だけならParaViewでそこそこ商用最適 化ツールのような表示が可能 • もう少し難しい統計分析(クラスタリングやデンドログラ ム、主成分分析 など)は統計分析用の専門ソフト(R ま たは Pythonの統計分析関係ライブラリ群) を使うと商 用ソフトとほぼ同等のことができる。 • 統計解析、データマイニング関連のフリーのライブライ (Python関連)の充実度は最近すさまじく、はっきり言っ て商用ソフト凌駕した? 商用の最適化ソフトの売りの一つは大量データの 結果分析機能充実であったが、ここでの差はほと んどなくなったと考えられる 無料のデータ結果可視化・統計分析ツール ParaViewでの可視化例① • ParaViewでCSV形式で出力したデータを読み 込む。最初はテーブルがそのままこんな感じ で表示される 無料のデータ結果可視化・統計分析ツール ParaViewでの可視化例② • 新規Layoutを選択し、Plot Matrix View を選択 すると散布図マトリックスが表示される。 無料のデータ結果可視化・統計分析ツール ParaViewでの可視化例③ 散布図マトリックスの変数をしぼりこんだ例 無料のデータ結果可視化・統計分析ツール ParaViewでの可視化例④ 新規レイアウトにてParallel Coordinate Viewを選択する。modeFrontier の多次元 レーダチャートのようなPlot を描くことが可能 無料のデータ結果可視化・統計分析ツール 統計解析ソフトRによる分析① もう少し統計的な分析はRなどでできる 度数分布 散布図マトリックス デンドログラム 無料のデータ結果可視化・統計分析ツール 統計解析ソフトRによる分析② 次元削減の例 主成分分析 RのGUI “Rコマンダー”や“EZR” が 出ているのでコマンドを知らなくても問題ない! Pythonの統計分析に便利ツール これだけあればほとんどの統計分析、グラフ可視化ができる! 1. Numpy 2. pandas 3. Matplotlib それぞれインストールしてもよいが 面倒な場合はAnaconda Python と いうパッケージ(Linux, Windows etc. ) が無料でおとせるので これを使うとよい。 4. Ipython/Ipython notebook 5. Scikit-Learn 6. SciPy Pythonの統計分析に便利ツール ・IPython/IPython notebook – IPython notebook – ウェブブラウザ上で動作 – インラインで図の表示も可能 ・コードと結果がブラウザ上で同時に見られるため 試行錯誤しながら数値計算するのにお勧め ・セル単位で実行 ・メモもできる。学校授業など向き? http://ipython.org/ Scikit-learn を使った統計分析例① 線形回帰など基本機能は当然あります グラフはMatPlotlib で書きます Scikit-learn を使った統計分析例② 散布図マトリックス RBF カーネルを 用いた識別 Scikit-learn のR より優れた点はガウス 関数を用いたRBF ネットワークモデル で近似関数、識別を行うことができる 点(R は線形近似のみ) adjointShapeOptimizationFoamについて① a. adjointShapeOptimizationFoamって何? OpenFOAM V2.0.0 から実装された形状最適化を有する非圧 縮性流体ソルバ→ http://www.openfoam.org/version2.0.0/ Other: There are other new solvers including adjointShapeOptimizationFoam, for optimisation against pressure loss using an adjoint formulation ( ↑ということで圧力損失を最小化するものらしいです) b. Tutorial: /opt/OpenFOAM/OpenFOAM2.3.x/tutorials/incompressible/adjointShapeOptimizatio nFoam/pitzDaily c. 流体計算そのものはSimpleFoamと同じ(と思われる) d. Adjoint法(日本語では随伴変数法とか訳される)による形 状最適化機能を有する e. 配管などの内部流れのみ適用可能 → 最適化オタクとして興味があったのだがいままで未着手 今回初めて調べてみた シミュレーション最適化手法の概要 解析分野から見た最適化手法の分類 形態による分類: -パラメータ(寸法)最適化問題:寸法、材料物性などを最適化 -形状最適化問題:位相を維持しつつ形状を最適化 -位相最適化問題:位相幾何学形状を最適化 ノンパラメトリック最適化 Adjoint法はこっち DAKOTAやOpenMDAOはパラメータ最適化 (設計変数が有限個)のソフトである A B 初期形状 位相最適化 A’ B’ パラメータ最適化 形状最適化 76 adjointShapeOptimizationFoamについて② • Adjoint法(随伴変数法/単純に随伴法と呼ぶこともある)は何もの? → 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか そのものです) 非線形最適化法 NLP -制約条件無し:最急降下法,Newton法,共役勾配法(CG法) → 評価関数の設計変数に対する微 分を使う:例 最急降下法 yn+1 = yn+ K(Δy/Δx) -制約条件有り:ペナルティ関数法,逐次2次計画法(SQP法) → このほかにラグランジュ未定乗数法がある ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して 拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法) とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け て、評価関数に足す)は考えは別ものですが、最終的な定式化はほぼ同じような 感じになります。 (SQP法はより具体的な計算アルゴリズム) http://ja.wikipedia.org/wiki/%E9%9D%9E%E7%B7%9A%E5%BD%A2%E8%A8%88%E7%94%BB%E6%B3%95 (非線形計画法のWIKIページから引用) 2次元の例 制約空間(水色)と目的関数(直線)の接点が解である。 単純な問題の例として、以下の制約条件群があり、 x 1 ≥ 0 x2 ≥ 0 x1 2 + x2 2 ≥ 1 x1 2 + x2 2 ≤ 2 次の目的関数を最大化する問題を示す。 f(x) = x1 + x2ここで x = (x1, x2) である。 adjointShapeOptimizationFoamについて③ • ラグランジュ未定乗数法計算の簡単な例 制約条件式に新たに定義した変数=ラグランジュ乗数を掛け て、評価関数に足す ttp://mcweb.nagaokaut.ac.jp/~kurahashi/lecture/optimal-design2.pdf 変分法に基づく最適変分法に基づく最適設計 (制約条件付きの汎関数の最小化問題) 倉橋殿資料↓から引用 adjointShapeOptimizationFoamについて④ • ラグランジュ未定乗数λ=随伴変数 随伴変数法の特徴 (畔上先生↓下記資料から抜粋) http://www.az.cs.is.nagoya-u.ac.jp/class/adaptive-systems/nuide.html 直接微分法 1.2.3 (直接微分法の特徴) 直接微分法は次のような特徴をもつ. (1) 直接微分法では,(1.2.5) の計算をn 回繰り返す必要がある.このことは,多設計変数(n ≫ 1) のときに不利となる.もしも,逆行 列K1 を保存しないで,設計変数ごとにK1 を求め直すときには,差分による断面積微分の計算法と 同程度の計算量となる. (2) 一方,(1.2.5) の計算を終えて,uaT をいったん求めてしまえば, uaT はすべての評価関数f0;~; fm に対して共通に使える.このこ とは,評価関数が沢山(m ≫ 1) のときに有利となる. →(注. uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のこと.つまり一度最 適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味) 随伴変数法 1.2.5 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ. (1) 随伴変数法では,随伴問題の数は評価関数の数m + 1 と一致する.このことは,評価関数が沢山(m ≫ 1) のときに不利になる. (2) 一方,随伴問題の数m + 1 は設計変数の数n に依存しない.そこで,多設計変数(n ≫ 1) のときには有利になる. (3) さらに,随伴問題の変数の数は状態方程式の変数の数n と一致する.このことは,状態変数が時間領域や物理的空間領域で定義された 関数になった場合(状態空間は無限次元空間になる) でも,随伴変数法は成り立つことを意味する. つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数 の自由度が無限個になるような問題(実際はFEM,FVMなどで離散化する ので自由度は有限個になる)に有利である。逆に設計自由度が寸法数個 など少ないパラメータで表せるような単純なパラメータ最適化問題には向 いていないと考えられる。 adjointShapeOptimizationFoamについて⑤ • 随伴変数法の特徴 その2:問題点・課題 (大林先生↓下記資料から) http://www.ifs.tohoku.ac.jp/edge/publications/chap2.pdf [CFDによる最適設計の動向科 研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より 1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法として、Adjoint 法がある。この方法は上の随伴方 程式を利用する。まず流れの支配方程式(2.2)を解く。その情報を利用して随伴方程式(2.4)((2.3)の間違いと思われ る)を解きラグランジュ係数 ξ を決定する。そして最適性条件式(2.4)によって∂J/∂g を計算する。こうして、得ら れた勾配情報を用いて非線形計画法を実行する。設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計 算ができるというのは、多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点である。ただし、 目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ。 目的関数や設計 変数の追加変更 が必要になった 場合、プログラム 自体を作りかえる 必要がある adjointShapeOptimizationFoamについて⑥ • OpenFOAM の adjointShapeOptimizationFoamを調べる その1 とりあえずtutorial を実行してみる。pitzDaily の1個だけ。 → $FOAM TUTORIALS/incompressible/adjointShapeOptimizationFoam/pitzDaily • Allrunが入っていないので blockMeshを実行後、adjointShapeOptimization を実行する。 • 2D問題なのですぐに計算が終わる。結果をparaFoam で可視化すると次の ような各分布図が得られる。通常の流速U,圧力pの他に謎の変数α(アル ファ)とaのついた流速Ua,圧力pa が計算されている→さてこれは何で しょう? • OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず さてどうしたものか?→が!ネット検索したら結構一杯資料が出てきた。 adjointShapeOptimizationFoamについて⑦ • OpenFOAM の adjointShapeOptimizationFoamを調べる その2 とりあえずtutorial/pitzDaily を計算した結果 オリジナルのメッシュ 圧力分布 t=1000 流速分布 t=1000 adjointShapeOptimizationFoamについて⑧ • OpenFOAM の adjointShapeOptimizationFoamを調べる その3 とりあえずtutorial/pitzDaily を計算した結果2 なぞの変数: α 圧力?のようなPa 分布 t=1000 流速?のような Uax分布 t=1000 adjointShapeOptimizationFoamについて⑨ • OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず さてどうしたものか?→ ネット検索したら結構一杯資料が出てきた。 https://groups.google.com/forum/#!msg/openfoam/n6RtyDJjt2g/rppkHt_bT6wJ (Google Openfoam group での大渕さんと桜木さんのやりとり)↓ 大渕さんのコメントから “a” のついた変数は 随伴変数つまり、ラグランジュ乗数になるとい うことが分かった。A はadjoint の a (だだし、論文はネットでは概要のみで本文は 無料公開はされていなかったので入手断念) 大渕さん: こんにちは。ソルバソースコードに記載されてい る文献に詳しい説明があります。 00032 References: 00033 ¥verbatim 00034 "Implementation of a continuous adjoint for topology optimization of 00035 ducted flows" 00036 C. Othmer, 00037 E. de Villiers, 00038 H.G. Weller 00039 AIAA-2007-3947 00040 http://pdf.aiaa.org/preview/CDReadyMCFD07_1379/PV2007 _3947.pdf 00041 ¥endverbatim このソルバは、adjoint法(随伴法)で圧力損失を最小化させ る最適化ソルバです。 aがついた変数は、それぞれ元になる変数の随伴変数にな ります。 以上、ご参考まで。 adjointShapeOptimizationFoamについて⑩ • より詳しい説明資料:OpenCAE関西の高木先生の資料 http://ofbkansai.sakura.ne.jp/data/takagi_adjoint.pdf → 随伴変数や定式化について説明あり。これからα は”porosity” 「空孔 率」とでも訳す?であるとわかる。意味合いとしては密度の逆数であり、こ の値が高いところは、不要であるということで削るべき場所となる。 OpenFOAM の adjointShapeOptimizationでは 各セルの空孔率αを設計変 数として(従ってセルを細かくすると∞に設計変数が増える)、目的関数で ある圧力損失を最小化する計算を行っていることが理解できる。 adjointShapeOptimizationFoamについて⑪ • より詳しい説明資料: An (more) eective Discrete Adjoint Model for OpenFOAM Markus Towara, Uwe Naumann Software and Tools for Computational Engineering Science RWTH Aachen University EuroAD 2013, Oxford, 10. December 2013 adjointShapeOptimizationFoamについて⑫ • より詳しい説明資料: http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2013/ ↑ソースコード解説とカスタマイズ例、追加チュートリアルがある。 添付のカスタマイズコード: UNAdjointShapeOptimizationFoam (porosity をupdate しない)をコンパイルし てみる→ 展開後、端末でwmakeする。 OpenFOAM 2.2用のようだが、2.3で問題 なくコンパイルできた adjointShapeOptimizationFoamについて⑬ • より詳しい説明資料: http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2013/ ↑ソースコード解説とカスタマイズ例、追加チュートリアルがある。 adjointShapeOptimizationFoam の計算手順 adjointShapeOptimizationFoamについて⑬ • より詳しい説明資料: http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2013/ ↑追加チュートリアル実施例 inlet outlet 添付のtutorial Pipebending:UNAdjointShapeOptimizationFoam で 計算する。Inlet の上側エリアが不要と判断されている模様 adjointShapeOptimizationまとめ • 各セルのporosity(空孔率)αを設計変数として 圧力損失を目的関数Jとして形状最適化計算を 行うもの。構造解析では位相最適化に相当す るものであり、当初境界形状を移動させる形 状最適化機能と思っていたが違っていた。 • 随伴変数(aつきの変数=ラグランジュ乗数) と空孔率αが基本変数(速度、圧力)に加え て同時に計算される。 • 目的関数を圧力損失以外の変数や設計変数を porosity(空孔率)α以外に追加したい場合は ソースコードの変更が必要 まとめ •無料で使える最適化ツールと関連ソフトにつ いて調査したこれまでの結果をまとめてみま した。 •最近のオープンソースの充実度はすさまじく、 ただで数年前は???百万円はしたソフトと 同様のことができます。 •関連資料を無料で公開してくれている有志の みなさんに感謝します。
© Copyright 2024 Paperzz