OpenMDAOの概説
OpenMDAOとは?
- 複合領域の設計・解析・最適化に関するPythonのフレームワーク
- 開発元:NASA グレンリサーチセンター
- ライセンス:Apach Licence 2.0
- プラットフォーム:Windows、Linux、OS X
- 勾配法だけでなく遺伝的アルゴリズムや粒子群最適化をサポートする
- MPIベースの並列計算が可能
対抗馬
* Dakota かな?
OpenMDAOの歴史
| 年/月 | version | 出来事 | 
|---|---|---|
| 2010/7 | 0.0.1 | リリース | 
| 2015/1 | 0.12.0 | GUIやめました! | 
| 2015/4 | 0.13.0 | 次version 1.0ですから | 
| 2015/7 | 1.0.0 | フレームワーク見直しました!(後方互換性なし) | 
| 2016/7 | 1.7.1 | リリース | 
以上のようにバージョン0.13以前と1.0.0以降では全く別物になってしまった.
本記事では,バージョン1.7.1のインストールについてまとめる.
蛇足ではあるが0.13.0以前のバージョンのインストールについてこちらのslideshareを参照.
OpenMDAOのインストール
前提環境
事前にGit(オプション), Python, Pip, Numpy, Scipyがインストールされていれば良いらしい.(未確認)
本家のドキュメントには次のように記載されている.
- サポートOS(テストしているOS)
| OS | Versions | ||
|---|---|---|---|
| Mac OS X | Mavericks(10.9.5) | Yosemite(10.10.5) | El Capitan(10.11.x) | 
| Ubuntu | Trusty Tahr (14.04.2 LTS) | Vivid Vervet (15.04) | Xenial Xerus (16.04 LTS) | 
| Windows | 7 | 8 | 10 | 
尚,RHELやMintなど他のディストリビューションへもインストールはできるとのこと.
実際CentOS6.4へのインストールは特に問題なくできた.
- 各ソフトやPythonパッケージのバージョン
| packages | versions | 
|---|---|
| Python | 2.7.9 以上, 3.4.3以上 | 
| Numpy | 1.9.2以上 | 
| Scipy | 0.15.1以上 | 
| Git(Optional) | - | 
今回はUbuntu 14.04 LTS上で作成したAnaconda環境を用いる.
conda create -n py27 python=2.7 anaconda
source activate py27
pyenv環境下にAnacondaをインストールしている場合, 
y_samaさんのpyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類を参照のこと.
インストール
PyPIに登録されているのでpipでインストール.
condaではインストールしない(anacondaには旧バージョン(0.13)が登録されいる)
pip install openmdao
動作確認
下記を実行後,動作確認stdoutが確認できればOK.
PY27=`which conda`
cp ${PY27:0:-10}/lib/python2.7/site-packages/openmdao/examples/paraboloid_example.py .
python paraboloid_example.py
##############################################
Setup: Checking root problem for potential issues...
No recorders have been specified, so no data will be saved.
Setup: Check of root problem complete.
##############################################
-15.0
MPI関連のインストール
condaを用いてインストール. condaの mpi4pyのMPIはMPICH2を用いている
conda install mpi4py
conda install -c mutirri petsc4py
petsc4pyの動作確認
下記petsc4py_test.pyを準備する
from petsc4py import PETSc
rank = PETSc.COMM_WORLD.getRank()
num_ranks = PETSc.COMM_WORLD.getSize()
x = PETSc.Vec().createMPI(4) # VecCreateMPI: Creates a parallel vector.  size=4
x.setValues([0,1,2,3], [10,20,30,40]) # VecSetValues: Inserts or adds values into certain locations of a vector.  x[0]=10, x[1]=20, x[2]=30, x[3]=40
print ('Rank',rank,'has this portion of the MPI vector:', x.getArray() ) # VecGetArray: Returns a pointer to a contiguous array that contains this processor's portion of the vector data.
vec_sum = x.sum() # VecSum: Computes the sum of all the components of a vector. 10+20+30+40=100
if rank == 0:
    print ('Sum of all elements of vector x is',vec_sum,'and was computed using',num_ranks,'MPI processes.')
下記を実行後,下に示す結果を確認できればpetscの動作確認はOK.
mpirun -np 2 python petsc_test.py
(('Rank', 1, 'has this portion of the MPI vector:',
 'Rank', 0, 'has this portion of the MPI vector:', 
array([ 10.,  20.]))
array([ 30.,  40.]))
('Sum of all elements of vector x is', 
100.0, 'and was computed using'
OpenMDAOのMPI動作確認
下記を実行後,log.doeの末尾が下記通りであればOK.
(stdoutにWarningが出力される)
PY27=`which conda`
cp ${PY27:0:-10}/lib/python2.7/site-packages/openmdao/examples/doe_example.py .
mpirun -np 5 python doe_example.py >log.doe
tail -10 log.doe
  const.c: 3.0
  dut.y: 13304.993403
  indep_var.x: 4434.99780099
Timestamp: 1480262524.502128
Iteration Coordinate: rank3:Driver|1
Iteration succeeded: yes
Unknowns:
  const.c: 3.0
  dut.y: 13266.2297346
  indep_var.x: 4422.07657819
まとめ
- OpenMDAOの概説を行った
- OpenMDAOのインストール,動作確認を行った