3D積層造形プロセスにおいてき裂発生を抑制可能なNi合金組成の探索 - materialsintegration/optimization_by_sipmi GitHub Wiki

概要

解析概要


* 与えられた組成に対して、Thermo-Calcを用いたScheil凝固計算により、凝固開始温度と凝固完了温度の温度差(固液共存域温度、Brittle Temperature Range: BTR)を求める。
* Inconel 738LCをベースにする。
(Inconel 738LC)
			* Ni  Bal.
			* Al  3.2
			* C   0.1
			* Co 8.5
			* Cr 16.3
			* Mo 1.65
			* Nb  0.7
			* Ta  1.8
			* Ti   3.22
			* W   2.7
			* Zr  0.03

解析1 

解析手順の1は以下のような条件により、最適なTiとAlの値を求める。


  1. TiとAlの組成和(Ti+Al)を7.0 (mass%)に固定、その他の元素は上記Inconel 738LCの成分に固定
  2. Thermo-Calcの平衡計算から、γ'体積率 30%以上
  3. 上記の条件を満足した上で、固液共存域(BTR)が最も小さくなるTiとAl濃度(=7.0 - Ti濃度)を求める。
  4. ベイズ最適化などの最適化手法を適用する。
  5. パラ平衡を入れる場合と、入れない場合の2パターンで探索を行う。
  6. TiとAl組成の有効桁は、0.01 mass%とする。
  7. BTRが最小のものから3個程度の候補組成を得る。
  8. JMatPro*1で力学特性を計算してみる。

※1: 他の元素が固定のため、γ'量やBTR値の変化幅は小さいかもしれないが、動作検証も兼ねる

解析2 

解析手順の2は以下のような条件および手順で残り6つの元素の値を導出する。


  1. TiとAlの組成を解析1の結果に基づき固定。
  2. その他の元素について、1つずつ変化させていく。
  3. Thermo-Calcの平衡計算から、γ'体積率 30%以上となり、
  4. 固液共存域(BTR)が最も小さくなる濃度を各元素毎に求める。
  5. ベイズ最適化などの最適化手法を適用する。
  6. パラ平衡を入れる場合と、入れない場合の2パターンで探索を行う。
  7. 各有効桁(ステップ)は、0.01 mass%とする。
  8. 結果を眺めて、着目する元素を複数に絞り、解析3を行う。

解析3 

解析手順の3は以下のような条件および手順を実行する予定である。


  • 解析2の結果に基づき、影響の大きい元素およびその変化幅を決め、その中でγ'体積率 30%以上となり、BTR値が最小となる組成候補を探す。
  • 多くの組み合わせが出てくると考えられるため、最終的にどう絞り込むか検討が必要。10~20候補程度に絞りこみ、それぞれについてJMatProでの強度予測を行い、K社への提案組成を決定する。

※ 候補組成について、例えば800度での降伏応力が500 MPa以上などといった条件を加えられると良い(今後の検討)

その他


  • 今後、Mn, S, Si, Bなども探索空間に加えたい。

最適化

最適化の概要

Python用bayes推定パッケージ(py_basian_optimization)とDakotaを最適化のツールとして利用した。 bayes推定で大局解をもとめ、それをDakotaの初期値として利用する。 最適化の変数としてThermo-Calc用パラメータのうち、解析概要にあるパラメータを用い、目的関数としてThermo-Calcの計算を行った。計算の結果から固液共存域(BTR)を導出しこれが、最小となる最適化の評価を行った。 なお「γ'体積率 30%以上」の条件は後述のReLU関数を用いて30%以下の場合にペナルティを与えて評価値が除外される方向で対処した。最適化手法は「制約付き最小化共役勾配最適化法」を主に使用した。

最適化作業フロー.png

graph TD;
subgraph bayes推定
bayes001[Python:bayesian]
bayes002[パラメータ決定]
bayes003[Thermo-Calc実行スクリプト]
bayes004[戻り値を評価]
bayes005[終了]
bayes001==>bayes002
bayes004==>bayes001
bayes002==>bayes003
bayes003==>bayes004
bayes001==>bayes005
end

