① 系統模擬技術主要有哪幾種
1.基本概念 所謂系統模擬,就是根據系統分析的目的,在分析系統各要素性質及其相互關系的基礎上,建立能描述系統結構或行為過程的、且具有一定邏輯關系或數量關系的模擬模型,據此進行試驗或定量分析,以獲得正確決策所需的各種信息。 2、系統模擬的實質 (1)它是一種對系統問題求數值解的計算技術。尤其當系統無法通過建立數學模型求解時,模擬技術能有效地來處理。 (2)模擬是一種人為的試驗手段。它和現實系統實驗的差別在於,模擬實驗不是依據實際環境,而是作為實際系統映象的系統模型以及相應的「人造」環境下進行的。這是模擬的主要功能。 (3)模擬可以比較真實地描述系統的運行、演變及其發展過程。 3、系統模擬的作用 (1)模擬的過程也是實驗的過程,而且還是系統地收集和積累信息的過程。尤其是對一些復雜的隨機問題,應用模擬技術是提供所需信息的唯一令人滿意的方法。 (2)對一些難以建立物理模型和數學模型的對象系統,可通過模擬模型來順利地解決預測、分析和評價等系統問題。 (3)通過系統模擬,可以把一個復雜系統降階成若乾子系統以便於分析。 (4)通過系統模擬,能啟發新的思想或產生新的策略,還能暴露出原系統中隱藏著的一些問題,以便及時解決。 編輯本段4、系統模擬方法 系統模擬的基本方法是建立系統的結構模型和量化分析模型,並將其轉換為適合在計算機上編程的模擬模型,然後對模型進行模擬實驗。 由於連續系統和離散(事件)系統的數學模型有很大差別,所以系統模擬方法基本上分為兩大類,即連續系統模擬方法和離散系統模擬方法。 在以上兩類基本方法的基礎上,還有一些用於系統(特別是社會經濟和管理系統)模擬的特殊而有效的方法,如系統動力學方法、蒙特卡洛法等。 系統動力學方法通過建立系統動力學模型(流圖等)、利用DYNAMO模擬語言在計算機上實現對真實系統的模擬實驗,從而研究系統結構、功能和行為之間的動態關系。
② 汽車發動機開環和閉環的區別
動態系統建模被各領域廣泛應用,例如電動汽車,能源系統,航空航天。我們本文提到動態系統主要是被控對象,對被控對象進行建模是因為我們希望了解這個系統(被控對象)的物理特性以及接受一些外部輸入(力,扭矩,電流等等)時會有什麼樣的動態響應,基於此從而可以更好的給出控制輸入得到我們期望的系統的輸出,以及理解系統的退化或最大化提升系統效率。
這些動態系統的行為是由多物理場復雜的交互作用決定的,因此系統行為和系統響應建模通常需要復雜的第一原理支撐,模擬時也需要大量的計算(例如有限元模型)。
這也是本文的出發點,提供數據驅動(主要介紹深度學習和系統辨識)的模型降階(Reced Order Modeling)提速的方法,通過數據得到具有一定保真度的數據模型,在捕捉到系統動態特性的同時也提升模擬速度。
本文中將涉及多個 demo,數據以及腳本文件,若您感興趣進一步獲取這些鏈接,可以在文末填寫反饋問卷,獲取這些鏈接。
動態系統
動態系統包含狀態空間 S, 時間集 T 和一個映射(規則)來描述狀態隨時間的演變規則 R:S×T→S。例如給定一個時刻 t 的狀態 st ,通過這個規則可以計算後面一個或幾個時刻狀態 st+1=R(st),st+2=R(R(st)) 等等。動態系統通常可以用隨時間變化的方程或方程組來描述。尤其對於連續時間系統,可以通過微分方程來表示。
我們先看一個簡單的常微分系統(ODE), [鏈接1]
其中 y(t) 是系統狀態。例如:一個簡單二自由度線性系統,
其中 A 是一個 2x2 的矩陣。初始條件 x0 = [2; 0], 可以通過求解 ODE 方程得到的相應的二維輸出 x(t),包含兩個狀態,時序和動態圖如下:
圖表 1 系統輸出x(t):
x0 = [2; 0];
A = [-0.1 -1; 1 -0.1];
trueModel = @(t,y) A*y; % 定義系統函數,此處就是一個狀態空間方程
numTimeSteps = 2000;
T = 15;
odeOptions = odeset(RelTol=1.e-7);
t = linspace(0, T, numTimeSteps);
[~, xTrain] = ode45(trueModel, t, x0, odeOptions);
後面(在介紹 Neural ODE 部分)我們會嘗試利用這個系統的數據 xTrain 進行深度學習模型的訓練來得到這個系統的數據代理模型(Surrogate Model),這種思路也可以同樣用於復雜系統。
既然數據驅動,有很多機器學習和深度學習演算法可以用,那動態系統建模有什麼特殊性呢,不是都適用嗎?
目前工程中已經用到很多穩態(靜態)模型。例如在發動機排放標定,通過 DoE 試驗時我們會將發動機維持在不同的穩態工況(轉速恆定,扭矩恆定等等),通過試驗數據建模得到用於標定的穩態數據模型[鏈接2]。
穩態工況下,對於方程(1)這樣一個簡單系統,其中 y(t)' 可以看作 0,到達平衡點,於是 y(t) 和 u(t) 關系恆定,不再在時間維度上與歷史狀態 y(t-1),y(t-2) 等等有關,因此穩態模型針對穩態工況是非常準的。
而在瞬態工況下通常 y(t)' 非零,因此方程(1)在求解系統輸出 y(t) 時不僅由當前時刻的輸入 u(t) 決定,還取決於 y(t-1),y(t-2),u(t-1), u(t-2) 等等,這就是動態系統的特殊性,當前輸出不僅依賴於當前的輸入,還依賴於系統過去的行為(歷史輸入和歷史輸出)。我們在下一篇關於系統辨識的文章中會基於示例詳細說明這一點。
不考慮動態系統,單純從系統建模來說,通常有如下的兩個方向:基於第一原理的和基於數據驅動的。
第一原理建模是領域工程師都比較熟悉的,例如可以使用 M 腳本語言,Simulink 或 Simscape 建模語言從物理原理進行系統模型的創建。
那什麼情況下搭建系統會考慮使用或部分使用數據代理模型(Surrogate Model)?
物理系統原理比較復雜或者不夠清晰,無法構建第一原理模型
數據獲取相對簡單
第一原理物理模型過於復雜,求解耗時,在控制開發時有時效要求,需要加速模擬計算
可以看到右半部分主要是基於數據驅動的建模手段,其中針對動態系統的建模主要是系統辨識和神經網路/深度學習。也是本系列兩個方向。
本文介紹神經網路的幾種用於動態系統建模的模型,下一篇文章會介紹系統辨識的幾種模型。
前饋神經網路(Feedforward Neural Network)
前神經網路大家都不陌生,各神經元分層排列。如圖2
圖2 簡單前饋神經網路示意圖
每層神經元只接受上層輸出,結果只傳給下一層,沒有反饋。稍微復雜點的如圖3。
圖3 squeeze net MATLAB 示例
前饋神經網路是相對於循環神經網路(Recurrent Neural Network)而言,後者具有反饋,後面我們也會介紹。
那麼問題來了,前饋神經網路因為沒有反饋,如何表達動態系統(Dynamic System)的時間狀態依賴呢?
通常主要手段使用不同尺度的滑動窗口來構建衍生特徵從而表徵系統在時間上的動態。
電池 SoC 預測示例
我們以電池管理系統為例,通過使用深度學習來估計電池的荷電狀態 SoC(State of Charge)。
本示例主要介紹 SoC 數據驅動的建模方法,在即使不清楚電池電化學模型以及物理非線性特性的情況下,依然可以進行 SoC 估計。我們可以通過實驗室中收集到的實測數據進行一個前饋神經網路代理模型訓練實現 SoC 估計[1]。
腳本和數據[鏈接3]
圖表4 數據集預覽和模型的5個輸入1個輸出
數據准備
我們利用實測數據通過預處理得到訓練數據集 cdsTrain,我們看其中一條數據記錄:
preview(cdsTrain)
ans = 1×2 cell array
{5×669956 double} {1×669956 double}
數據包含五個特徵,分別是電壓 V、電流 I、溫度 T、滑動平均電壓 V_avg、滑動平均電流 I _avg,其中後面兩個衍生特徵用於表徵動態信息。
搭建模型
接下來我們構建神經網路模型,結構比較簡單,三層全連接網路,一個輸出的 Feedforward Neural Network模型。
layers =[sequenceInputLayer(numFeatures,"Normalization","zerocenter")
fullyConnectedLayer(numHiddenUnits)
tanhLayer % HyperbolicTangent
fullyConnectedLayer(numHiddenUnits)
leakyReluLayer(0.3) % 激活函數
fullyConnectedLayer(numResponses)
clippedReluLayer(1) % 激活函數
regressionLayer];
設置訓練選項並訓練
options =trainingOptions('adam', ... % Adam optimizer
'MaxEpochs',Epochs,...
'ExecutionEnvironment','cpu',...%可以選擇GPU
'InitialLearnRate',InitialLearnRate, ...
'LearnRateSchele','piecewise', ...
'LearnRateDropPeriod',LearnRateDropPeriod,...
'LearnRateDropFactor',LearnRateDropFactor,...
'ValidationData', {X,Y}, ...
'ValidationFrequency',validationFrequency,...
'MiniBatchSize',miniBatchSize, ...
'CheckpointPath', NET_Path);
圖表 5 訓練過程 Loss 變化
導入測試數據驗證模型在測試集上的准確度
圖表 6 深度學習模型的預測值與實測值比較
模擬測試以及代碼生成
Simulink 中的深度學習推斷模塊[鏈接8]支持將我們訓練好的模型作為 block 參數, 一起作為被控對象集成到整個電池管理系統中。
圖表 7 電池管理系統和電池的系統模型
圖中所示的 BMS 的 Simulink 模型可以監控電池狀態,確保運行安全,還有一個電池模型用於模擬電池的動態和負荷。上面訓練的深度學習 SoC 預測器和其他電池平衡邏輯 Block 一樣嵌入在 BMS 中可以閉環模擬,以及後面做代碼生成與硬體在環。
圖表 8 Simulink 中原生的用於深度學習推斷的 Block 和 BMS 中的閉環測試 SoC 預測效果
圖表 9 deep learning 模塊的 C 代碼生成
上面這個示例我們利用衍生特徵(通過時間滑窗構建時域依賴的特徵,也可以通過不同長度的滑窗構建多尺度的時域特徵),將前饋神經網路用於動態系統的建模。
Temporal convolutional network (TCN)
TCN 的主要構成是一個擴展因果卷積層。任何一個時刻的計算輸出都是基於多個歷史時刻的輸入。
它用於構建動態系統的邏輯和前面介紹的衍生特徵是類似的,都是考慮了歷史的多個時間步的輸入,因此也可以用於建模動態系統。
TCN 從之前的時間步構建依賴,通常需要將多個卷積層疊加在一起。為了獲得更長期的依賴關系,卷積層的膨脹因子呈指數級增加,如下圖所示。
假設第 k 個卷積層的膨脹因子為2⁽ᵏ⁻¹⁾ ,步長為 1,則該網路的考慮到的依賴的時間窗的大小可計算為 R=(f-1)(2ᵏ-1)+1,其中 f 為過濾器大小,K 為卷積層數。圖中對應的 f=2,K=4, 於是 R=16, 也就是當前時刻輸出可以考慮到前面 16 個時刻步長輸入。
與循環網路(RNN)相比,TCN 的缺點之一是它在推理期間佔用更大的內存。計算下一個時間步需要整個原始序列。下圖是一個經典的 TCN 模型結構(結合殘差網路):[鏈接4]
for i = 1:numBlocks
dilationFactor = 2^(i-1);
layers = [
convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal",Name="conv1_"+i)
layerNormalizationLayer
spatialDropoutLayer(dropoutFactor)
convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal")
layerNormalizationLayer
reluLayer
spatialDropoutLayer(dropoutFactor)
additionLayer(2,Name="add_"+i)];
% Add and connect layers.
lgraph =addLayers(lgraph,layers);
lgraph =connectLayers(lgraph,outputName,"conv1_"+i);
一般的 TCN 架構(如[1]中所述)由多個殘差塊組成,每個殘差塊包含兩組具有相同擴張因子的擴張因果卷積層,然後是歸一化層、ReLU 激活層和空間 dropout 層。
網路將每個塊的輸入加到該塊的輸出上(當輸入和輸出之間的通道數量不匹配時,對輸入進行 1 × 1 的卷積),並應用最終的激活函數。
循環神經網路: LSTM/Gru
循環網路的結構與前饋神經網路不同,它帶有一個指向自身的環,用來表示它可以傳遞當前時刻處理的信息給下一時刻使用,我們選取 LSTM 來介紹,結構如下,
LSTM 之所以可以用於動態系統建模,是因為 LSTM 和動態系統有類似的特性:對於時刻 t, LSTM 使用當前網路的狀態 (ht-1,ct-1) 和當前的輸入 xt來計算網路輸出 ht,同時更新當前網路的狀態 (ht,ct),ht 也叫輸出狀態,就是當前時刻 t 的 LSTM 網路的輸出,ct 稱為 cell state,包含學習來的歷史時刻的狀態信息。每個時間步 LSTM 都會對 ct進行更新:添加信息或移除信息,主要通過四個門函數(f,g,i,o)來實現,將前面的計算過程示意性的描述一下:
其中,上面方程中的 Wf,g,i,o, Rf,g,i,o, bf,g,i,o是這些門函數各自的可學習參數,主要包括針對輸入 xt 的權重,針對上一時刻輸出狀態(同時也是當前時刻的輸入)ht-1 的權重,以及偏置,這些可學習參數本身是無狀態的,被所有時刻共享。訓練的過程就是優化這些學習參數的過程。
總結一下:當前時刻的輸出 ht不僅依賴於當前的輸入xt,還依賴於當前的狀態 (ht-1,ct-1)。它可以根據訓練選擇性的記住每一時刻的「重要」信息,並且利用這個信息作為狀態,結合當前輸入 xt 進行輸出狀態 ht預測。
電機溫度預測示例
接下來我們使用數據結合 LSTM 模型來搭建永磁同步電機(PMSM)的一個代理模型(Surrogate Modeling),用於電機不同位置的溫度預測。
類似 Demo [鏈接5]
理解數據集
數據集來自多片時長不同的數據。從數據中可以看到 PMSM 不同位置溫度與電氣系統和熱系統對應的工況參數的相互影響。
同時環境溫度的變化也會對電機不同位置溫度以及相應需求扭矩所需的電流電壓有影響。
我們使用環境溫度、冷卻液溫度、電壓、電流作為輸入,輸出為不同位置 PMSM 的溫度。
數據預處理與特徵工程
同樣作為一個動態系統,我們通過對初始數據再進行不同尺度滑窗實現衍生特徵生成,所有特徵結合在一起作為 LSTM 的輸入(盡管 LSTM 本身也具有考慮時間依賴關系的特性)。
% create derived features using raw voltages and currents derivedinputs =computedrivedfeatures(tt_data); % check the noise in the data tt_data=[tt_data derivedinputs]; Vnames=tt_data.Properties.VariableNames; s1=620;s2=2915;s3=4487;s4=8825; % preprocess exponentially weighted moving average [t_s1,t_s2,t_s3,t_s4]=preprocmovavg(tt_data,s1,s2,s3,s4,Vnames); % preprocess exponentially weighted moving variance [t_v1,t_v2,t_v3,t_v4]=preprocmovvar(tt_data,s1,s2,s3,s4,Vnames); % attach features to the original table predictors=[tt_data,t_s1,t_s2,t_s3,t_s4,t_v1,t_v2,t_v3,t_v4,tt_profileid]; responses=[tt(:,9:12) tt_profileid]; VResponsenames=responses.Properties.VariableNames;
准備訓練數據和驗證數據
holdOuts =[657258]; % define profiles that are withheld from training. [xtrain,ytrain]= prepareDataTrain(predictors,responses,holdOuts);
我們將使用第 58 條記錄作為驗證集,其中包括 4.64 小時的數據。
validationdata =58; [xvalidation, yvalidation]= prepareDataValidation(predictors,responses,validationdata); numResponses = size(ytrain{1},1); featureDimension = size(xtrain{1},1); numHiddenUnits=125;
上面的 DAG 網路可以對許多復雜的系統進行建模。通過上面的結構(左右兩支)幫助我們對依賴於時間歷史的物理行為動態行為以及含狀態的行為進行建模。
查看預測結果
如圖所示,紅色和藍色分別代表了實測數據和模型預測結果,右側圖像顯示的是他們的殘差,可以看到大部分誤差在 1% 以內,預測效果比較理想。模型在瞬態變化較快和較慢的工況下都能和實測數據保持一致,說明模型也保持了一定的保真度。
將模型導出 Simulink
我們將訓練好的模型保存為 .mat 文件,並將其導入 Simulink Deep Neural Network Predict 模塊[鏈接9],這樣我們就有了一個只有 50Kbyte 大小可以預測溫度的代理模型(Surrogate Model)用於模擬。
Neural Ordinary Differential Equations:神經網路 ODE
這是 NIPS 2018 年最佳論文[2]提出的一種新的網路層。當然這個要理論上介紹還是比較復雜,我們可以通過應用場景直觀的解釋一些 Neural ODE 如何實現動態系統建模。
試想我們有一個動態系統,因為系統動力學過於復雜,我們沒有真正的物理模型,但我們可以不斷地通過測量得到系統的初始狀態 y(t0),動態輸 入 u(t0), u(t1),…, 與動態輸出 y(t1),y(t2),…,y(tn)。接下來我們想是否可以實現這樣一個微分方程:
使得這個微分方程正好代表了我們的系統,也就是說在系統輸入 y(t0) 的初始條件下通過求解(例如使用 ode45)這個微分方程得出的解 yp(t) 和我們實測結果是吻合的。但如何基於已有的數據 y(t0),序列 u(t) 和序列 y(t) 得到 f 呢?如果我們將 f 用一個神經網路 F(θ) 替代,即
我們現在有數據 u(t), y(t)。我們不斷地利用數據訓練參數θ,使得上述方程的解 yp(t1), yp(t2),...,yp(tn) 與實測 y(t)是吻合的,那就可以得到這個動態系統的微分方程模型了,從而可以用於後續系統模擬與預測。如何理解 yp(t) 與實測 y(t) 的接近度,也就是損失函數? 我們簡單介紹一下訓練時 Loss 函數計算。對於方程,我們在知道系統初始狀態 y(t0),可以通過很多數值積分求解器(例如常用的 ode45)得到任何時刻的推斷輸出 yp(t) (當然前提是系統的輸入 u(t)也是已知).
θ 是神經網路 F 的靜態參數。對於所有時刻都是不變的。我們就可以方便得到損失函數的值
其中 L 可以是任何自定義的損失函數。於是我們可以進行參數 θ 的訓練。當然關於梯度計算與反向傳播會有相對復雜的數學推導,論文提出了伴隨方法(Adjoint Method)來實現這一過程,此處不做詳細論述。
對應於上述過程,MATLAB中提供了dlode45 [鏈接10],用於建模方程右側非線性函數F的同時,計算 ODE 的時序解。
即 dlode45 接收一個含參神經網路 F(θ)、需要計算輸出結果的時刻序列 [t0, t1,…,tN]、系統的 t0 時刻的初始狀態 yt0、神經網路參數的一組值,就可以計算出時刻 [t1,…,tN] 所對應的輸出狀態。
使用 Neural ODE 為系統建模示例
我們通過一個示例介紹如何使用Neural ODE為動態系統建模。[鏈接6]
我們就借用文章剛開始的簡單二自由度線性系統,x' (t)=Ax(t), 其中A是一個 2x2 的矩陣。我們用這個已知的系統產生一些數據,利用這些數據來訓練一個 Neural ODE 的方程,使得這個基於數據訓練好的系統(Neural ODE 方程)能夠接近已知的這個動態系統。
生成物理系統的數據 xTrain 作為真值
x0 = [2; 0];
A = [-0.1 -1; 1-0.1];
trueModel = @(t,y)A*y;
[~, xTrain] =ode45(trueModel, t, x0, odeOptions);
xTrain 兩個自由度的可視化
定義和初始化神經網路 F(t,x(t),θ) 的參數 θ
neuralOdeParameters.fc1= struct;
sz = [hiddenSizestateSize];
neuralOdeParameters.fc1.Weights= initializeGlorot(sz, hiddenSize, stateSize);
neuralOdeParameters.fc1.Bias = initializeZeros([hiddenSize 1]);
neuralOdeParameters.fc1
ans = 包含以下欄位的 struct:
Weights: [20×2 dlarray]
Bias: [20×1 dlarray]
同樣
neuralOdeParameters.fc2
ans = 包含以下欄位的 struct:
Weights: [2×20 dlarray]
Bias: [2×1 dlarray]
定義神經網路模型 F(t,x(t),θ) 函數
function y = odeModel(~,y,theta)
y =tanh(theta.fc1.Weights*y + theta.fc1.Bias);
y =theta.fc2.Weights*y + theta.fc2.Bias;
end
結合定義好的 F(t,x(t),θ) 作為 dlode45 的輸入來構建代理模型函數
function X =model(tspan,X0,neuralOdeParameters)
X = dlode45(@odeModel,tspan,X0,neuralOdeParameters,DataFormat="CB");
end
定義模型梯度函數
主要用於訓練過程計算損失以及對應待訓練參數的梯度
function [gradients,loss] =modelGradients(tspan,dlX0,neuralOdeParameters,targets)
% Compute predictions.
dlX = model(tspan,dlX0,neuralOdeParameters);
% Compute L1 loss.
loss =l1loss(dlX,targets,NormalizationFactor="all-elements",DataFormat="CBT");
% Compute gradients.
gradients =dlgradient(loss,neuralOdeParameters);
end
訓練模型
不斷地迭代訓練,創建 miniBatch,並進行損失函數計算和自動微分,通過調用 adam 求解器進行參數學習
for iter=1:numIter
% Create batch
[dlx0, targets] = createMiniBatch(numTrainingTimesteps,neuralOdeTimesteps, miniBatchSize, xTrain);
% Evaluatenetwork and compute gradients
[grads,loss] = dlfeval(@modelGradients,timesteps,dlx0,neuralOdeParameters,targets);
% Update network
[neuralOdeParameters,averageGrad,averageSqGrad] =adamupdate(neuralOdeParameters,grads,averageGrad,averageSqGrad,iter,...
learnRate,gradDecay,sqGradDecay);
% Plot loss
currentLoss =double(extractdata(loss));
測試模型
選取新的初始條件作為訓練好的模型的輸入,來進行和物理系統輸出的對比
x0Pred1 =sqrt([2;2]);
x0Pred2 =[-1;-1.5];
x0Pred3 = [0;2];
x0Pred4 = [-2;0];
可以看到模型對於新的初始條件依然表現優異。因此神經網路 ODE 在構建動態系統上很有潛力,目前在發動機建模上也有一些示例應用。
NARX(nonlinear autoregressive network with exogenous inputs)反饋神經網路
在深度學習網路爆發之前,在淺層神經網路的場景中,NARX 反饋神經網路是經常用於動態系統建模的,它具有反饋連接,即輸出 y(t) 依賴於系統之前時刻的輸出 y(t-1),y(t-2) 等等和輸入。
其中網路 F 主要是通過一個前饋神經網路實現。
如下圖,其中F即為第一層隱含層前饋網路,其中輸入和輸出可以是多維的。
跟其他反饋神經網路類似(前面介紹的 LSTM),它的訓練過程與推斷過程有些區別。網路本身的輸出需要被反饋到前饋神經網路的輸入。在訓練時,因為我們能夠拿到整段輸出真實的數據,因此,我們會用當前時刻真實的輸出值作為訓練時模型輸入而不是反饋預測的輸出,換句話說,在訓練時我們會把網路作為開環去訓練。
這有兩個好處。一是前饋網路的輸入更准確。第二,生成的網路具有純前饋架構,靜態反向傳播變得可用。當我們進行未來多步推斷時,因為這種情況我們只能用推斷的數據進行下一時刻預測,所以這次我們才把網路閉環,用於推斷。
磁懸浮系統的 NARX 建模示例
接下來我們使用 narx 神經網路來對動態系統進行建模的示例[鏈接7]。示例系統是一個磁懸浮系統。目標是控制懸浮在電磁鐵上方的磁鐵的位置,在電磁鐵的位置上,磁鐵受到限制,只能在垂直方向上移動,如下圖所示,
系統的運動方程為:
其中 y(t) 是磁鐵在電磁鐵上方的距離,i(t) 是經過電磁鐵的電流,M 是磁鐵的質量,g 是重力常數。其中 β 為粘性摩擦系數,由磁體運動材料決定;α 為場強常數,由電磁鐵上導線匝數和磁體強度決定。我們搜集了系統輸入 u(t)-施加在電磁鐵上的電壓和系統輸出 y(t)-永磁體的位置,對應兩個時間序列。
搭建網路和准備數據
d1 = [1:2];
d2 = [1:2];
narx_net =narxnet(d1,d2,10); % 使用narxnet功能創建NARX開環串聯網路,10個隱藏層神經元
[p,Pi,Ai,t] =preparets(narx_net,u,{},y); % 用preparets准備數據
其中 y(t) 是一個反饋信號,既是輸入,也是輸出,訓練時我們既可以拿到當前時刻數據,也可以拿到後面時刻的數據,所以可以用於開環訓練,當推斷時我們會將輸出接到輸入作為閉環進行推斷。
訓練網路
narx_net =train(narx_net,p,t,Pi); % 訓練網路得到訓練好的網路
驗證開環網路推斷效果
yp =sim(narx_net,p,Pi);
e =cell2mat(yp)-cell2mat(t);
可以看到誤差很小。因為我們用的開環訓練,所以推斷結果是用前面時刻的真實輸出數據(而非推斷輸出反饋),所以這里的誤差是 one-step-ahead 推斷誤差。
測試閉環推斷效果
如果要看網路真實准確度的表現,需要將開環的輸出作為反饋接到輸入,然後進行多步預測。
narx_net_closed =closeloop(narx_net);
現在可以使用閉環執行 900 個時間步的迭代預測。在這個閉環網路中只需要兩個初始輸入和兩個初始輸出作為初始條件。
y1 = y(1700:2600);
u1 = u(1700:2600);
[p1,Pi1,Ai1,t1] = preparets(narx_net_closed,u1,{},y1);
yp1 =narx_net_closed(p1,Pi1,Ai1);
從閉環預測的結果看,藍線是磁鐵的實際位置,紅線是 NARX 神經網路預測的位置。即使網路預測的時間步預測了 900 步,預測依然是非常准確的。閉環多步預測准確的前提就是開環下單步推斷誤差要小。
總結
本文主要介紹了動態系統的特性和用於動態系統建模的神經網路模型從而可以實現模型降階(Reced Order Modeling),包括前饋神經網路,TCN,循環神經網路,神經網路 ODE, NARX 網路和相應的一些手段,並結合示例與場景進行了說明這些手段的有效性。
在後續文章我會來介紹系統辨識(System Identification)的一些示例,歡迎繼續關注。
本文中涉及到的多個 demo,數據以及腳本文件,若您感興趣,可以通過掃描填寫下面這個反饋問卷,或點擊」閱讀原文「進一步獲取這些鏈接。
獲取文中示例鏈接
參考文獻
[1] Vidal, C., Kollmeyer, P., Naguib, M., Malysz, P. et al., 「Robust xEV Battery State-of-Charge Estimator Design Using a Feedforward Deep Neural Network,」 SAE Technical Paper 2020-01-1181, 2020, doi:10.4271/2020-01-1181.
[2] Ricky T. Q. Chen*, Yulia Rubanova*, Jesse Bettencourt*, David Duvenaud University of Toronto, Vector Institute 「Neural Ordinary Differential Equations」
編輯:謝雅潔 校對 :向映姣
③ 降階模型的介紹
降階模型是指對於用狀態空間方法表達的模型,採用模型集結的方法降低狀態空間模型的階數,所獲得的低階模型,或對於用微分方程、差分方程或時間序列分析等方法建立的模型,忽略其高階項而獲得的低階模型。
④ Krylov子空間迭代法二十世界比較經典的演算法,但是還是不了解
摘要:演算法比較研究,比較幾種主要模型降階方法的優缺點,為給工程應用提供方法參考。利用奇異值分解的模型降階方法具有較好的理論性質,能夠保持降階系統結構特性,但計算成本較高故不適合大規模動態系統的降階;採用矩匹配的模型降階方法計算簡便,適合大規模系統降階,但無法保證降階系統穩定性,也很難求得降階誤差界。最小二乘降階法同時利用了系統的Gramian矩陣和Krylov子空間理論,結合了二者的優點,使得降階過程計算簡化,保持了降階系統的結構特性,而且降階誤差進一步減小。模擬算例證明了最小二乘法較前兩者具有優越性。
⑤ 查曉明的科研課題
主要項目如下:
1.國家自然科學基金面上項目(批准號:51177113):基於微分幾何同調的微電網等值建模理論與模型降階方法
2. 國家自然科學基金面上項目(批准號:51277137):微電網逆變器交互作用分析及建模方法研究
3. 國家自然科學基金青年項目(批准號:51107091):一種基於部分單元能量回饋的級聯多電平逆變器研究
4. 國家自然科學基金青年項目(批准號:51207115):基於脈沖微分動力系統理論的風電功率預測的極大誤差評估方法研究
5. 國家自然科學基金青年項目(批准號:51307126):一種新型級聯多電平變換器的高壓大功率電機准矢量控制方法研究
6. 高等學校博士學科點專項科研基金(課題編號:20120141110074):基於多自由度超越攝動的統一介面微電網復雜系統建模理論與等效方法
7. 國防973項目課題1項
8. 湖北省自然科學基金一般項目(批准號:2011CDB263):基於部分單元能量回饋的級聯多電平變換器研究
9. 2012年湖北省科技攻關計劃項目:220V直流微電網多樣性配電平台產業化研究
主要參與的項目如下:
1. 國家自然科學基金重大項目課題(批准號:51190102):大規模風電場多時空尺度聚合建模理論和方法
2. 科技部973項目課題1項(批准號:2012CB215101):大規模高集中度風電場出力多時空尺度爬坡特徵分析、預測與控制
其他還主持承擔了863重大項目子題,湖北省科技攻關項目,武漢市科技攻關項目,國家電力公司青年科技促進費項目,武漢市青年晨光計劃項目,以及各級電網公司、電力科學研究院和電力電子產品生產製造公司多項委託項目。在國內外重要會議和期刊上發表教學和科研論文70多篇,其中SCI收錄6篇,EI收錄30餘篇;獲發明專利14項、實用新型專利11項。在編《電能質量控制技術》專著一部。 1、期刊文章
1) 查曉明、孫建軍、陳允平,並聯型有源電力濾波器的重復學習Boost變換控制策略,電工技術學報,2005年
2)查曉明、陳允平,無源與有源結合電力濾波器抑制諧波振盪的重復學習Boost變換控制,電工技術學報,2004.6
3) 孫建軍、查曉明、丁凱、餘利生,一種低耐壓中性線諧波治理電路原理及實現,電力系統自動化,18期,2003年,pp34-37
4) 鄧恆、殷波、查曉明、陳允平,一種改進的PWM方法在APF中的應用,電力系統自動化,14期,2002年,pp51-54
5) 黃敏、查曉明、陳允平,並聯型電能質量調節器的模糊變結構控制,電網技術,26卷7期,2002年,pp11-14;
6) 查曉明、陳衛勇、陳允平,三相交流系統綜合補償的補償分量檢測研究,電網技術,23卷7期,1999年,pp24-26
7) 查曉明、陳一堯、周巍,LMS自適應信號處理在快速多頻率阻抗測量中的應用,儀器儀表學報,19卷2期,1998年,pp211-214
8) 殷波、鄧恆、陳允平、查曉明,a-b坐標系下瞬時無功功率理論與傳統功率理論的統一數學描述及物理意義,電工技術學報,2003.5
9) 查曉明、王瑾,基於PWM控制的並聯型有源電力濾波器的MATLAB模擬研究, 電力系統及其自動化學報, 2001年
10)查曉明、王瑾,串聯有源濾波器拓撲結構的MATLAB模擬,電力系統及其自動化學報,2001年
11)殷波、查曉明,綜合電能質量控制器,電網技術,2002
12)殷波、查曉明,一種新的降低三相有源濾波器開關損耗的方法,電力電子技術,2002
13)孫建軍、查曉明,基於雙DSP結構的有源濾波器檢測及控制系統,武漢大學學報,2001
14)湛秀平、查曉明,基於AT89C2051的步進電動機驅動電路,電氣傳動自動化,2001
2、會議論文
1)查曉明、陳允平, An integrated learning control method for PWM-VSI based hybrid filter to dampen harmonic resonance in instrial power system, Proceedings of IEEE Annual Conference on Instrial Electronics (IECON』04), 2004
2) 查曉明、孫建軍、陳允平,2003年,Application of iterative learning control to active power filter and its robustness design, Proceedings of IEEE power electronics specialist conference (PESC』03), pp785-790;
3)查曉明、陶騫、孫建軍、陳允平,2002年,Development of iterative learning control strategy for active power filter, Proceedings of IEEE Canadian conference on electrical & computer engineering (CCECE』02), pp245-250;
4) 查曉明、劉開培、陶桂洪,2002年,An active AC bridge with adaptive current orthogonal decomposition for precision measurement of dielectric loss angle, Proceedings of IEEE conference on precision electromagnetic measurement (CPEM』02), pp182-183;
5) 陳允平、查曉明、王瑾、孫建軍、湯洪海、劉會金,2000年,Unified power quality conditioner (UPQC): the theory, modeling and application, Proceedings of power system technology (PowerCon 2000), pp1329-1333;
6) 查曉明、陳允平, The iterative learning control strategy for hybrid filter to dampen harmonics resonance in instrial power system, Proceedings of IEEE International Symposium on Instrial Electronics (ISIE』03);
7) 陳允平、查曉明、趙磊The Measurement of Impulse Grounding Resistance and Inctance of Grounding Network, PP352-355(VOL.1), Proceeding of Energy Management and Power Delivery (EMPD』98), Singapore, Mar. 1998
⑥ 怎樣驗證模擬模型的可靠性
三套方法來驗證。
第一種,用不同的軟體(例如分別用ansys和abaqus)計算同一個問題,模擬得到的結果非常近似(不太可能保證完全一樣)。這樣就是讓人信服的。
第二種,先證明你的方法是正確的,比如用你的方法去做一個別人已經做過的結果(例如已發布的文獻中提到的模型和結果,你的模型和他近似,過程自己來操作,得到的結果和他一致,這樣就可以說明你的方法是可信的)。然後就用這個證明過的操作方法,去完成需要完成的項目,得出的結果也較為可信。
第三種,試驗模型驗證。做一個實際比例模型,約束和載入與數值模擬的完全一致,然後比較試驗結果和數值結果,曲線走向和趨勢基本一致,數量級一致等等等等,就是可信的。
三種方法比較。
第三種最好,但難以實現,一般在研究所里有條件才採用,耗時耗力;第二種其次,最為簡單,並且與權威雜志的結果有個比較,比較有說服力;第三種也可以,但一般是分別分給兩個人用不同軟體計算,或者兩個人在沒有交流的情況下用同一軟體計算,這樣的結果才具有一定可信性,在正式項目中一般不會採用,或在團隊中具有較高資質的模擬工程師的情況下採用,畢業生或實習生的結果是不可信的。
⑦ POD流場降階的意義在於什麼
加速流場計算。CFD這塊,計算量龐大是大家公認的,無論是用RANS計算整個飛機,還是用DNS計算湍流,計算耗時都不可忽略。發展降階模型,一個重要的原因是,我們可以通過計算CFD的少數狀態,就能夠用降階這種數據處理手段,把其他狀態的流場特徵外推或者內插出,而且這個過程的耗時相比CFD重新計算而言,絕對是可以忽略的。尤其是氣動彈性問題,相信做過的都有體會,在沒有先驗知識的前提下,要准確捕捉顫振邊界,基本都是需要不斷試錯(試動壓),觀察響應情況。要注意氣動彈性模擬是需要非定常CFD求解器和CSD(計算結構力學)相互迭代的,所以這個計算量必然大於單獨的CFD求解。有了降階模型之後,我們只需要CFD模擬一段樣本,之後的CFD和CSD迭代過程,可以轉化為ROM和CSD求解器迭代(對於線性結構,可以直接根據耦合的線性系統特徵值得到穩定性),這個效率提高確實很可觀。另外,隨著流場模擬的需求增加,這個效率的提高會越來越明顯。在別的領域有叫PCA的,有叫KL變換的,其實是一個東西。個人感覺這種pod類的模態分解方法,其本質是提供一組低維的坐標系,在這組新的坐標系下,我們可以更加簡潔的表達流場。至於說用cfd幾個參數的,我想要實現上面的兩個意義都是不大可能的吧。總結一點,降階模型的核心其實是抓主要矛盾,主要矛盾抓好了,既能代替原來的復雜,高階系統,實現模擬,預測,控制等功能,還能幫助我們了解物理問題的主要特徵,因此還是很有價值的。最近機器學習的火也燒進了這一領域,憑借大數據處理能力,來優化流場控制過程。大導磨刀霍霍,我等只能慷慨赴之。這一領域,大牛太多,山頭林立,我這樣的雜魚出頭之日遙遙無期吶。
⑧ 高階系統降階的兩個主要方法
高階系統降階的兩個主要方法:用主導極點的方法。
主導極點就是離虛軸最近的一個或者一組極點,而且其餘極點距離虛軸的距離遠大於這組極點(大一個數量級)。另外主導極點不可以離零點太近。選取出主導極點後,就可以用這組極點近似分析系統,其餘極點的影響可以忽略,相當於把系統降階。
在靜態條件
變數各階導數為零——下描述變數之間關系的代數方程叫靜態數學模型;描述變數各階導數之間的關系的微分方程叫動態數學模型,這些方程就是運動方程。運動方程的階次是指運動方程中出現的最高階導數的階次,如N階運動方程就是指方程中出現的最高階導數是N階的。
⑨ 有人用機器學習的方法解決流體力學問題嗎
可以做,但有幾個困難:
1,如果訓練樣本是RANS的結果,最終預測精度不會超過RANS。
2,如果自變數是邊界條件(包含幾何形狀),維度太高,樣本不夠
比較可行的方案:
1,不代替而是擴展CFD的能力
2,不做可以泛化的模型,縮減狀態空間維度,只做具體問題的簡單變化
可惜這個方案早有人做了,不過沒打著機器學習的招牌,而是叫surrogate-based optimization。一般是在設計方案基礎上解放幾個參數的自由度,采一些樣本(CFD或者實驗),做一下回歸模型,然後在參數空間里找最優,還是挺有趣的方向。
那機器學習研究湍流這樣的美好想法,首先是要建立在對問題理解深刻的基礎上。
⑩ 四階魔方的還原方法之一:降階法
關於四階魔方的玩法,用的較多的方法是降階法。關於降階法,簡單解釋就是把高階魔方設法降解成低階魔方的模型,再利用低階魔方的解法來完成。目前魔方界對高階魔方的解法使用降階法的較多。 復原第二層:這一步中先復原翼,再復原點。這里是變通地使用三階魔方第二層棱塊的復原公式。
2.1復原第二層的翼
公式2-1:URU』R』U』F』UF
公式2-1』:U』F』UFURU』R』
這個公式與三階的復原第二層棱塊公式完全一樣。如果目標塊不在頂層,那它一定在第三層,只要將目標塊轉到FR棱的第三層處,做公式2-1即可將其轉到頂層。
2.2 復原第二層的點
公式2-2:Ru』R』U』f』Uf
公式2-2』:Ru』R』U』f』Uf
這個公式與三階的復原第二層棱塊公式類似,不同之處是有一部分轉動了中間層。
如果目標塊不在頂層,那它一定在第三層,轉動第三層,只要將目標塊轉到F面近R面處,做公式2-2即可將目標塊轉到頂層(或轉動第三層,將目標塊放到R面近F面處,做公式2-2')。
至此,下面兩層全部完成。 復原第三、四層:這里是先用換角公式復原頂層角,之後用換棱公式復原頂層翼,再用換棱公式復原第三層翼,最後變化使用換棱公式復原剩下的點塊。
3.1復原頂層角塊位置
公式3-1:R』 L U L』 U』 R U L U』 L』
公式3-1』:L R』 U』 R UL』 U』 R』 U R
若有兩個相鄰角塊位置正確。將正確的兩個角塊放在右手,做公式3-1。
有兩個不相鄰角塊位置正確。直接做公式3-1或公式3-1』,便可以得到第2種情況
這與三階魔方第六步一致。考慮到後續公式的一致性,這里介紹一個新公式,其實這個公式完全可以替代三階換棱公式(R2 D2 R' U' R D2 R'U R')。它的變換形式可以一直用到本方法最後一步。
3.2復原頂層角塊方向
公式3-2:R』 U』 R U』 R』 U2 R
公式3-2』:R U R』 U R U2 R』
這與三階魔方第五步頂面全部翻正的小魚公式完全一樣。從三階魔方考慮,是很容易理解的。
3.3復原三、四層的翼
公式3-3:R』 LuL』u』 R uLu』L』
公式3-3』:L R』u』Ru L』 u』R』uR
這個公式與3-1極為相似只有U大寫改為小寫。
由於有十二個翼需要替換,建議先復原頂層的八個。找第三層翼含有頂面顏色(黃色)的,將黃色面放在右側或左側,做公式3-3(在左側)或3-3'(在右側)。
頂層八個翼復原後,看第三層翼,這時第三層翼已經不含頂層顏色,我們找在同一面上兩個翼是否有相同的顏色。這有三種情況:
1.四個面的翼顏色都相同,說明第三層已經翼已經完成復原;
2.找到有一對翼在同一面顏色相同,將這對翼放在R面。做(公式3-3→ yU』→公式3-3)。就得到了第1種情況。
注意:這里是把同面同色的翼放在右手,拆一個頂面翼;拆完之後,用同一公式去復原頂面翼,這樣就實現了第三層三個翼的旋轉互換。
沒有找到在同
3.4復原三、四層的點
這時只剩下幾個點要對調了,用下面兩點和三點對換公式可以很輕松完成。
公式3-6:r U l' U' r' U l U'
公式3-6':l' U' r U l U' r』 U
做該公式時注意目標塊必須放在R面和F面下半區域的對應位置。如果目標塊不在下方,轉動該面就可以了。做完公式再恢復回去即可。
三點輪換:
公式3-4:r』 L u L u' r u L u' L』
公式3-4』:l R' u』 R u l' u』 R' u R
公式3-5:r』 L d』 L d r d』 L d L』
公式3-5』:l R' d R d』 l' d R' d』 R
我的建議,如果你是初學者,能用兩點對換就不要用三點輪換;如果你已經是高手了,隨心所欲吧。