91
無料最適化関連ツールの調査 OpenCAE情報交換会 SH OpenCAE初歩情報交換会@ 北東北 in 岩大 2015/07/12

OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

  • Upload
    phamdat

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料最適化関連ツールの調査

OpenCAE情報交換会

SH

OpenCAE初歩情報交換会北東北 in 岩大 20150712

本日の発表内容

bull ① 最適化ツールは何に使うのか(最適化ツール概要)

bull ② CAEの商用最適化ツール(PIDOツール)

bull ③ オープンソース Dakota調査-Dakotaと各ツールとの連携-Dakota GUIツールJaguar

bull ④ オープンソース OpenMDAO調査

bull ⑤ 無料の形状自動作成修正ツール調査

bull ⑥ 無料のデータ結果可視化統計分析ツール

bull ⑦ OpenFOAMのAdjoint法形状最適化機能

3

最適化ツールは何に使うの

-最適化手法の例

制御工学変分法最大原理動的計画法

応用数学

線形計画法 LP(Simplex法 内点法)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

経営工学整数計画法ミニマックス問題ゲーム理論

情報工学ニューラルネットワーク(NN) 進化戦略(ES)

遺伝的アルゴリスム(GA) 遺伝的プログラミング(GP)

人工生命 シュミレーテッドアニーリング(SA)PSO

最適化手法最適化アルゴリズムとはrarr 何かの目標値を最大化または最小化するためのやり方手順

最適化ツールは何に使うのbull 最適化の手法は腐るほどありまたどんどんあたらしい手法が提案されていますが大きく分けて目的値や変数を連続量(実数連続関数)として扱う方法(古典的な方法とか数理計画法とか呼ばれている)と離散値(整数2進数など)として扱う方法(一種の組み合わせ最適化問題 例)遺伝的アルゴリズムGAなど)があります

bull 特徴として以下のような特徴があります

特徴 具体手法

古典手法(数理計画法)

計算量少ない勾配情報が必要局所最適解に収束データ連続関数(実数)

SQP(逐次2次計画法)ラグランジュ乗数法ペナルティ法

最近の手法(ヒューリスティックアプローチ)

計算量多い勾配情報不要

大域最適解に収束できるかもしれないデータ離散値(整数)

GA(遺伝的アルゴリズム)SA(焼きなまし法)PSO(粒子群最適化)

(参考)最適化で用いられる用語

-最適化構造寸法状態方法過程などを最も目的に良く合致させること

-設計変数(説明変数)最適化を行う際に変化可能な変数(例寸法材料荷重)-目的関数(評価関数)目標の達成度合いを示す関数(例軽量化(質量)最短化(時間)応力最小化(応力))-制約条件最適化問題に課せられる条件(例最大応力 以下金額時間)

-大域的最適化解の全空間での最適化-局所最適化ローカルな最適化を行う-単一目的最適化と多目的最適化

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 2: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

本日の発表内容

bull ① 最適化ツールは何に使うのか(最適化ツール概要)

bull ② CAEの商用最適化ツール(PIDOツール)

bull ③ オープンソース Dakota調査-Dakotaと各ツールとの連携-Dakota GUIツールJaguar

bull ④ オープンソース OpenMDAO調査

bull ⑤ 無料の形状自動作成修正ツール調査

bull ⑥ 無料のデータ結果可視化統計分析ツール

bull ⑦ OpenFOAMのAdjoint法形状最適化機能

3

最適化ツールは何に使うの

-最適化手法の例

制御工学変分法最大原理動的計画法

応用数学

線形計画法 LP(Simplex法 内点法)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

経営工学整数計画法ミニマックス問題ゲーム理論

情報工学ニューラルネットワーク(NN) 進化戦略(ES)

遺伝的アルゴリスム(GA) 遺伝的プログラミング(GP)

人工生命 シュミレーテッドアニーリング(SA)PSO

最適化手法最適化アルゴリズムとはrarr 何かの目標値を最大化または最小化するためのやり方手順

最適化ツールは何に使うのbull 最適化の手法は腐るほどありまたどんどんあたらしい手法が提案されていますが大きく分けて目的値や変数を連続量(実数連続関数)として扱う方法(古典的な方法とか数理計画法とか呼ばれている)と離散値(整数2進数など)として扱う方法(一種の組み合わせ最適化問題 例)遺伝的アルゴリズムGAなど)があります

bull 特徴として以下のような特徴があります

特徴 具体手法

古典手法(数理計画法)

計算量少ない勾配情報が必要局所最適解に収束データ連続関数(実数)

SQP(逐次2次計画法)ラグランジュ乗数法ペナルティ法

最近の手法(ヒューリスティックアプローチ)

計算量多い勾配情報不要

大域最適解に収束できるかもしれないデータ離散値(整数)

GA(遺伝的アルゴリズム)SA(焼きなまし法)PSO(粒子群最適化)

(参考)最適化で用いられる用語

-最適化構造寸法状態方法過程などを最も目的に良く合致させること

-設計変数(説明変数)最適化を行う際に変化可能な変数(例寸法材料荷重)-目的関数(評価関数)目標の達成度合いを示す関数(例軽量化(質量)最短化(時間)応力最小化(応力))-制約条件最適化問題に課せられる条件(例最大応力 以下金額時間)

-大域的最適化解の全空間での最適化-局所最適化ローカルな最適化を行う-単一目的最適化と多目的最適化

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 3: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

3

最適化ツールは何に使うの

-最適化手法の例

制御工学変分法最大原理動的計画法

応用数学

線形計画法 LP(Simplex法 内点法)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

経営工学整数計画法ミニマックス問題ゲーム理論

情報工学ニューラルネットワーク(NN) 進化戦略(ES)

遺伝的アルゴリスム(GA) 遺伝的プログラミング(GP)

人工生命 シュミレーテッドアニーリング(SA)PSO

最適化手法最適化アルゴリズムとはrarr 何かの目標値を最大化または最小化するためのやり方手順

最適化ツールは何に使うのbull 最適化の手法は腐るほどありまたどんどんあたらしい手法が提案されていますが大きく分けて目的値や変数を連続量(実数連続関数)として扱う方法(古典的な方法とか数理計画法とか呼ばれている)と離散値(整数2進数など)として扱う方法(一種の組み合わせ最適化問題 例)遺伝的アルゴリズムGAなど)があります

bull 特徴として以下のような特徴があります

特徴 具体手法

古典手法(数理計画法)

計算量少ない勾配情報が必要局所最適解に収束データ連続関数(実数)

SQP(逐次2次計画法)ラグランジュ乗数法ペナルティ法

最近の手法(ヒューリスティックアプローチ)

計算量多い勾配情報不要

大域最適解に収束できるかもしれないデータ離散値(整数)

GA(遺伝的アルゴリズム)SA(焼きなまし法)PSO(粒子群最適化)

(参考)最適化で用いられる用語

-最適化構造寸法状態方法過程などを最も目的に良く合致させること

