Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
OpenMDAOの最適化を試す(第23回オープンCAE勉強会@関西)
Next
Download to read offline and view in fullscreen.

4

Share

Download to read offline

OpenMDAO入門

Download to read offline

複合領域解析/最適化フレームワークOpenMDAOの使用方法説明資料

Related Books

Free with a 30 day trial from Scribd

See all

OpenMDAO入門

  1. 1. OpenMDAO 入門 2014/3/8 第 28 回 オープン CAE 勉強会 @ 関西 H. Tsubota
  2. 2. 概要 1. OpenMDAO とは 2.機能 3.Windows へのインストール 4.基本的な仕組み 5.簡単なサンプル問題 1. GUI 編 2. スクリプト編 6.まとめ 2
  3. 3. OpenMDAO とは ● 複合領域設計解析​ / 最適化フレームワーク ( Multidisciplinary Design Analysis and Optimization ) ● 開発元は NASA グレンリサーチセンター ● ライセンスは Apach Licence 2.0 ● Windows / Linux / OS X 対応 ● http://openmdao.org/ 3
  4. 4. 機能 ● ● ● ● ● 複数のソフトウェアを組み合わせて 1 つのシステム を作成可能(連成解析、最適化・・・) Python ベースのフレームワーク 最適化用エンジン Chrome ベースの GUI コマンドラインでの実行も可能 4
  5. 5. スクリーンショット 5
  6. 6. Windows へのインストール ( 準備 ) ● あらかじめインストールが必要なもの - Python 2.7.x - NumPy 、 SciPy 、 Matplotlib - Google Chrome ( GUI を使用する場合) ※ OpenMDAO ver 0.9.5 現在 64bit 版未対応なので 32bit 版 Python, Python モジュールを使用してください ※ 各 Python モジュールは以下から入手可 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 6
  7. 7. Windows へのインストール ● ● http://openmdao.org/downloads/recent/ から go-openmdao-( バージョン番号 ).py をダウンロード コマンドプロンプトからのスクリプト実行でカレントフォルダ にインストールされます(要ネットワーク接続) C:OpenMDAO>python go-openmdao-0.9.5.py ● ・・・ ( 省略 ) ・・・ ● ● The OpenMDAO virtual environment has been installed in ● C:OpenMDAOopenmdao-0.9.5 ● ● From C:OpenMDAOopenmdao-0.9.5, type: ● ● Scriptsactivate ● ● to activate your environment and start using OpenMDAO. ● ● C:OpenMDAO> 7
  8. 8. 起動 / 動作テスト / 終了 ● ● コマンドプロンプトで OpenMDAO インストールフォ ルダに移動。 起動 C:OpenMDAOopenmdao-0.9.5>Scriptsactivate ● ● 動作テスト (openmdao-0.9.5) C:OpenMDAOopenmdao-0.9.5>openmdao test ● 終了 (openmdao-0.9.5) C:OpenMDAOopenmdao-0.9.5>deactivate 8
  9. 9. 基本的な仕組み アセンブリ ドライバー ● コンポーネント ドライバー、コンポーネント、アセンブリなどを組み 合わせて解析システムを作成し、実行します。 9
  10. 10. ドライバー、コンポーネント ● 入力 ドライバー 最適化用エンジン。 パラメーター設定を担当。 あらかじめ組み込みの物が用意 されています。 出力 ● 入力 コンポーネント 出力 ドライバー コンポーネント 解析処理部。ユーザーが解く問 題に応じて自作します。 Python のクラスとして定義。 10
  11. 11. アセンブリ アセンブリ アセンブリ ドライバー ドライバー コンポーネント ● アセンブリ 処理の入れ物。アセンブリ自体をコンポーネントと して使用して階層構造を作成できます。 11
  12. 12. Paraboloid.py コンポーネントの書式 from openmdao.main.api import Component from openmdao.lib.datatypes.api import Float 必ず Component クラスを インポートします。 class Paraboloid(Component): """ f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 """ Component を継承した Python のクラス として自作コンポーネントを定義します。 # set up interface to the framework x = Float(0.0, iotype='in', desc='The variable x') y = Float(0.0, iotype='in', desc='The variable y') コンポーネントの入力値は iotype='in' とします。 f_xy = Float(0.0, iotype='out', desc='F(x,y)') コンポーネントの出力値は iotype='out' とします。 def execute(self): """f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 Minimum : x = 6.6667; y = -7.3333 """ メソッド名 execute のメソッドが OpenMDAO によって自動実行さ れます。 x = self.x y = self.y self.f_xy = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0 入力から出力を求めます。 12
  13. 13. 簡単なサンプル問題 ● 問題設定 放物面 : f(x, y) = (x-3)2 + xy + (y+4)2 – 3 範囲 : -50 < x < 50 -50 < y < 50 初期値 : x = 10 y = 10 として f(x,y) が最小となる x, y を探します。 13
  14. 14. GUI 編 14
  15. 15. GUI の起動、プロジェクト作成 (openmdao-0.9.5) C:OpenMDAOopenmdao-0.9.5>openmdao gui ① 新しいプロジェクトの作成 ②  ・プロジェクト名、  ・説明、  ・バージョン  を設定 ( 英数字 ) ③ 作成 15
  16. 16. 起動画面 16
  17. 17. コンポーネントの作成 ① 「 Files 」タブの 「 File 」をクリック ② 「 Edit File 」をクリック ③ ファイル名を入力して OK をクリック ④ コンポーネントの Python スクリプトを書き込み ※ 内容は「コンポーネントの書式」ページを参照 ※ 日本語文字不可 17
  18. 18. アセンブリの追加 ① 「 Library 」タブの「 Assembly 」を キャンバスにドラッグ&ドロップ ドラッグ&ドロップ ③ アセンブリが作成されます ② アセンブリに名前をつけて OK をクリック 18
  19. 19. ドライバーの追加 ① 「 Library 」タブの「 SLSQPdriver 」を アセンブリ上の「 driver 」にドラッグ&ドロップ 「 driver 」にドラッグ&ドロップ ②OK をクリック ※SLSQP : Sequential Least Squares Programming 逐次最小二乗プログラミング ③ ドライバーが SLSQPdriver に代わります 19
  20. 20. コンポーネントの追加 ① 「 Library 」タブの自作コンポーネント「 Paraboloid 」を アセンブリにドラッグ&ドロップ 「 MyAssembly 」にドラッグ&ドロップ ② コンポーネントに名前をつけ て OK をクリック ③ コンポーネントが配置されます 20
  21. 21. 設計変数の範囲の設定 ④ ドライバーとコンポーネント の入力が接続されます ① ドライバーをダブルクリックします ② 「 Parameters 」タブを選択し、 「 Add Parameter 」をクリックします ③ パラメーター名 (Target) 、 最小値 (Low) 、最大値 (High) を入力し、 OK をクリック 21
  22. 22. 目的関数の設定 ④ ドライバーとコンポーネント の出力が接続されます ① ドライバーをダブルクリックします ② 「 Objectives 」タブを選択し、 「 Add Parameter 」をクリックします ③ 最適化する式 (Expression) を入力し、 OK をクリック 22
  23. 23. 設計変数の初期値設定 ① コンポーネントをダブルクリック ② 「 Input 」タブを選択し、コンポーネントの プロパティ( x, y )に初期値を設定します。 23
  24. 24. 計算の実行 ① ドライバーを右クリックし、「 Run 」をクリック 24
  25. 25. 結果確認 ② 計算結果はウィンドウ右部の「 Properties 」タブ、 または初期値設定と同じダイアログで確認できます ① 計算状況はウィンドウ下部のメッセージウィンドウに表示されます 25
  26. 26. 保存と終了 ① 「 Project 」タブでプロジェクトの保存と終了が可能 Commit : 保存 Close : プロジェクトの終了(プロジェクトリストへ移動) Exit : GUI の終了 26
  27. 27. スクリプト編 27
  28. 28. コンポーネントの作成 Paraboloid.py from openmdao.main.api import Component from openmdao.lib.datatypes.api import Float 必ず Component クラスを インポートします。 class Paraboloid(Component): """ f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 """ Component を継承した Python のクラス として自作コンポーネントを定義します。 # set up interface to the framework x = Float(0.0, iotype='in', desc='The variable x') y = Float(0.0, iotype='in', desc='The variable y') コンポーネントの入力値は iotype='in' とします。 f_xy = Float(0.0, iotype='out', desc='F(x,y)') コンポーネントの出力値は iotype='out' とします。 def execute(self): """f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 Minimum : x = 6.6667; y = -7.3333 """ メソッド名 execute のメソッドが OpenMDAO によって自動実行さ れます。 x = self.x y = self.y self.f_xy = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0 入力から出力を求めます。 28
  29. 29. アセンブリの作成 OptimizationUnconstrained.py from openmdao.main.api import Assembly from openmdao.lib.drivers.api import SLSQPdriver from openmdao.examples.simple.paraboloid import Paraboloid class OptimizationUnconstrained(Assembly): """Unconstrained optimization of the Paraboloid Component.""" def configure(self): 必ず Assembly クラスをインポート Assembly を継承した Python のクラス として自作アセンブリを定義 メソッド名 configure のメソッドで アセンブリの組み立てを行います。 # Create Optimizer instance self.add('driver', SLSQPdriver()) ドライバーをアセンブリに追加 # Create Paraboloid component instances self.add('paraboloid', Paraboloid()) コンポーネントをアセンブリに追加 # Iteration Hierarchy self.driver.workflow.add('paraboloid') ドライバーとコンポーネントを 関連付け # SLSQP Flags self.driver.iprint = 0 ログ出力設定 # Objective self.driver.add_objective('paraboloid.f_xy') 目的関数の設定 # Design Variables self.driver.add_parameter('paraboloid.x', low=-50., high=50.) self.driver.add_parameter('paraboloid.y', low=-50., high=50.) 設計変数の設定 29
  30. 30. 計算実行コード 下記実行用コードをアセンブリの定義されているスクリプトに記述 if __name__ == "__main__": opt_problem = OptimizationUnconstrained() 自作アセンブリをインスタンス化 import time tt = time.time() opt_problem.run() 計算実行 print "n" print "Minimum found at (%f, %f)" % (opt_problem.paraboloid.x, opt_problem.paraboloid.y) print "Elapsed time: ", time.time()-tt, "seconds" 「(アセンブリのインスタンス名).(コンポーネントのインスタンス名).(変数名)」 で値を参照することが可能 30
  31. 31. 実行 1. OpenMDAO インストールフォルダに移動 2. 「 Script/activate 」で OpenMDAO 実行環境を起動 3. 「 python (計算実行コードの記載されたスクリプト)」 で計算が開始されます 例: C:OpenMDAOopenmdao-0.9.5>Scriptsactivate ●(openmdao-0.9.5) C:OpenMDAOopenmdao-0.9.5>python D:WorkspaceOptimizationUnconstrained.py ● ● ● ● Minimum found at (6.666666, -7.333334) Elapsed time: 0.018000125885 seconds ● ● (openmdao-0.9.5) C:OpenMDAOopenmdao-0.9.5> 31
  32. 32. まとめと展望 ● まとめ GUI 、スクリプトの両方で OpenMDAO の操作手順 を確認できました。 ● システム構築はスクリプトベース、 運用(パラメーターの入力・計算実行)は GUI ベース が適していそうです。 今後の展望 ● ● ● ● スクリプトベースで構築したシステムを GUI にインポートできるのか確認 実際的な解析問題を使った試用 32
  33. 33. 参照 ● ● ● OpenMDAO v0.3.0 Paraboloid Tutorial https://www.youtube.com/watch?v=BK73Zria9OI Setting up a Basic Model With Paraboloid http://openmdao.org/docs/basics/assembly.html Building a Model - Unconstrained Optimization http://openmdao.org/docs/tutorials/optimization/unconstrained.html 33
  • seiichiromorizawa

    Sep. 2, 2017
  • rawwell

    Jun. 22, 2014
  • masashiobuchi5

    Apr. 5, 2014
  • fumiyanozaki96

    Apr. 5, 2014

複合領域解析/最適化フレームワークOpenMDAOの使用方法説明資料

Views

Total views

6,977

On Slideshare

0

From embeds

0

Number of embeds

2,599

Actions

Downloads

60

Shares

0

Comments

0

Likes

4

×