日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

數(shù)據(jù)驅(qū)動的動態(tài)系統(tǒng)(Dynamical System)建模(一):深度學習

2022-04-06 19:39:18·  來源:劉海偉 MATLAB  
 
動態(tài)系統(tǒng)建模被各領(lǐng)域廣泛應用,例如電動汽車,能源系統(tǒng),航空航天。我們本文提到動態(tài)系統(tǒng)主要是被控對象,對被控對象進行建模是因為我們希望了解這個系統(tǒng)(被控

動態(tài)系統(tǒng)建模被各領(lǐng)域廣泛應用,例如電動汽車,能源系統(tǒng),航空航天。我們本文提到動態(tài)系統(tǒng)主要是被控對象,對被控對象進行建模是因為我們希望了解這個系統(tǒng)(被控對象)的物理特性以及接受一些外部輸入(力,扭矩,電流等等)時會有什么樣的動態(tài)響應,基于此從而可以更好的給出控制輸入得到我們期望的系統(tǒng)的輸出,以及理解系統(tǒng)的退化或最大化提升系統(tǒng)效率。

這些動態(tài)系統(tǒng)的行為是由多物理場復雜的交互作用決定的,因此系統(tǒng)行為和系統(tǒng)響應建模通常需要復雜的第一原理支撐,仿真時也需要大量的計算(例如有限元模型)。

這也是本文的出發(fā)點,提供數(shù)據(jù)驅(qū)動(主要介紹深度學習和系統(tǒng)辨識)的模型降階(Reduced Order Modeling)提速的方法,通過數(shù)據(jù)得到具有一定保真度的數(shù)據(jù)模型,在捕捉到系統(tǒng)動態(tài)特性的同時也提升仿真速度

本文中將涉及多個 demo,數(shù)據(jù)以及腳本文件,若您感興趣進一步獲取這些鏈接,可以在文末填寫反饋問卷,獲取這些鏈接。

動態(tài)系統(tǒng)

動態(tài)系統(tǒng)包含狀態(tài)空間 S, 時間集 T 和一個映射(規(guī)則)來描述狀態(tài)隨時間的演變規(guī)則 R:S×T→S。例如給定一個時刻 t 的狀態(tài) st ,通過這個規(guī)則可以計算后面一個或幾個時刻狀態(tài) st+1=R(st),st+2=R(R(st)) 等等。動態(tài)系統(tǒng)通??梢杂秒S時間變化的方程或方程組來描述。尤其對于連續(xù)時間系統(tǒng),可以通過微分方程來表示。

我們先看一個簡單的常微分系統(tǒng)(ODE), [鏈接1]

圖片

其中 y(t) 是系統(tǒng)狀態(tài)。例如:一個簡單二自由度線性系統(tǒng),

圖片

其中 A 是一個 2x2 的矩陣。初始條件 x0 = [2; 0], 可以通過求解 ODE 方程得到的相應的二維輸出 x(t),包含兩個狀態(tài),時序和動態(tài)圖如下:

圖片

圖表 1 系統(tǒng)輸出x(t):

x0 = [2; 0];

A = [-0.1 -1; 1 -0.1];

trueModel = @(t,y) A*y; % 定義系統(tǒng)函數(shù),此處就是一個狀態(tài)空間方程

numTimeSteps = 2000;

T = 15;

odeOptions = odeset(RelTol=1.e-7);

t = linspace(0, T, numTimeSteps);

[~, xTrain] = ode45(trueModel, t, x0, odeOptions);

后面(在介紹 Neural ODE 部分)我們會嘗試利用這個系統(tǒng)的數(shù)據(jù) xTrain 進行深度學習模型的訓練來得到這個系統(tǒng)的數(shù)據(jù)代理模型(Surrogate Model),這種思路也可以同樣用于復雜系統(tǒng)。

既然數(shù)據(jù)驅(qū)動,有很多機器學習和深度學習算法可以用,那動態(tài)系統(tǒng)建模有什么特殊性呢,不是都適用嗎?

目前工程中已經(jīng)用到很多穩(wěn)態(tài)(靜態(tài))模型。例如在發(fā)動機排放標定,通過 DoE 試驗時我們會將發(fā)動機維持在不同的穩(wěn)態(tài)工況(轉(zhuǎn)速恒定,扭矩恒定等等),通過試驗數(shù)據(jù)建模得到用于標定的穩(wěn)態(tài)數(shù)據(jù)模型[鏈接2]。

穩(wěn)態(tài)工況下,對于方程(1)這樣一個簡單系統(tǒng),其中 y(t)' 可以看作 0,到達平衡點,于是 y(t) 和 u(t) 關(guān)系恒定,不再在時間維度上與歷史狀態(tài) y(t-1),y(t-2) 等等有關(guān),因此穩(wěn)態(tài)模型針對穩(wěn)態(tài)工況是非常準的。

而在瞬態(tài)工況下通常 y(t)' 非零,因此方程(1)在求解系統(tǒng)輸出 y(t) 時不僅由當前時刻的輸入 u(t) 決定,還取決于 y(t-1),y(t-2),u(t-1), u(t-2) 等等,這就是動態(tài)系統(tǒng)的特殊性,當前輸出不僅依賴于當前的輸入,還依賴于系統(tǒng)過去的行為(歷史輸入和歷史輸出)。我們在下一篇關(guān)于系統(tǒng)辨識的文章中會基于示例詳細說明這一點。

不考慮動態(tài)系統(tǒng),單純從系統(tǒng)建模來說,通常有如下的兩個方向:基于第一原理的和基于數(shù)據(jù)驅(qū)動的。

圖片

第一原理建模是領(lǐng)域工程師都比較熟悉的,例如可以使用 M 腳本語言,Simulink 或 Simscape 建模語言從物理原理進行系統(tǒng)模型的創(chuàng)建。

那什么情況下搭建系統(tǒng)會考慮使用或部分使用數(shù)據(jù)代理模型(Surrogate Model)?

  • 物理系統(tǒng)原理比較復雜或者不夠清晰,無法構(gòu)建第一原理模型

  • 數(shù)據(jù)獲取相對簡單

  • 第一原理物理模型過于復雜,求解耗時,在控制開發(fā)時有時效要求,需要加速仿真計算

可以看到右半部分主要是基于數(shù)據(jù)驅(qū)動的建模手段,其中針對動態(tài)系統(tǒng)的建模主要是系統(tǒng)辨識和神經(jīng)網(wǎng)絡/深度學習。也是本系列兩個方向。

本文介紹神經(jīng)網(wǎng)絡的幾種用于動態(tài)系統(tǒng)建模的模型,下一篇文章會介紹系統(tǒng)辨識的幾種模型。

前饋神經(jīng)網(wǎng)絡(Feedforward Neural Network)

前神經(jīng)網(wǎng)絡大家都不陌生,各神經(jīng)元分層排列。如圖2

圖片

圖2 簡單前饋神經(jīng)網(wǎng)絡示意圖

每層神經(jīng)元只接受上層輸出,結(jié)果只傳給下一層,沒有反饋。稍微復雜點的如圖3。

圖片

圖3 squeeze net MATLAB 示例

前饋神經(jīng)網(wǎng)絡是相對于循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network)而言,后者具有反饋,后面我們也會介紹。