-設計変数(説明変数)最適化を行う際に変化可能な変数(例寸法材料荷重)-目的関数(評価関数)目標の達成度合いを示す関数(例軽量化(質量)最短化(時間)応力最小化(応力))-制約条件最適化問題に課せられる条件(例最大応力 以下金額時間)

-大域的最適化解の全空間での最適化-局所最適化ローカルな最適化を行う-単一目的最適化と多目的最適化

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 4: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

最適化ツールは何に使うのbull 最適化の手法は腐るほどありまたどんどんあたらしい手法が提案されていますが大きく分けて目的値や変数を連続量(実数連続関数)として扱う方法(古典的な方法とか数理計画法とか呼ばれている)と離散値(整数2進数など)として扱う方法(一種の組み合わせ最適化問題 例)遺伝的アルゴリズムGAなど)があります

bull 特徴として以下のような特徴があります

特徴 具体手法

古典手法(数理計画法)

計算量少ない勾配情報が必要局所最適解に収束データ連続関数(実数)

SQP(逐次2次計画法)ラグランジュ乗数法ペナルティ法

最近の手法(ヒューリスティックアプローチ)

計算量多い勾配情報不要

大域最適解に収束できるかもしれないデータ離散値(整数)

GA(遺伝的アルゴリズム)SA(焼きなまし法)PSO(粒子群最適化)

(参考)最適化で用いられる用語

-最適化構造寸法状態方法過程などを最も目的に良く合致させること

-設計変数(説明変数)最適化を行う際に変化可能な変数(例寸法材料荷重)-目的関数(評価関数)目標の達成度合いを示す関数(例軽量化(質量)最短化(時間)応力最小化(応力))-制約条件最適化問題に課せられる条件(例最大応力 以下金額時間)

-大域的最適化解の全空間での最適化-局所最適化ローカルな最適化を行う-単一目的最適化と多目的最適化

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 5: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

(参考)最適化で用いられる用語

-最適化構造寸法状態方法過程などを最も目的に良く合致させること

-設計変数(説明変数)最適化を行う際に変化可能な変数(例寸法材料荷重)-目的関数(評価関数)目標の達成度合いを示す関数(例軽量化(質量)最短化(時間)応力最小化(応力))-制約条件最適化問題に課せられる条件(例最大応力 以下金額時間)

-大域的最適化解の全空間での最適化-局所最適化ローカルな最適化を行う-単一目的最適化と多目的最適化

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 6: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

(参考)大域的(Global)最適化と局所(Local)最適

-局所最適化ある部分での局所的な最適化数理計画法などの古典的手法が確立

-大域的最適化解の全空間での最適化=> 数理計画法などの古典的な局所的最適解を求める

アルゴリズムでは大域的な最適解を得ることは難しい=> GA SA などの手法が用いられる

Y

X

Xの可能範囲

局所最適点

初期探索点

大域的最適点

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 7: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

(参考)単一目的最適化と多目的最適化

-単一の目的関数を持つ場合には唯一の最適解が存在する場合でも多目的最適化問題では2つ以上の目的関数が単一の最適解を持つことはあまり無い

=> 多目的最適化問題では他の部分より良いという意味で最適解の集合を求めこれらをパレート最適解と呼ぶ

多目的最適化アルゴリズム=> スカラー化 優先順位法 などの手法が用いられる

Y1Y2

X

Xの可能範囲

関数1最適点 関数2最適点

目的関数1 Y1目的関数2Y2

パレート最適解

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 8: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

8

シミュレーション最適化手法-解析分野から見た最適化手法の分類-

具体的な解析手法-パラメータ(寸法)最適化問題(有限個のパラメータ)

1)近似モデルを用いないGAなどの評価関数の勾配を用いないアルゴリズム+FEMプログラムの自動反復による最適化(汎用的)2)近似モデルを用いる応答曲面法(RSM) 品質工学(タグチメソッド)感度解析確率有限要素法 テーラ級数近似(線形問題)

-形状最適化問題Basis Vector法(Nastranなどのプログラムに装備)

ベーシスベクトル法は設計が考えられる基本形状候補(ベーシスベクトル)の組み合わせにより最適形状を求める手法

(力法 (Azegami et al1994) システム応力の一様化)

-位相最適化問題密度法均質化法(菊池 他 Quint) 平均コンプライアンスの最小化[rarr類似手法FSD(全応力設計法) 構成部材応力を許容値以下]

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 9: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

9

シミュレーション最適化手法の概要構造解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などパラメータを最適化-形状最適化問題位相を維持しつつ形状(物体境界位置)を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち(設計変数が無限)

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 10: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

10

シミュレーション最適化手法の概要最近の流行

近似モデル(応答曲面法=RESPONSE SURFACE METHOD)を用いる手法が多く用いられる

-理由 シミュレーションではある設計条件が与えられた場合に1つの解(評価値 応力や変位や温度 その他)を返すが設計条件(設計変数)が変化した場合の応答関数は数学一般における関数の最適化(最大化最小化)問題のようにあらかじめ数式で与えられているわけではない

CAEの場合1つの設計変数に対する応答点を計算するのに膨大な計算時間を要する

幾つかの解析結果から設計変数変化に対する応答を近似する近似式(近似モデル例えば2次関数程度)を作成する事ができればその近似式の最適解を求める事は従来の最適化技術で容易に実現できる

Y = f (x1 x2 x3 xn ) -> max or min

多項式モデル

cxbxxaY iijiij

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 11: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

CAE商用最適化ツール(PIDOツール)

bull 商用の最適化ツールは最適設計支援ツール(以下PIDOツールProcess Integration amp Design Optimization)と呼ばれて基本機能はCAEソフトの自動実行ツール間統合最適化アルゴリズム近似モデル作成(応答曲面)結果データ分析(可視化)などが行える

bull 代表的なソフトにmodeFrontier(IDAJ社) Isight(ダッソー社) Optimus(サイバーネット社)などがある

ツール間の連携手順データ(変数目的関数)定義パラメータ変更ルール(実験計画法)定義(GUI)

CAEツール自動実行(パラメータ自動変更)結果自動収集

実験計画法

応答曲面法

結果分析と可視化(グラフ化等)

最適化アルゴリズム

-最適解-相関分析-設計ルール抽出

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 12: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

市販CAE最適化ツールの例①(ISIGHTの例)特徴

設計で利用されるCAD CAE 独自ツール Excel など表計算統計ツール etc と連携インターフェースが公開されておりツール統合をGUI画面上で比較的容易に短時間でできる(Excel ABAQUSなどは最初からコンポーネント化されており結合が容易)rarr GUIによるツール間連携設定最適化アルゴリズム(古典的ヒューリスティックetc) 近似モデル(多項式 Kriging RBF)解析結果設計変数目的関数関係の可視化分析

結果応答曲面表示

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 13: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

市販CAE最適化ツールの例②(modeFrontierの例)

Isight Optimusなどと同様機能の他-多目的最適化機能(MOGA等 パレート最適解) 結果分析(マイニング機能)

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 14: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