subgraph Dakota最適化
dakota001[Dakota最適化ツール]
dakota002[variable:パラメータ決定]
dakota003[interface:Thermo-Calc実行スクリプト]
dakota004[response:戻り値を評価]

bayes005==>dakota001
dakota001==>dakota002
dakota004==>dakota001
dakota002==>dakota003
dakota003==>dakota004
end
Loading

環境

検証に使用した環境を下記に記す。

  • Dakota:6.7
  • Thermo-Calc2019a
  • CentOS 7.x
  • Python3.6
    • bayesian-optimization:1.0.1

実行結果の評価

bayes推定およびDakota実行時の標準出力への出力をログとして記録する。これが詳細な最適化評価の結果となる。他に、「tabulargraphics.dat」というファイルが出力される。これは変数と評価の履歴のみである。これらから最適な入力パラメータを判断することとなる。

bayes推定のパラメータ

bayes推定プログラムのためのパラメータ探索が主目的ではないので、使い方を検索して多く見受けられた、以下のパラメータを使用する。

  • init_points:3を指定する。
  • i_iter:10を指定する。

Dakotaパラメータファイル

Dakotaの駆動には、まずパラメータファイルが必要である。いくつかのテンプレートをDakotaが用意しているので、それを使用してパラメータファイルを作成する。パラメータファイルは以下の構造を持つ。主な変更点を以下に列挙する。それぞれについて記述する。

  • method:最適化手法の指定
  • variables:変数の指定
  • interface:目的関数の駆動法の指定
  • response:目的関数からDakotaへ戻される評価値の処理方法の指定

method、手法の詳細

最適化手法は以下のものを実施した。それぞれについて結果を後述する。

  • conmin_fcgr:制約付き最小化共役勾配最適化法
    • max_iterations:10000(1万回まで試行を許可)
    • convergence_tolerance:1e-7(評価の際、小数点以下7桁まで見る)

variables、変数詳細

Dakotaで管理するThermo-Calcのパラメータのうち、以下を変数として採用した。

  • Ti
    • 初期値/最小値/最大値:3.22/2.9/3.54
    • Al + Ti = 7.0の条件は下記interface部で対処

interface、目的関数

最適化対象の関数、ソルバーの実行および必要であれば後処理を記述する。

  • analysis_dirver:実行用のスクリプトを指定する。
    • スクリプトの概要
      • Thermo-Calcのパラメータファイルを組み立てる(パラメータ値はDakotaより指示あり)
      • 同パラメータファイルに対し、Al + Ti = 7.0の処理を実施
      • Thermo-Calcを実行
      • 計算結果から固液共存域(BTR)とγ’体積率を導出
      • ReLUを用いてγ’体積率<30%の処理を行い、適合すれば固液共存域(BTR)の値にペナルティを与えた値をDakotaへ通知する

response

最適化処理対象の関数、ソルバーからの戻り値に対する処理を記述する。

  • objective_functions:1を指定する
  • numerical_gradientを指定。
    • method_source:dakota
    • interval_type:central
    • fd_step_size:.01
  • no_hessiansを指定

その他

Dakotaによる最適化の評価の対象外となるThermo-Calcへのパラメータの設定について

  • オルソ平衡とパラ平衡での評価を実施した。
  • Alの値
    DakotaではTiの値のみ変化させたので、別途用意したAlの値はそのままでは出力されない。このためAl/Ti/gamma量を別ログに出力した。
  • ログ
    Dakotaの実行時にDakotaが標準出力へ出力するログはdakota-<日付>-<3桁通し番号>.logで都度保存した。

付録

