無料最適化関連ツールの調査 OpenCAE情報交換会 SH

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(連絡先):
–dakota-users@software.sandia.gov
–dakota-help@sandia.gov
OpenMDAOとは?
・いわゆる最適化ツール、自動的に解析に入力するパラメータを変更したパラメー
タSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値に
なるようなパラメータを見つけてくれるツール。Python で記述される。
・2014/6/21のOpenCAE学会講習会にて片山さんが講習会を実施
・片山さん資料に基づき自分のPC@Ubuntu12.4LTSにインストールしてみた
・春日さんのホームページにもインストール方法が記載されている
- 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) のときに不利となる.もしも,逆行
列K􀀀1 を保存しないで,設計変数ごとにK􀀀1 を求め直すときには,差分による断面積微分の計算法と
同程度の計算量となる.
(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(空孔率)α以外に追加したい場合は
ソースコードの変更が必要
まとめ
•無料で使える最適化ツールと関連ソフトにつ
いて調査したこれまでの結果をまとめてみま
した。
•最近のオープンソースの充実度はすさまじく、
ただで数年前は???百万円はしたソフトと
同様のことができます。
•関連資料を無料で公開してくれている有志の
みなさんに感謝します。