市販ツールとOSSツール比較

商用ソフト(modeFrontier Isight OPTIMUS)

OSS Dakota OSS OpenMDAO 備考

サンプリング実験計画法

OSSでも結構いける直交表(OA)) ラテン超方格子(LH)CCDetc

最適化アルゴリズム OSSでも結構いける数理計画 GAなど

近似手法 OSSでも結構いける多項式近似 Krigingなど

GUIによるツール連携 times(そこそこ使える

が)OpenMDAOは商用に近いDakotaはGUI設定画面なし

モデル形状の自動変更

times times timesモデル形状の自動変更は商用ツールでも無理rarr 別の形状作成編集ツール要

結果分析 times times OSSでは結果分析が苦手

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 15: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakotaとは①自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標

(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールです(最適化ツール)-ParaViewと同じ SandiaNational Laboで開発されている- httpdakotasandiagov

Calculix CodeAster OpenFOAM etc

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 16: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakotaとは②

bull DAKOTAは具体的には何に使えるのか

-Optimization 設計最適化 最適寸法や最適パラメータ決定

-Sensitivity Analysis 感度解析 入力パラメータ変動に対する出力感度

-Calibration パラメータ同定未知パラメータ決定(物性値同定など)

-Uncertainty Quantification 信頼度入力パラメータが変動した場合の応答変動の確率分布推定

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 17: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携①

bull Dakotaは任意のプログラムや解析ツールと連成する場合スクリプトなど外部インターフェースを使って自動実行させる

bull 幾つかのスクリプトやbinary 連携ツールがexamples Directory 以下に提供されているのでこれを使って連携実行させる compiled interface 以下にはmatlab以外はつかえそうもなくscript_interfacesの下のサンプルを利用することにした(V53からMatlab以外にOSS scalibの直接interface が準備された)

bull ABAQUS NASTRANなど解析ツールの他Python script Excel Visual Basic script と 連携する例のsample がある

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 18: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携②bull Dakotaと解析ツールは下記のように連携ユーザは以下3つファイルを準備する必要あり

① Dakota in File

② 解析入力データ テンプレートファイル

③ Simulation 実行スクリプト

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 19: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

19

Dakota と各ツールとの連携③

bull 片持ちはりの反り計算の例題でABAQUSのSample が入っていたのでこれをOSS有限要素解析ソフト Calculix で動くように書き換えて実行してみる

bull 前提Linux 環境 (Ubuntsu) Calculix linux版 install 済み

bull Calculix V21 を使用

P=1N

S= 4m

B= 2m

D= 1m

E=30e3Pa

I= bt312 EI

WL

3

3

P=6666N

S=4m

B=2m

D=1m

梁モデルの最大反り理論解

2次元平面応力要素を利用

M=PS (モーメント)

σ = MZ =PSZ= PS(DB^26)(最大応力)

設計変数 S B PS=2-6m B=1-3m P=4-10N目的関数 梁の最大応力σrarr最小化

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 20: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携④bull ①dakota_abaq_optin の中身を書き換える

strategysingle_method graphics

methoddot_mmfd

variablescontinuous_design = 3cdv_initial_point = 40 20 666667cdv_lower_bounds = 20 10 40cdv_upper_bounds = 60 30 100cdv_descriptor = S B Plsquo

interfaceapplication system asynch evaluation_concurrency = 5analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradientsmethod_source dakotainterval_type centralfd_step_size = 01

no_hessians

今はこのモジュールなしとりあえず下記入れ替えmethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

Application は現在認識しないので 消す system だけ残す

Dakotaに今入っていないInternet から Source Download しinstallaprepro-201targz(他のVersionはmakeに失敗)

Deprepro(dakotaに入っている Perl script file)にて置き換えることが可能

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 21: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑤bull ②feinpappの書き換え(feinpappはCalculix(abaqus)の解析入力ファイルのテンプレート

ECHO(OFF)include(paramsin)ECHO(ON)HEADINGNODE

1 00 002 S4 003 S2 004 00 B25 S4 B26 S2 B27 00 B8 S4 B9 S2 B

ELEMENTTYPE=CPS8ELSET=BEAM1 1 3 9 7 2 6 8 4

ELEMENTTYPE=CPS4ELSET=BEAM 1 1 2 5 4 2 2 3 6 5 3 4 5 8 7 4 5 6 9 8SOLID SECTIONELSET=BEAMMATERIAL=AL2024T310MATERIALNAME=AL2024T3ELASTIC30000000e3 03BOUNDARY1 2 003 1 006 1 009 1 00

STEPSTATICCLOAD 9 2 333333339 2 P2

EL PRINT POSITION=AVERAGED AT NODES ELSET=BEAMSEND STEP

S B P はDakotaとAPREPROで変更するParameter {S B P のように中括弧でパラメータを指定するとAprepro(or Deprepro) がパラメータを自動で置き換える

Calculix V21 ではCPS4 が無いのでCPS8 に変更した

Calculix ではELSET 指定が必要

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 22: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑥bull ③ Abaqus_driver(解析自動実行スクリプト) を編集

bincsh -f

$argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

Workdir setup for running in parallel (file_tag option turned on) In this simple case all templatedir would contain is feinpappset num = `echo $argv[1] | cut -c 11-`cp -r templatedir workdir$nummv $argv[1] workdir$numparamsincd workdir$num

Pre-processing

aprepro --nowarning -q feinpapp feinp

Run ABAQUS

rm -f dat stausrbinccx_21 -i fegtgtamp abaqusout

Post-processing

grep 1 27 fedat | head -n 1 | awk print $3 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd rm -rf workdir$num

ここをCalculix用に編集

ここをCalculix 用に編集

このScriptはcsh向けに書かれているためbsh系は書式を少し変える必要あり

このコマンドでapreproが各パラメータSなどを実際の数字に置き換えたファイルを作成する

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 23: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑦

bull 最適化計算結果

FINAL OPTIMIZATION INFORMATION OBJ = 0674360E+00 DECISION VARIABLES (X-VECTOR) 1) 020000E+01 030000E+01 040000E+01

P=6666Nrarr 4N

S=4m rarr 2m

B=2m rarr 3m

D=1m

黒初期値 赤字最適化後数値

Dakota テキスト出力結果

eval_id S B P obj_fn

1 4 2 666667 68376

2 3977324 2090318 6653404 61956

3 3886618 2451589 6600339 42731

4 3763126 294344 6528094 26934

5 3741134 3 6517772 25533

6 365915 3 6479296 24655

7 3331218 3 632539 2123

8 2 3 570062 096106

9 2 3 4560425 076884

10 2 3 4 067436

11 2 3 4 067436

12 2 3 4 067436

13 2 3 4 067436

グラフ作成出力

梁の長さを短く 厚さ〈高さ) を大きく荷重を小さくすれば応力が最小になるという常識的な結果が得られる

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 24: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑧

bull 次にOpenFOAMとの連携を検討例題は何でも良かったのだがTutorialのCavityFlowの例題を実施

駆動速度Uをパラメータ〈設計変数)

