【実践pythonコード】AIによるCAEサロゲートモデルの作り方

CAEと機械学習

AIとCAEを組み合わせることで、製品開発をより効率よく回す試みが進められています。そのなかでも、CAEソルバを代替するサロゲートモデルが最も注目されています。

今回は、CAE結果からサロゲートモデルを実際に作成してみた手順を紹介します。

サロゲートモデルとは?

AIにCAE結果を学習させることで作る、CAEソルバを代替するモデルをサロゲートモデルと呼びます。

サロゲートモデルを構築するうえで実施するべきは、以下の2つです。

①CAE結果を用意する
②機械学習モデルをコーディングする

今回は、流体解析(CFD)の結果と、LightGBMという機械学習モデルを用いて、シンプルなサロゲートモデルを作る手順を紹介します。

サロゲートモデルのメリット

サロゲートモデルを用いるメリットは、主に予測時間の短縮です。

CAEは内部で反復計算を行うため、規模の大きい計算ほど処理時間が長くなります。いくつかの設計案を試すには、その都度、長い時間をかけて計算をする必要があります。

一方、サロゲートモデルは、機械学習モデルを一度構築してしまえば、任意の設計を試す時間は一瞬なので、より効率よく製品開発を行うことができます。

また、サロゲートモデルは複雑なCAEソフトウェアの操作なしで計算結果を得られるため、忙しい設計者の電卓として、CAE専任者が設計者に提供する価値もあると考えます。

CAE結果を用意する

今回は、上のテーブルのような、簡単なCAEモデルの結果をまとめた数値データを用います。(このテーブルデータはここにアップロードしました)

テーブルデータの中身を具体的に説明します。

円筒の中に物体(青)が設置されています。円筒と物体の寸法をfai, L, d, xを様々変えて、この管の内部に発生する圧力差をPを計算しました。今回は、98種類の計算を実施し、テーブルにまとめています。



機械学習モデルをコーディングする

では、サロゲートモデルを作りましょう。

CAE結果データをインプットとして、以下のコードによってlightGBMのサロゲートモデルを作ります。

lightGBMは機械学習の勾配ブースティング手法です。コードの詳しい説明はこちらの記事に記載してありますので参考にどうぞ。

import pandas as pd
import numpy as np

import lightgbm as lgb
import seaborn as sns

data_all = pd.read_csv("../input/210718-cae-resultcsv/210718_cae_result.csv")

train = data_all[:80]
test = data_all[80:]

# 学習データ
train_x = train[["fai","L","d","x"]]
train_y = train[["P"]]

# テストデータ
test_x = test[["fai","L","d","x"]]
test_y = test[["P"]]

params = {
    "objective" : "regression",
    "metric" : "rmse",
    "num_leaves" : 40,
    "learning_rate" : 0.01,
    "bagging_fraction" : 0.8,
    "feature_fraction" : 0.4,
    "bagging_frequency" : 6,
    "bagging_seed" : 42,
    "verbosity" : -1,
    "seed": 42
}

train_lgb = lgb.Dataset(train_x, label=train_y)
test_lgb = lgb.Dataset(test_x, label=test_y)
evals_result = {}
model_lgb = lgb.train(params, train_lgb, 10000, 
                  valid_sets=[train_lgb, test_lgb], 
                  early_stopping_rounds=200, 
                  verbose_eval=1000, 
                  evals_result=evals_result)

pred_lgb = model_lgb.predict(test_x)

columns = ["pred_y"]
pred_d = pd.DataFrame(data=pred_lgb, columns = columns)
test_y_reindex = test_y.reset_index(drop=True)

sns.scatterplot(x=test_y_reindex['P'], y=pred_d['pred_y'])
sns.scatterplot(x=test_y_reindex['P'], y=test_y_reindex['P']) #perfect fitting line

モデルの精度を確認した結果が出力されます。

サロゲートモデルの予測と、CAEの結果が完全に一致する場合のオレンジの線に対して、青い点は少し誤差があることがわかります。

この誤差が十分に小さければ、CAE計算をすることなく、サロゲートモデルが十分活用可能であると判断できます。

サロゲートモデルを活用する

list_new = [[103,510,24,12],[101,505,22,11]]
test_new = pd.DataFrame(list_new)
test_new.columns = ["fai","L","d","x"] 

pred_lgb_new = model_lgb.predict(test_new)
test_new["pred"] = pred_lgb_new
test_new

サロゲートモデルを活用します。

任意の値について、その寸法で設計した際の圧力差を求めることができます。

やってみるとわかりますが、上記コードを実行するのには1秒もかかりません。CFD計算を回すより圧倒的に早いことがわかります。

コードの中身を少し変えるだけで、ご自身のデータでもモデルを作ることができます。ぜひ一度、試してみてください。

関連記事

コメント

タイトルとURLをコピーしました