DWSIM へ Neural Network Unit Operation を導入して使ってみる
タイトル画像はこちらから持ってきました。化学プロセスシミュレーターの DWSIM の中の Neural Network Unit を Tutorial や YouTube をもとに作成した記事になります。
❓DWSIM とは❓
DWSIM は CAPE-OPEN のプロセスシミュレーター。 CAPE-OPEN だとこれ以外に COCO などがある。使い勝手としては、個人的には COCO のほうがフローの見た目がいいけど、こっちのほうがドキュメントとかがしっかりしている印象があるので、触ってみました。
概要や学習コンテンツとしては以下の内容があります。
✅ DWSIM の H.P.
✅ Learning resorces
✅ Udemy の講座
✅ YouTube の講座(字幕出ない。。。)
✅ 日本語の NOTE
こちらだと python でモデルブロックを作れたりニューラルネットワークが使えたりとするみたいなので、やってみたいと思います。
❓なぜ DWSIM なのか❓
他にも CAPE-OPEN のシミュレーターでは COCO が有名です。
COCO は 伊東先生が書籍や Youtube を出されているように日本語の記事が多く、初学者には入りやすいです。実際に私も最初は COCO を使ってましたし、業務にも使っていました。さらに 2021年4月に python unit もリリースされています。
こちらのほうが python のクラスや関数のドキュメントがしっかりしていると思います。が、値段が1年で2万弱、永年で8万弱と非常に高額です。そのため、DWSIM を選びました。高くて買えないです💦
💻インストール方法💻
こちらのページに概要とインストール方法が記載されています
The Neural Network Unit Operation is free, open-source, available as a separate package and requires DWSIM v6.1 Update 2 or newer to work.
って記載があるけど、有償です!!
今回は、私の PC が Windows10 Home ですので、 windows version をダウンロード & インストールしていきます。
右上の $ のところに金額を入れて、「これが欲しいです!」をクリックするとインストールできるようになっています。
'21/08/28 現在、バージョンが 2 つあります。このうち一方でいいみたいなので、 v.1.3.3 をダウンロードします。
次に、ダウンロードをしたファイルをどうするかというと
To install on Windows, unzip the contents of the zip package in the unitops folder inside DWSIM's installation directory. Create the folder if it doesn't exist.
と記載がある通り、DWSIM 上の "unitops" というフォルダ内で回答しましょう。ここで、注意です。
✅ 原文にもあるとおり、そのようなフォルダがないのであれば作成して
ください。多分あると思いますが。。。
✅ 7-zip ですので、お持ちでない方は以下の H.P. よりダウンロードして
ください。
7-zip で解凍する際は「ここで展開」を選択してください。
ここまで終わった状態で DWSIM を開くと以下のように、「User Models」に「Neural Network Unit Operation」のアイコンが出てきます。
🧠実際に使ってみる🧠
手順としては Youtube を参照にしてやっていきます。
この youtube の動画では熱交換器を想定し、どちらにも水を流した際のものをシミュレーションするみたいです。
ここの概要欄にトレーニングデータのリンクもあります。データの中身は以下の通りです(スクショ)
左から、W_cold:cold側の流量、W_hot:hod側の流量, Tin_cold:cold側の入温度、Tin_hot:hot側の入温度、Tout_cold:cold側の出温度、Tout_hot:hot側の出温度、Hxeff:熱交換器の効率だと思います。
それでは手順について説明していきます。
1. 物性として "water" を選択
2. 活性モデルとしては "steam table(IAPWS-IF97)"を選択
3. フローシートを作成する(下のフローシートを参照)
4. ANN Heat Exchanger の設定(input と output の指定)
5. モデルのトレーニングデータを設定。
Excelファイルを開いているとエラーがでますので、注意してください。
6. データ内の入力と出力を指定
ここで、output として複数選ぶことができます。 ANN の原理からするとs最後の出力層を 1 つではなく、3 つにしたってことだと思います。
7. モデルトレーニングパラメーターを設定
ここでは、データの正規化設定、トレーニングの設定、ネットワーク構造の設定、モデルの最適化の設定をします。
8. トレーニング
設定が終了したら "Train and Evaluate"をクリックすると簡単に走ります。MSEにて評価ってのは変更できなさそうです。最終的な MSE の値は 0.8418071 でした。Youtube だと prediction がデータごとに表示されていますが、最新版だとQQプロットになっています。
9. モデルの組込
model 組込ため、"Embed" をクリック。
10. モデルの設定
"Model Configuration" で各変数の設定を行います。 "Port" は "Connections" で設定した内容になります。まず、"Input Mappings"です。”Units” には単位を記載しましょう。
次に "Output Mappings" です。こちらの Port は Connections の Output に準じます。また、Hxeff は内部変数なので指定しなくても問題ないです。
11. それ以外の条件の設定(IronPython)
”Data Transfer Script” では Neural Net の推論以外でやりたいことを記述していきます。 Youtube では単一成分のフラッシュの方法を記述しています。圧力・温度から vapor fraction を計算しているみたいです。
Youtube だとすべてのコードがみえないので、推測ですが以下のコードであっていると思います💦
# 各フローから情報を取得する
HOT_IN = Flowsheet.GetFlowsheetSimulationObject('HOT_IN')
COLD_IN = Flowsheet.GetFlowsheetSimulationObject('COLD_IN')
HOT_OUT = Flowsheet.GetFlowsheetSimulationObject('HOT_OUT')
COLD_OUT = Flowsheet.GetFlowsheetSimulationObject('COLD_OUT')
HOT_OUT.Assign(HOT_IN)
COLD_OUT.Assign(COLD_OUT)
# 推論の方法を PT(圧力 & 温度)に設定する
COLD_OUT.SetFlashSpec('PT')
HOT_OUT.SetFlashSpec('PT')
# フラッシュさせるかどうか?デフォルトだと False になっている
HOT_OUT.OverrideSingleCompoundFlashBehavior = True
COLD_OUT.OverrideSingleCompoundFlashBehavior = True
📜結果と色々考察📜
結果
このように、大気圧条件下ですと冷水側の出口温度(COLD_OUT)は 100℃ となり、すべて蒸発していることが確認できました。python のスクリプトとかがある程度記述できるのであれば結構使えるのでは。。。と思っています。
Data Transfer Script 無の場合
スクリプトをなしにしてやってみましょう。
変化がありません。単一成分の条件であれば、Stream 内で処理してしまうためあまり効果がないのかもしれません。これが複数成分とかになるとScript の有無で結果がかわってしまうかもしれませんが、そんなときはよくやる「この後に想定している Unit を追加してそれをひっくるめて一つの単位操作」としてみるのが簡単かもしれません。
参考にしたデータの中身を確認する
R で散布図行列を出してみます。
左の4つが説明変数、右の3つが目的変数になっています。理論上、伝熱はチューブの流速や物性値(密度・粘度)によって決定される総括伝熱係数 U と温度によって決まります。これらは Q = UAΔT_lm という理論式になります(Q:伝熱量、U:総括伝熱係数、A:伝熱面積、ΔT_lm:対数平均温度差)。
つぎに COLD_OUT を重回帰分析で推論してみます。
今回のデータは線形でも問題ないことを確認しました。(Tin_cold の係数が正になっているのは気になりますが、今回は解釈性の話ではないので無視します)
’21/09/04追記)上記 Tin_cold の係数は正(入ってくる温度が高かったら出ていく温度も高い)ですね。すいません、訂正させてください。
今回のデータでは線形のデータですが、 ANN の性質上非線形でも対応できると考えています。つまり、化学プラントで多い非線形にも対応できるのが ANN Unit のいいところだと思いました。これは結構実際のプラントの内容を反映させるには重要なものです。現行販売されているソフトセンサーのパッケージである ExaRQE なんかは非線形のために Neural Net のアルゴリズムも実装されていますが、実際に使用されているのは PLS (線形)がほとんどだと聞いたことがあります。むしろ横河の ソフトセンサーの開発・実装の方々の特徴量作成がすごすぎて線形で全部イケてると私は思っています(笑)。しかし、そんな特徴量作成なんてちょっと難しい。。。という場合でも ANN Unit を用いれば結構簡単に実プラントの現象をある程度トレースできるのではないでしょうか?