romAI検証コーナー(その10)van der Pol方程式のリミットサイクルを再現できるか?

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee

シンプルなモデルを使用して、romAIの機能をチェックしていきます。第10回は非線形振動子であるvan der Pol方程式のリミットサイクルがromAIで再現可能できるか確認します。

 

van der Pol方程式

3次の場合、以下の非線形微分方程式で表現されます。

image

非線形の減衰を持つ振動系ですので、van der Pol振動子(ファン・デル・ポール振動子)と呼ばれることもあります。

van der Pol方程式の数値解はAltair Activateで簡単に行えます。第7回で使用した1自由度ばねマスダンパー系のモデルの減衰項を非線形に変更しました。

image

mu=5で、初期値を(x0,v0)=(3,10)(青)と(x0,v0)=(0.1,0)(赤)とした場合のxの時刻歴とxv平面の軌跡です。どちらの初期値を用いても、xv平面で同じ軌跡に収束していることがわかります。これをリミットサイクルと呼びます。

image

muの大きさにより表れるリミットサイクルの形が変化します。

mu=1の場合

image

mu=5の場合

image

 

学習データの準備

今回はmu=1とmu=5のリミットサイクルがromAIで再現できるかを検証します。

様々な初期値からリミットサイクルに引き込まれる現象を再現するには、様々な初期値を用いた学習データが必要ですが、今回は時間を短縮するために、リミットサイクルの再現のみをゴールとします。したがって、初期値は(x0,v0)=(2,0)の1パターンのみとしました。

学習データとして、リミットサイクル1周期があれば十分ですので、現象時間は15secとし、x、vの履歴を取得しました。

注意点としては、mu=5の場合、変化が急峻となりますので、その急峻な変化が捉えられるようサンプリング時間を設定してください。今回は10^-3でサンプリングしています。

mu=1の学習データ(x、vの履歴)

image

mu=5の学習データ(x、vの履歴)

image

 

romAIの設定

romAIの設定を行います。今回は入力がありませんので、出力、状態量のみの指定です。出力、状態量ともに変位と速度としました。

Outputs: x, v

States: x, v

Physical constraintsを使用して、状態量同士の微分関係(変位xの微分が速度vであるという関係)を定義しています。

image

活性化関数はtanhとし、neural netは50 x 50として、epochsは500回としました。

image

 

計算結果

mu=1

romAIの予測結果はvan der Pol方程式のリミットサイクルを再現できていることがわかります。

また、学習データは0~15secのみでしたが、romAIは微分方程式を予測するので、15sec以降も正しく予測できることがわかります。

image

mu=5

romAIの予測結果はvan der Pol方程式のリミットサイクルをほぼ再現しているものの、xの時刻歴を見るとタイミングがずれていることがわかります。mu=5と非線形性が強くなると、x=±2での変化が急峻になるため、x=±2における小さい誤差の影響で時刻歴で見るとタイミングがずれてしまうと予測されます。

image

Lossの確認

romAIのトレーニング結果のLossを確認しました。mu=1,5ともに、10^-6のオーダであることがわかります。

非線形性の小さいmu=1の時刻歴を再現するにはこのオーダでも十分な精度ですが、非線形性の大きいmu=5の時刻歴を再現するにはLossをさらに小さくする必要がありそうです。

image

 

Lossを小さくするには

まずはEpoch数を増やすことが考えられます。トレーニングが十分でない場合、よりトレーニングを繰り返すことによってLossを小さくできます。

ただし、Lossが大きく振動している場合はEpoch数を増やしてもあまり効果がありません。

その場合は、Learning Rate(第9回参照)を小さくします。Leaning Rateを小さくすることで、Lossの振動が小さくなります。Lossの振動が小さい状態でEpoch数を増やすとLossをさらに小さくすることができます。

Epochsを500 -> 4000、Learning Rateを1e-3 -> 1e-4に変更しました。

image

image

 

Lossの確認

mu=5の場合のLossをトレーニングパラメータ変更前後で比較します。

Learning Rateを小さくしたことで、Epoch=500近傍の振動が低減していることがわかります。

Epoch数を増やしトレーニングを繰り返すことで、最終的に10^-7のオーダまでLossを低減できました。

image

結果の確認

mu=5の非線形性が強い場合でもxの時刻歴を正しく再現できるようになりました。

image

 

まとめ

romAIは非線形振動子であるvan der Pol方程式のリミットサイクルが再現できることを確認しました。

Learning Rateを小さくし、Epoch数を大きくすることで、Lossが低減し、非線形性が強い場合のリミットサイクルも再現できることを確認しました。

Comments