Y 方向のマイナス方向速度の最大値を目的関数とする

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 25: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑨

bull Abaqus(calculix)のスクリプトインターフェース例題をベースにファイルを編集する編集するファイルは以下の3つ

- Dakota の入力ファイル(dakota_abaq_optin)-ソルバインターフェーススクリプト(abaq_driver )

- OpenFOAMの入力ファイルをベーステンプレートファイルとして編集(今回は境界速度をパラメータにしているので0U をテンプレートとして編集する)

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 26: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑩bull Dakota の入力ファイル(dakota_abaq_optin)

strategysingle_method

graphicstabular_graphics_datamethod

conmin_frcgmax_iterations = 100convergence_tolerance = 1e-4

methoddot_mmfd

variablescontinuous_design = 1

cdv_initial_point = 10cdv_lower_bounds = 05cdv_upper_bounds = 20cdv_descriptor = U

interfacesystem asynch evaluation_concurrency = 5

analysis_driver = abaq_driverparameters_file = paramsinresults_file = resultsoutaprepro

responsesnum_objective_functions = 1numerical_gradients

method_source dakotainterval_type centralfd_step_size = 01

no_hessians

グラフデータを出力するように指定

設計変数は1つU初期値は1最小値は05最大値は20

ソルバーを実行するスクリプトファイルを指定

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 27: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑪bull ソルバインターフェーススクリプト(abaq_driver )

bincsh ndashf $argv[1] is paramsin FROM Dakota $argv[2] is resultsout returned to Dakota

mkdir workcp -r 0 workcp -r constant workcp -r system workmv $argv[1] work0paramsincd work0

Pre-processingdprepro paramsin Utemp Ucat U-1 U-2 U-3 gt U

run OpenFOAMcd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt $argv[2]

Results file move and workdir cleanup for running in parallelmv $argv[2] cd mv $argv[2] cd rm -r work

Work directory にOpenFOAMの入力ファイルをコピーする

Dakota のプリプログラム Depreproにて OpenFOAM速度ファイルU の一部を自動で入れ替える設定をする(Calculix の時使ったApreproはOpenFOAMでは正常に動かなかった)

type fixedValue value uniform (U 0 0)

type fixedValue value uniform (1 0 0)

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 28: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑫

bull 計算結果

境界速度を 2ms で内部Y方向流速の最小値(最大値)は-0769ms が得られる

FINAL OPTIMIZATION INFORMATION OBJ = -0769003E+00

DECISION VARIABLES (X-VECTOR) 1) 020000E+01

eval_id U obj_fn

1 1 -036861

2 1095793 -040562

3 1478966 -055656

4 2 -0769

5 1999999 -0769

6 1999999 -0769

7 2 -0769-09

-08

-07

-06

-05

-04

-03

-02

-01

0

0 05 1 15 2 25

Uy

U

obj_fn

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 29: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑬

bull 同様にCavity の問題でXY 寸法をパラメータにして計算させてみる

Y (m)

X (m)

Y 方向のマイナス方向速度の最大値を目的関数とする

パラメータXY 寸法

とりあえず最適化ではなく単純なパラメータSTUDYを実施してみた

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 30: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑭strategy

graphicstabular_graphics_datasingle_method

methodmultidim_parameter_study

partitions = 4 4variablescontinuous_design = 2

lower_bounds 05 05upper_bounds 20 20descriptors X lsquoYrsquo

interfaceanalysis_drivers abaq_driver

system asynch evaluation_concurrency = 5parameters_file paramsinresults_file resultsoutaprepro

responsesobjective_functions 1numerical_gradients

method_sourcedakotainterval_typecentralfd_step_size 001

no_hessians

Method をパラメータSTUDYに切り替える4 4 はX Y 最大最小値間隔をそれぞれ4分割して変化させる意味

Dakota の入力ファイル(dakota_abaq_optin) ファイル中身

Parameter はXY 寸法で最小値は05 最大値は2とした

X(m)050875125

16252

Y(m)050875125

16252

times

5times5 =25 ケースのパラメータstudy を実施する

multidim_parameter_studyは総当たりで解析を実施するので次元数が大きくなると解析ケース数が膨大となるので注意が必要

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 31: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑮

binbash ndashfmkdir workcp -r 0 workcp -r constant workcp -r system workmv paramsin workconstantpolyMeshparamsincd workconstantpolyMesh

Pre-processingdprepro paramsin blockMeshDicttemp blockMeshDict

run OpenFOAMcd cd blockMeshicoFoam

Post-processingcd 05more +381 U | head -n 1 | awk print $2 gt resultsout

Results file move and workdir cleanup for running in parallelmv resultsout cd mv resultsout cd rm -r work

workに計算フォルダを作成し必要なファイルをコピーする

Dakota パラメータファイル(paramsin)を workconstantpolyMeshにコピーする

blockMeshのテンプレートをdepreproにてパラメータ数字に置き換える

OpenFOAM実行

最終計算時間05 フォルダの流速Uの381行目にU の最大値が出ているのでそれを拾ってきて Dakota の結果ファイル(resultsout)に渡す

work 以下の作業フォルダから結果ファイルをDakota 実行フォルダに回収し作業フォルダworkを消す

bull ソルバインターフェーススクリプト(abaq_driver )

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 32: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑯

vertices (

(0 0 0)(X 0 0)(X Y 0)(0 Y 0)(0 0 01)(X 0 01)(X Y 01)(0 Y 01)

)

blockMeshDict の template file 中身

パラメータ変更させたいXY座標値をX Y の記号に置き換える

Dakota コマンド実行 Directory

-Dakota input file dakota_abaq_optin-OpenFOAM実行 Script abaq_driver (Bash script)

Work Directory

- OpenFOAM入力file 元Directory cavity

0

Constant

system

polyMesh

-blockMeshDictのテンプレートblockMeshDicttemp

0

system

polyMeshConstant

計算時にコピー

実行コマンド dakota -i dakota_abaq_optin

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 33: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota と各ツールとの連携⑰

bull しばらく計算すると以下の結果が得られるeval_id X Y obj_fn

1 05 05 -0360726

2 0875 05 -0290734

3 125 05 -0206985

4 1625 05 -060085

5 2 05 0596946

6 05 0875 -0300514

7 0875 0875 -0366666

8 125 0875 -0335465

9 1625 0875 -0279466

10 2 0875 -0225393

11 05 125 -0219457

12 0875 125 -0342922

13 125 125 -0372454

14 1625 125 -0354241

15 2 125 -0317243

16 05 1625 281395

17 0875 1625 -0295194

18 125 1625 -0361606

19 1625 1625 -0378085

20 2 1625 -036565

21 05 2 -451749

22 0875 2 -0245306

23 125 2 -033235

24 1625 2 -0373322

25 2 2 -0383536

-5

-4

-3

-2

-1

0

1

2

3

4

0 05 1 15 2 25

Um

ax

Y座標

obj_fn

Y座標と流速Uymaxの関係

