ExcelVBAでモンテカルロシミュレーション【滑動に関する信頼性解析】と同じ問題をPythonを使って解いてみます。解の傾向についてはExcelVBAと大きく異ならず、FORMよりも1~2%程度高い破壊確率となりましたが、計算も図化もPythonの方が実用的に感じました。なお、MCSは乱数によって同一解が得られない点に注意が必要です。
例題:壁体の滑動問題
ここで、扱う例題は、下図に示す壁体の滑動問題です。詳細は、ExcelVBAでモンテカルロシミュレーション【滑動に関する信頼性解析】を参照ください。
MCSプログラム
計算フロー
計算フローとプログラムは以下のようです。
- 入力パラメータの入力
- 正規分布乱数、および性能関数(Z<0のとき1、Z≧0のとき0を返す)の定義
- 試行回数dnm回毎に破壊確率を計算
- 試行回数dnm回毎に xx(試行回数)とyy(破壊確率)のリストに出力
- 試行回数と破壊確率をグラフ化
関数の定義(def)
正規分布乱数の発生と性能関数の結果に応じた戻り値の設定を、関数として定義して利用しました。
def 関数名(引数1,引数2,・・・・): 処理 return 戻り値
その他、正規分布乱数などのコマンドについては、Pythonで正規分布乱数を生成してヒストグラムと基本統計量をチェックを参照ください。
計算結果
計算結果として、同じ入力データで三回試行した結果を示します。つまり、全く同じデータで計算したとしても、乱数が異なるために計算結果が異なります。なお、各ケースの試行回数は300万回です。
FORMの破壊確率の1~2%高い破壊確率となっており、ExcelVBAで計算した結果と同じ傾向にあります。しかし、さらに試行を繰り返せば、乱数のパターンの違いにより、破壊確率が多少変動することが予想されます。
まとめ
滑動の問題を例として、Pythonを使って解いてみました。解の傾向についてはExcelVBAと大きく異ならず、FORMよりも1~2%程度高い破壊確率となりました。
実際に作業を行ってみると、Pythonでは多くのモジュールが使用できる点でプログラムの作成や図化がとても楽で、計算、図化ともにPythonの方が実用的に感じました。一方で、ExcelVBAはインストール等の煩わしさがなく、Excelが日常的に使用されるツールであることから、多くの方に支持されているものと思われます。
しかしながら、技術計算などの更に複雑な計算が必要になる場合には、Pythonが圧倒的に有利なのではないでしょうか。
コメント