音叉の逆問題を機械学習で解くための Advance/FrontSTR による教師データ作成#
機械学習をする上での大きな問題点#
- 機械学習を行う上での頭の痛い部分
- 多数の教師データの作成をしなければならない。 (数千~数万ケース)
- 実験で多くのサンプルを用意するのは予算・時間的に難しい。
- 逆問題は、数理的に解くことが一般には難しい。
- 機械学習で逆問題を解く
- MLP (多層パーセプトロン : Multi-layer Perceptron) は、汎用方程式フィッティングのための機械と言われている。
MLP (多層パーセプトロン) について#
多層パーセプトロンの仕組み

今回は、
- プロング長さ
- プロング直径
- プロング間距離
- ハンドル長さ
- ハンドル直径
- 一次固有値 (周波数)
として MLP を学習させました。
MLP を使い逆問題を解く#
- 多層パーセプトロンを使い、逆問題を解く例として、音叉を取り上げた。
- 音叉は、プロング部とハンドル部で構成される一定の音を響かせる器具
- 知りたいのは 固有値 (発音周波数) → 音叉の各種寸法

FrontSTR でモデルを自動解析#
MLP で逆問題 (発音周波数→音叉の各種寸法) を求めるため、多数の教師データが必要となります。
- スクリプトでモデルを自動生成する。
- 境界条件を設定する。
- FrontSTR で固有値計算する。
- 計算結果を MLP に読み込ませ、学習させる。
- MLP を使い望む周波数を入力し、妥当な音叉の寸法を出力する。

モデルの自動生成#
今回は 1,000 ケースの音叉を作成しました。 (gmsh を用いて 1,000 個自動生成)

...(合計 1,000 ケース)
境界条件の設定#
FrontSTR の NGROUP の機能を用い、Python スクリプトでメッシュから平面を自動探索し、境界条件 (固定) の場所を特定しました。


FrontSTR で固有値計算#
- メッシュファイルを作成し、境界条件を設定した msh ファイル
- 固有値を求めるための cnt ファイル (固定)
- 各種ファイルを指定する全体制御ファイル (固定)
これらを 1,000 ケース用意出来たら、FrontSTR でシミュレーションをして固有値 (1次) を求めます。
- 材質は S45C 機械構造用炭素鋼
- ヤング率 :
- ポアソン比 :
- 密度 :
- それを CSV データとして集約する。

参考 1,000ケース (メッシュ作成 2,485秒 固有値計算 3,083秒)
計算結果を MLP に読み込ませ、学習させる#
集約した CSV ファイルを rust の burn で作成したプログラムに読み込ませ、学習させます。
burn は rust 用の機械学習用フレームワークです。

学習時間:60 秒程度
MLP を使い望む周波数を入力 妥当な音叉の寸法を出力#


FrontSTR で検算#
前の推測で出力された寸法のモデルを作成し、Advance/FrontSTR で検算した結果を以下に示します。
※ 可視化は Advance/REVOCAP_PrePost


まとめ#
- 音叉を題材に MLP で逆問題を解いた
- 学習データ作成 2,400 + 3,000秒 = 1.5時間
- 多数の教師データが必要
- MLP を用いて
-
MLP の学習時間 60 秒程度
-
Advance/FrontSTR で固有値解析シミュレーション (寸法 → 周波数) を行い、1,000 ケースのデータを用意することができ、MLP を学習させました。
-
学習した MLP を使って逆問題 (周波数 → 寸法) を解きました。出力は概ね妥当なものでした。