那么問題來了,前饋神經(jīng)網(wǎng)絡因為沒有反饋,如何表達動態(tài)系統(tǒng)(Dynamic System)的時間狀態(tài)依賴呢?

通常主要手段使用不同尺度的滑動窗口來構(gòu)建衍生特征從而表征系統(tǒng)在時間上的動態(tài)。

電池 SoC 預測示例

我們以電池管理系統(tǒng)為例,通過使用深度學習來估計電池的荷電狀態(tài) SoC(State of Charge)。

本示例主要介紹 SoC 數(shù)據(jù)驅(qū)動的建模方法,在即使不清楚電池電化學模型以及物理非線性特性的情況下,依然可以進行 SoC 估計。我們可以通過實驗室中收集到的實測數(shù)據(jù)進行一個前饋神經(jīng)網(wǎng)絡代理模型訓練實現(xiàn) SoC 估計[1]。

腳本和數(shù)據(jù)[鏈接3]

圖片

圖表4 數(shù)據(jù)集預覽和模型的5個輸入1個輸出

數(shù)據(jù)準備

我們利用實測數(shù)據(jù)通過預處理得到訓練數(shù)據(jù)集 cdsTrain,我們看其中一條數(shù)據(jù)記錄:

preview(cdsTrain)

ans = 1×2 cell array

{5×669956 double}    {1×669956 double}

數(shù)據(jù)包含五個特征,分別是電壓 V、電流 I、溫度 T、滑動平均電壓 V_avg、滑動平均電流 I _avg,其中后面兩個衍生特征用于表征動態(tài)信息。

搭建模型

接下來我們構(gòu)建神經(jīng)網(wǎng)絡模型,結(jié)構(gòu)比較簡單,三層全連接網(wǎng)絡,一個輸出的 Feedforward Neural Network模型。

layers =[sequenceInputLayer(numFeatures,"Normalization","zerocenter")

    fullyConnectedLayer(numHiddenUnits)

    tanhLayer                            % HyperbolicTangent

    fullyConnectedLayer(numHiddenUnits)

    leakyReluLayer(0.3)                  % 激活函數(shù)

    fullyConnectedLayer(numResponses)

    clippedReluLayer(1)                  激活函數(shù)

regressionLayer];

設(shè)置訓練選項并訓練

options =trainingOptions('adam', ...  % Adam optimizer

'MaxEpochs',Epochs,...

'ExecutionEnvironment','cpu',...%可以選擇GPU

    'InitialLearnRate',InitialLearnRate, ...

    'LearnRateSchedule','piecewise', ...

    'LearnRateDropPeriod',LearnRateDropPeriod,...

    'LearnRateDropFactor',LearnRateDropFactor,...

    'ValidationData', {X,Y}, ...

    'ValidationFrequency',validationFrequency,...

    'MiniBatchSize',miniBatchSize, ...

    'CheckpointPath', NET_Path);

圖片

圖表 5 訓練過程 Loss 變化

導入測試數(shù)據(jù)驗證模型在測試集上的準確度

圖片

圖表 6 深度學習模型的預測值與實測值比較

分享到:
 
反對 0 舉報 0 收藏 0 評論 0
滬ICP備11026917號-25