取り入れた様々な手順

  • 「固液共存域(BTR)の値」の取得
    Thermo-Calcより出力される標準出力より、以下の範囲の最初の値から最後の値を減算したもの。
    CALCULATING SCHEIL SOLIDFICATION
         T(C)      fraction solid
       1344.239       0.000000
     PHASE REGION:LIQUID + FCC_L12#2
         T(C)      fraction solid
       1343.761      0.8371007E-02
       1338.761      0.1111522
       1333.761      0.1995743
     ---途中省略---
     PHASE REGION:LIQUID + BCC_B2#1 + FCC_L12#1 + FCC_L12#2 + H_L21 + MU_PHASE + NI3TI_D024 + SIGMA
         T(C)      fraction solid
       1131.808      0.9810916
     PHASE REGION:LIQUID + FCC_L12#1 + FCC_L12#2 + H_L21 + MU_PHASE + NI3TI_D024 + SIGMA
         T(C)      fraction solid
       1131.648      0.9812790
       1126.648      0.9861966
       1121.648      0.9892608
       1116.648      0.9912963
       1111.648      0.9927217
    
      ...........................................................              
    
  • パラ平衡のための変更
      マクロファイルの最後を
    2000
    none
    none
    NONE
    y
    N
    NONE
    
    2000
    NONE
    NONE
    Y
    NONE
    C
    

  に変更。

  • 「γ'体積率」の取得
    値は以下の行を取得。
     FCC_L12#3                ORD    Status ENTERED   Driving force  0.0000E+00
     Moles 3.3661E-01, Mass 1.8643E+01, Volume fraction 3.3733E-01  Mass fractions:
     NI  7.44127E-01  TA  4.32362E-02  NB  6.79380E-03  ZR  5.20823E-04
     TI  7.17173E-02  CO  3.62730E-02  W   6.18190E-03  C   4.33771E-05
     AL  6.55129E-02  CR  2.41967E-02  MO  1.39737E-03
    

  FCC_L12#で始まる行に、「ORD」である行の直下の行の「Volume fraction」の次の数字を取得する。

付録

Dakotaのパラメータについての考察

スケーリングについて

dakotaで与える、パラメータのうち、

  • methodのscaling
  • vvariablesのscale_typeおよびscales について、あまりにもまとはずれな値を返すことが多かったので、簡単な比較を行ったところ、以下の通りとなり、これを組み合わせの指標とした。

目的関数

目的関数として、Rosesnbrock式を用いた。パラメータは以下の組み合わせを用いた。

  • scalingの有無
  • 初期値
  • scalingありの場合のタイプ

結果

結果は以下の通りとなった。

scaling 1 2 3 4 5 6 7 8 9
スケールタイプ なし auto value なし auto value なし auto value
スケール値 0.01 0.01 0.01 0.01 0.01 0.01
x初期値 5.00 5.00 5.00 -5.00 -5.00 -5.00 0.00 0.00 0.00
y初期値 5.00 5.00 5.00 -5.00 -5.00 -5.00 0.00 0.00 0.00
戻り値無変換
計算回数 1750 60.00 1681.00 246 372.00 267.00 369.00 110.00 404.00
最適解x 1.0912880578 2.2354317523 1.0188332110 0.9681165434 0.5693465325 0.9836457563 0.9699425538 0.5905509836 0.9667705118
最適解y 1.1915723701 4.9999871677 1.0381634256 0.9371588594 0.3225225892 0.9675381390 0.9407043756 0.3469214314 0.9345630200
返却値 0.0083774727 1.5270936645 0.0003567152 0.0010173789 0.1857290404 0.0002675047 0.0009041587 0.1679830331 0.0011048746
計算時間 643.98s 19.3384s 608.133s 71.7297s 135.851s 90.1717s 134.393s 34.2958s 137.839s

考察

上記より、スケール設定は無い、またはtypeをvalueとしたときのほうが良い結果が得られることがわかる。以降は基本、スケール設定無しで検証を進めることとする。

※スケール値を1とするか0.01とするかでの評価も行ったが、途中経過が設定値の倍率分違うだけで最適解は変わらなかったので、上記結果から省略した。
※responseのfd_step_sizeは評価しなかった。

⚠️ **GitHub.com Fallback** ⚠️