Y寸法と最大流速はあまり相関がみられないようだ

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 34: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

GUIツールJaguar について-Jaguar とはDakota 専用のGUI tool-JAVAにて書かれているある程度 input file 作成をSupportする結果の分析機能もあるようだが未確認

-最近バージョンでは残念ながらなくなってしまった

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 35: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

GUIツールJaguarを使って入力ファイルを編集してみる①

Jaguar を起動しdakota_abaq_optinを読み込む

-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計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 36: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

GUIツールJaguarを使って入力ファイルを編集してみる②

一番下行で現在のMethodがParameter Study に設定されていることを確認

GUIツールJaguarを使って入力ファイルを編集してみる③

このTag を選択すると他の手法に切り替えられるここではDACE (design and analysis of computer experiments計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 37: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

GUIツールJaguarを使って入力ファイルを編集してみる③

このTag を選択すると他の手法に切り替えられるここではDACE (design and analysis of computer experiments計算機支援実験計画法) に切り替える

bullCentral Composite Design bullBox-Behnken DesignbullOrthogonal Array Designsbull Grid Designbull Monte Carlo Designbull LHS Designbull OA-LHS Design

CCD Central Composite Design を設定する

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 38: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

GUIツールJaguarを使って入力ファイルを編集してみる④

strategy

graphics

tabular_graphics_data

single_method

method

dace

central_composite

Method が dace のcentral_compositeに切り替わる

eval_id X Y obj_fn

1 125 125-0372452 05 125-0219463 2 125-0317244 125 05-0206995 125 2-033235

6 05 05-0360737 2 050596946

8 05 2-4517499 2 2-038354

CCD 中央複合実験計画によって9ケースのサンプリングが実施される

IN ファイルを別名で保存する

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 39: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota参考資料① マニュアル類User Manual Reference Manual Theory Manual Developers Manual 4種類マニュアルがあるいずれもSandia national laboratory のホームページからDownload 可能

httpdakotasandiagov初心者は Userrsquos Manual Chapter 2 Tutorialから読む

② Dakota の教育コースをSandia Labo で実施している模様でこのPresentation 資料もホームページで公開されているOptimization(最適化) Calibration(パラメータチューニング) Uncertain Qualification(信頼性) などがあるマニュアルよりは分かりやすい

③ Support(連絡先) ndashdakota-userssoftwaresandiagovndashdakota-helpsandiagov

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 40: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOとはいわゆる最適化ツール自動的に解析に入力するパラメータを変更したパラメータSTUDYや目的となる指標(目的関数)を与えると自動的にそのような目的の値になるようなパラメータを見つけてくれるツールPython で記述される2014621のOpenCAE学会講習会にて片山さんが講習会を実施片山さん資料に基づき自分のPCUbuntu124LTSにインストールしてみた春日さんのホームページにもインストール方法が記載されている

- httpopenmdaoorg

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 41: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOインストールメモ①bull インストールメモ

-基本的には片山さんが関西の勉強会201383 の資料にアップしているやりかたにて問題なし- httpopenmdaoorg

bull go-openmdaopy を上記HOMEページからDownload して端末から実行するだけabc$ python go-openmdaopy

bull 上記 Python script は インストラーで本体は入っていないネットワークからダウンロードしつつインストールするのでネット接続した状態で実行する必要がある

bull 私の環境ではpython-scipyが無いよと怒られたのでこれのみ追加インストール(人によって異なると思われる)abc$ sudo apt-get install python-scipy

bull Python がInstall されていればWindows にもそのままインストール可能の模様だが未確認(Windowsインストールパッケージが公開されている模様)

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 42: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOテストメモ②

bull binactivateにて仮想環境(virtualenv)に入る この仮想環境はどういう意味があるのか不明であるがともかくそういうものらしい

bull (openmdao-095)dexcsdexcs-laptop~openmdao-095$ openmdao testプロンプトが変わって仮想環境に入ったことが確認できるテストコマンドを実行(現在の最新版は097 )

bull テストが無事終了するとldquoRan 813 tests in 124134rdquoのメッセージが表示

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 43: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOテストメモ③bull openmdao guiにてGUIを起動する(ブラウザが起動)

-WorkFlowにて動作手順が定義できるDakota(後述) よりは商用

最適化ツールに近いイメージになっている-Dakotaと比較してこのGUIが使いやすそうで売

りなわけだが恐ろしく不安定で良く落ちる(OpenCAEユーザにはおなじみの現象)

-上手く起動しないときは一度kill して再度プロセ

スを起動するとうまくいくことが多い

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 44: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOテストメモ④bull ワークフローをGUIで作成するbull Driver(実験計画法や最適化アルゴリズム(GA 古典的数理計画法) はパラメータ変数をどのように変化させる

指示を行う部分ソフトに通常に準備されているものを使うbull パラメータ変数と目的関数はコンポーネントとして自分でPythonで作成するか既存または他の人の作ったイ

ンターフェースプログラムを利用するbull OpenFOAMのインターフェースは片山さん自作のWrapperプログラムがある

Install 方法 ネット接続した状態でOpenMDAOの仮想環境に入り下記コマンドをコマンドラインから実行libpython27site-packagesopenfoam_wrapperopenfoam_wrapperpy がDownload される

bull pip install git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergitDownloadingunpacking git+httpsgithubcomTatsuyaKatayamaopenfoam_wrappergit

bull Dakotaのインターフェースも利用できるとのこと(動作未確認)

Driver部分(SLSQP逐次最小2乗計画法(数理計画法の一種)最適化)

Componet部分(Pythonプログラムdarr)

binpythonfrom openmdaomainapi import Componentfrom openmdaolibdatatypesapi import Float(中略)x = selfxy = selfyselff_xy = (x-30)2 + xy + (y+40)2 - 30

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 45: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOテストメモ⑤

最適解の時のxy F(xy)はParaBoloidのWindowで左クリックEdit で表示

簡易ベンチマーク結果

AssyのWindowsで左クリックRunを選択

ToolのPlot Variableでldquoassyparaf_xyrdquoと入力すると目的関数 f(xy) の値がグラフで出力される

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 46: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

OpenMDAOテストメモ⑥

最適解の時のxy F(xy)はSLSQPの時と同じであることが確認できる

-数理計画法部分を別のアルゴリズムに入れ替えてみるSLSQPをCONMINに置き換える(CONMINはCG勾配法のハズ)

CONMINDriverをSLSQPのBOXに移動

PLOT の収束履歴が変わるCONMINの方が収束に時間が掛る

CONMIN SLSQP のように入れ替えても基本動作が変わらないDriverの場合変数間の連結が維持される

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 47: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料の形状自動作成修正ツール調査①

bull 最適化では寸法などの形状パラメータを変数にして最適化したい場合が多い(というか設計問題はほとんどこれでしょ)

bull しかし商用ソフトでも解析モデルの形状(メッシュ)を自動修正する機能は無い

rarr 最適化ツールパラメータ自動変化に応じて

モデルの形状を自動変更するツールが別途必要になる

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 48: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料の形状自動作成修正ツール調査②

ツール名称 内容説明

blockMesh すべて手動で座標を記載するのである意味最強かモデル作成機能はtimes簡単な形状(ブロック)のみ

Salome パラメトリックに寸法を記述できるモデル作成手順をPythonで記録できるので寸法をパラメータとすることも可能

FreeCAD パラメトリックにモデル形状修正が可能(Pythonで自動修正可能調査中)

CAEseFree FRIENDSHIP-Frameworkの無料ソフトパラメトリック寸法変更が得意使用時にネット接続が必要

ABAQUS CAE StudentEdition 構造系CAEソフトABAQUSの無償版CAD形状作成だけなら無料で使用できるPython スクリプトの自動実行も可能

Adventure CAD Adventure についている無料の簡易テキスト記述式のCAD BlockMeshよるはやや複雑な形状を作成できる

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 49: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

SalomeのNoteBook機能最適化ツール連携は可能①

bull SalomeはNoteBookという機能がある

これは寸法をパラメータ変数として入力しておくことでパラメトリックなモデル作成を可能とする機能である

bull OpenCAE勉強会富山(秋山さん)広島(FAgoさん)などの資料に使い方が公開

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 50: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

SalomeのNoteBook機能について最適化ツール連携は②NoteBOOKパラメータを入力して作成するのも効率的であるがこれは人間がGUI

で操作してパラメータを変更するので最適化ツールと連携させる場合は自動実行させる必要があるそこでPythonスクリプトから自動実行させる方法をためしてみた手順① Salomeで何か形状を作成するメッシュもついでに作成手順② ファイルメニューからrdquoスクリプトを保存rdquo(英語だとDump Study) を選択

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 51: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

SalomeのNoteBook機能について最適化ツール連携は③手順③ ファイル名はrdquotest1pyrdquo のように拡張子py を付けて保存する手順④ 以下のようなPythonスクリプトが保存される-このスクリプトを参考に一般のPython スクリプトからSalomeの機能を呼び出すスクリプトを作成することも可能だしSalomeGUIからスクリプトを再度実行させることも可能であるが今回はSalomeをバッチモードで起動する方法をためした

import sysimport salome

salomesalome_init()theStudy = salomemyStudy

Begin of NoteBook variables section notebookset(AA 10)notebookset(BB 20)notebookset(CC 15) End of NoteBook

variables section GEOM component ~ 以下略 ~

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 52: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

SalomeのNoteBook機能について最適化ツール連携は④

手順⑤ Salome をバッチモードで起動する方法はKernelモジュールのユーザマニュアルに書かれている具体的には Salomeを実行するシェルスクリプトの後ろに rdquo-trdquo と実行させたい PythonScript を指定する手順⑥ Linuxでの実行例は下記optsalomeSALOME-MECA-20141appli_V7_3_0runSalomeMeca -t test3py手順⑦ test3py の寸法を編集変更して再度実行するrarr エラーがなければ寸法変更されたunvファイルが出力される

bull Begin of NoteBook variables section

bull notebookset(ldquoAArdquo 15) larr 10から15に変更

bull notebookset(BB 20)

bull notebookset(CC 15)

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 53: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota でSalomeスクリプト起動①

bull DakotaでSalomeスクリプトを自動編集し寸

法を自動変更して複数寸法のメッシュファイルを自動生成することをこころみた-モデル形状変更のみ(結果を抽出する部分を作成するのが面倒だったため)-実験計画は単純パラメータStudy(総あたり)-各メッシュファイルをunv形式で出力lt実行順に1unv 2unv hellip と名前をつけるgt

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 54: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota でSalomeスクリプト起動②

bull 3つのファイルを準備する- Dakotaのin ファイル データテンプレート(ここではSalome実行用Python Script) 実行用のShell Script

Methodmultidim_parameter_study

partitions = 2 2variablescontinuous_design = 2

lower_bounds 100 100upper_bounds 200 200descriptors X Y

Dakota in file の一部

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 55: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota でSalomeスクリプト起動③bull Salome実行用Python ScriptをDakotaがパラメトリックに変更できるようにdakotaの変数記載に編集する(in file の変数名と合わせる)

bull 出力されたunvファイルが上書きされないようにファイル名を変更するShell Script を編集lt結構面倒gt

bull Dakota を実行うまくいくとUnvが自動出力dakota -i dakota_abaq_optin gt tableout

Begin of NoteBook variables section notebookset(ldquoAArdquo X) larr Xに変更notebookset(ldquoBBrdquo Y) larr Yに変更notebookset(CC 15)

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 56: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Dakota でSalomeスクリプト起動④無事形状が変更されているかを確認

1unv 2unv

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 57: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

FRIENDSHIP-Frameworkの無料ソフトCAEseFreeを試してみる①

bull CAEseFree とはOpenFOAMなどのモデル形状作成に無料で使えるCADソフトプリポストのようなもの商用版CAESEFFWの機能制限無料版という位置づけ商用版ではCFDと自動連携して形状最適化ができるみたいFREE版でもパラメータSTUDYはできる

形状をパラメトリックに変更可能なようで形状最適化やパラメータスタディに便利のような感じである

SLIDE SHARE にFN さんの資料が上がっているので参照

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 58: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる②

bull インストール方法など-Windows Linux の32 64bit 環境で動作する(Windows7 64bit Ubuntu1204LTS 64bitで動作することは確認した)-Install はHPからモジュールをダウンロードしてWindowsはexe を実行linuxは圧縮ファイルを展開するだけ-初回起動時にユーザ登録(Mail アドレス)が必須で

二回目以降もライセンスを確認しにサーバにアクセスするのでネット環境必須

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 59: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる③

簡単な操作例① CAD メニューのCurves NACA 4DS カーブを選択② パラメタ(デフォルト)と断面図が出てくる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 60: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる④

簡単な操作例③ パラメタを変えてみる

断面形状も勝手にかわる

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 61: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

FRIENDSHIP-Frameworkの無料ソフトCaeseFreeを試してみる⑤データは基本的にSTL で出力する模様

形状を作ったらこれで出力すればよいらしい

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 62: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

ABAQUSCAE Student Editionとは

商用ソフトABAQUSの無料版

解析実行する場合メッシュデータ数が構造解析1000節点流体10000節点の制限

があるが形状を作成するだけなら無制限形状はStepIges形式などで出力できるモデル作成手順をPythonスクリプトで出力できる

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 63: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Adventure CADbull 形状をテキストで記述して作成する簡易

CAD平面をSweep回転などして形状作成できるのである程度形状は作成できる

bull コマンドが10個くらいしか無い

box 0 0 0 10 50 100

原点と対角節点座標を指定する

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 64: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツール

bull 結果のグラフ化だけならParaViewでそこそこ商用最適化ツールのような表示が可能

bull もう少し難しい統計分析(クラスタリングやデンドログラム主成分分析 など)は統計分析用の専門ソフト(R または Pythonの統計分析関係ライブラリ群) を使うと商用ソフトとほぼ同等のことができる

bull 統計解析データマイニング関連のフリーのライブライ(Python関連)の充実度は最近すさまじくはっきり言って商用ソフト凌駕した

商用の最適化ソフトの売りの一つは大量データの結果分析機能充実であったがここでの差はほとんどなくなったと考えられる

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 65: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツールParaViewでの可視化例①

bull ParaViewでCSV形式で出力したデータを読み込む最初はテーブルがそのままこんな感じで表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 66: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツールParaViewでの可視化例②

bull 新規Layoutを選択しPlot Matrix View を選択すると散布図マトリックスが表示される

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 67: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツールParaViewでの可視化例③

散布図マトリックスの変数をしぼりこんだ例

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 68: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツールParaViewでの可視化例④

新規レイアウトにてParallel Coordinate Viewを選択するmodeFrontier の多次元レーダチャートのようなPlot を描くことが可能

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 69: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析①

散布図マトリックス

度数分布

デンドログラム

もう少し統計的な分析はRなどでできる

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 70: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

無料のデータ結果可視化統計分析ツール統計解析ソフトRによる分析②

主成分分析

次元削減の例

RのGUI ldquoRコマンダーrdquoやldquoEZRrdquo が 出ているのでコマンドを知らなくても問題ない

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 71: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Pythonの統計分析に便利ツール

1 Numpy

2 pandas

3 Matplotlib

4 IpythonIpython notebook

5 Scikit-Learn

6 SciPy

これだけあればほとんどの統計分析グラフ可視化ができる

それぞれインストールしてもよいが面倒な場合はAnaconda Python というパッケージ(Linux Windowsetc ) が無料でおとせるので

これを使うとよい

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 72: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Pythonの統計分析に便利ツール

IPythonIPython notebook

ndash IPython notebook

ndash ウェブブラウザ上で動作

ndash インラインで図の表示も可能

コードと結果がブラウザ上で同時に見られるため

試行錯誤しながら数値計算するのにお勧め

セル単位で実行

メモもできる学校授業など向き

httpipythonorg

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 73: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Scikit-learn を使った統計分析例①線形回帰など基本機能は当然あります

グラフはMatPlotlib で書きます

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 74: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

Scikit-learn を使った統計分析例②

散布図マトリックス

RBF カーネルを用いた識別

Scikit-learn のR より優れた点はガウス関数を用いたRBF ネットワークモデル

で近似関数識別を行うことができる点(R は線形近似のみ)

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 75: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて①

a adjointShapeOptimizationFoamって何OpenFOAM V200 から実装された形状最適化を有する非圧縮性流体ソルバrarrhttpwwwopenfoamorgversion200Other There are other new solvers including adjointShapeOptimizationFoam for optimisation against pressure loss using an adjoint formulation( uarrということで圧力損失を最小化するものらしいです)

b Tutorial optOpenFOAMOpenFOAM-23xtutorialsincompressibleadjointShapeOptimizationFoampitzDaily

c 流体計算そのものはSimpleFoamと同じ(と思われる)

d Adjoint法(日本語では随伴変数法とか訳される)による形状最適化機能を有する

e 配管などの内部流れのみ適用可能

rarr 最適化オタクとして興味があったのだがいままで未着手今回初めて調べてみた

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 76: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

76

シミュレーション最適化手法の概要解析分野から見た最適化手法の分類

形態による分類-パラメータ(寸法)最適化問題寸法材料物性などを最適化-形状最適化問題位相を維持しつつ形状を最適化-位相最適化問題位相幾何学形状を最適化

B

A

Arsquo

Brsquo

パラメータ最適化

初期形状

形状最適化

位相最適化

ノンパラメトリック最適化 DAKOTAやOpenMDAOはパラメータ最適化(設計変数が有限個)のソフトであるAdjoint法はこっち

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 77: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて②bull Adjoint法(随伴変数法単純に随伴法と呼ぶこともある)は何もの

rarr 制約条件付きの非線形最適化問題の解法の一つでラグランジュの未定乗数法の一種(というか

そのものです)

非線形最適化法 NLP

-制約条件無し最急降下法Newton法共役勾配法(CG法) rarr 評価関数の設計変数に対する微

分を使う例 最急降下法 yn+1 = yn+ K(ΔyΔx)

-制約条件有りペナルティ関数法逐次2次計画法(SQP法)

rarr このほかにラグランジュ未定乗数法がある

ペナルティ関数法(制約条件式を逆数等にしてペナルティ項として評価関数に足して

拡張評価関数に対する制約条件なしの最適化アルゴリズムを適用する方法)

とラグランジュ未定乗数法(制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足す)は考えは別ものですが最終的な定式化はほぼ同じような

感じになります (SQP法はより具体的な計算アルゴリズム)

httpjawikipediaorgwikiE99D9EE7B79AE5BDA2E8A888E794BBE6B395

(非線形計画法のWIKIページから引用)

2次元の例制約空間(水色)と目的関数(直線)の接点が解である単純な問題の例として以下の制約条件群がありx1 ge 0 x2 ge 0 x1

2 + x22 ge 1 x1

2 + x22 le 2

次の目的関数を最大化する問題を示すf(x) = x1 + x2ここで x = (x1 x2) である

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 78: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて③

bull ラグランジュ未定乗数法計算の簡単な例

制約条件式に新たに定義した変数=ラグランジュ乗数を掛け

て評価関数に足すttpmcwebnagaokautacjp~kurahashilectureoptimal-design2pdf

変分法に基づく最適変分法に基づく最適設計

(制約条件付きの汎関数の最小化問題) 倉橋殿資料darrから引用

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 79: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて④bull ラグランジュ未定乗数λ=随伴変数

随伴変数法の特徴 (畔上先生darr下記資料から抜粋)

httpwwwazcsisnagoya-uacjpclassadaptive-systemsnuidehtml

直接微分法

123 (直接微分法の特徴) 直接微分法は次のような特徴をもつ

(1) 直接微分法では(125) の計算をn 回繰り返す必要があるこのことは多設計変数(n ≫ 1) のときに不利となるもしも逆行

列K10485761 を保存しないで設計変数ごとにK10485761 を求め直すときには差分による断面積微分の計算法と

同程度の計算量となる

(2) 一方(125) の計算を終えてuaT をいったん求めてしまえば uaT はすべての評価関数f0~ fm に対して共通に使えるこのこ

とは評価関数が沢山(m ≫ 1) のときに有利となる

rarr(注 uaTというのはこの問題では変位(構造解析の問題)で最適条件を満たす最適条件を満たす主問題(Ku =f )の解のことつまり一度最

適解を求めてしまえば評価関数が沢山あっても使い回しできるという意味)

随伴変数法

125 (随伴変数法の特徴) 随伴変数法は次のような特徴をもつ

(1) 随伴変数法では随伴問題の数は評価関数の数m + 1 と一致するこのことは評価関数が沢山(m ≫ 1) のときに不利になる

(2) 一方随伴問題の数m + 1 は設計変数の数n に依存しないそこで多設計変数(n ≫ 1) のときには有利になる

(3) さらに随伴問題の変数の数は状態方程式の変数の数n と一致するこのことは状態変数が時間領域や物理的空間領域で定義された

関数になった場合(状態空間は無限次元空間になる) でも随伴変数法は成り立つことを意味する

つまり随伴変数法は形状最適化や位相最適化など理論的には設計変数の自由度が無限個になるような問題(実際はFEMFVMなどで離散化するので自由度は有限個になる)に有利である逆に設計自由度が寸法数個

など少ないパラメータで表せるような単純なパラメータ最適化問題には向いていないと考えられる

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 80: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑤bull 随伴変数法の特徴 その2問題点課題 (大林先生darr下記資料から)

httpwwwifstohokuacjpedgepublicationschap2pdf [CFDによる最適設計の動向科

研費報告「市場競争力に基づく新しい航空機設計法の研究」平成14年3月第2章] より1 回の解析ですべての設計変数の勾配情報を計算できる画期的な方法としてAdjoint 法があるこの方法は上の随伴方

程式を利用するまず流れの支配方程式(22)を解くその情報を利用して随伴方程式(24)((23)の間違いと思われ

る)を解きラグランジュ係数 ξ を決定するそして最適性条件式(24)によってpartJpartg を計算するこうして得ら

れた勾配情報を用いて非線形計画法を実行する設計変数の次元がどんなに増えようと1度にすべての設計変数の勾配計

算ができるというのは多くの設計変数を必要とする3 次元の複雑形状の設計に対してすばらしい利点であるただし

目的関数や設計変数を変えるたびに定式化からコーディングまでやり直さなければならないという重大な欠点を持つ

目的関数や設計変数の追加変更が必要になった場合プログラム自体を作りかえる必要がある

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 81: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑥bull OpenFOAM の adjointShapeOptimizationFoamを調べる その1

とりあえずtutorial を実行してみるpitzDaily の1個だけ

rarr

$FOAM TUTORIALSincompressibleadjointShapeOptimizationFoampitzDaily

bull Allrunが入っていないので

blockMeshを実行後adjointShapeOptimization を実行する

bull 2D問題なのですぐに計算が終わる結果をparaFoam で可視化すると次の

ような各分布図が得られる通常の流速U圧力pの他に謎の変数α(アル

ファ)とaのついた流速Ua圧力pa が計算されているrarrさてこれは何で

しょう

bull OpenFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarrがネット検索したら結構一杯資料が出てきた

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 82: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑦bull OpenFOAM の adjointShapeOptimizationFoamを調べる その2

とりあえずtutorialpitzDaily を計算した結果

オリジナルのメッシュ

圧力分布 t=1000

流速分布 t=1000

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 83: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑧bull OpenFOAM の adjointShapeOptimizationFoamを調べる その3

とりあえずtutorialpitzDaily を計算した結果2

なぞの変数 α

圧力のようなPa分布 t=1000

流速のようなUax分布 t=1000

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 84: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑨bull OpneFOAMの他例と同様に詳しい説明が書かれた資料は同封されておらず

さてどうしたものかrarr ネット検索したら結構一杯資料が出てきた

httpsgroupsgooglecomforummsgopenfoamn6RtyDJjt2grppkHt_bT6wJ(Google Openfoam group での大渕さんと桜木さんのやりとり)darr

大渕さん こんにちはソルバソースコードに記載されている文献に詳しい説明があります00032 References00033 yenverbatim00034 Implementation of a continuous adjoint for topology optimization of00035 ducted flows00036 C Othmer00037 E de Villiers00038 HG Weller00039 AIAA-2007-394700040 httppdfaiaaorgpreviewCDReadyMCFD07_1379PV2007_3947pdf00041 yenendverbatim

このソルバはadjoint法(随伴法)で圧力損失を最小化させる最適化ソルバです

aがついた変数はそれぞれ元になる変数の随伴変数になります以上ご参考まで

大渕さんのコメントから ldquoardquo のついた変数は

随伴変数つまりラグランジュ乗数になるということが分かったA はadjointの a (だだし論文はネットでは概要のみで本文は無料公開はされていなかったので入手断念)

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 85: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑩bull より詳しい説明資料OpenCAE関西の高木先生の資料

httpofbkansaisakuranejpdatatakagi_adjointpdf

rarr 随伴変数や定式化について説明ありこれからα はrdquoporosityrdquo 「空孔

率」とでも訳すであるとわかる意味合いとしては密度の逆数でありこの値が高いところは不要であるということで削るべき場所となるOpenFOAMの adjointShapeOptimizationでは各セルの空孔率αを設計変数として(従ってセルを細かくするとinfinに設計変数が増える)目的関数である圧力損失を最小化する計算を行っていることが理解できる

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 86: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑪bull より詳しい説明資料

An (more) eective Discrete Adjoint Model for OpenFOAMMarkus Towara Uwe NaumannSoftware and Tools for Computational Engineering ScienceRWTH Aachen UniversityEuroAD 2013 Oxford 10 December 2013

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 87: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑫bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

添付のカスタマイズコードUNAdjointShapeOptimizationFoam(porosity をupdate しない)をコンパイルしてみるrarr 展開後端末でwmakeするOpenFOAM 22用のようだが23で問題なくコンパイルできた

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 88: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarrソースコード解説とカスタマイズ例追加チュートリアルがある

adjointShapeOptimizationFoamの計算手順

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 89: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationFoamについて⑬bull より詳しい説明資料

httpwwwtfdchalmersse~hanikurserOS_CFD_2013

uarr追加チュートリアル実施例

添付のtutorial PipebendingUNAdjointShapeOptimizationFoam で計算するInlet の上側エリアが不要と判断されている模様

inlet

outlet

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 90: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

adjointShapeOptimizationまとめ

bull 各セルのporosity(空孔率)αを設計変数として圧力損失を目的関数Jとして形状最適化計算を行うもの構造解析では位相最適化に相当するものであり当初境界形状を移動させる形状最適化機能と思っていたが違っていた

bull 随伴変数(aつきの変数=ラグランジュ乗数)と空孔率αが基本変数(速度圧力)に加えて同時に計算される

bull 目的関数を圧力損失以外の変数や設計変数をporosity(空孔率)α以外に追加したい場合はソースコードの変更が必要

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します

Page 91: OpenCAE情報交換会 SH - システム創成工学科 機械科 …hirose/ockitatohoku/ref/7-12...Calculix, CodeAster, OpenFOAM, etc Dakotaとは②? •DAKOTAは具体的には何に使えるのか?-Optimization

まとめ

bull無料で使える最適化ツールと関連ソフトについて調査したこれまでの結果をまとめてみましたbull最近のオープンソースの充実度はすさまじくただで数年前は百万円はしたソフトと同様のことができますbull関連資料を無料で公開してくれている有志のみなさんに感謝します