王琪凱,熊永康,陳 瑛,夏永洪,葉宗陽,余禮蘇
(南昌大學(xué)信息工程學(xué)院,南昌 330031)
非侵入式負荷監(jiān)測NILM(non-intrusive load monitoring)[1-3]又稱非侵入式負荷分解。與傳統(tǒng)負荷監(jiān)測需要在每個設(shè)備上安裝傳感器,來獲取用戶用電信息的侵入式負荷監(jiān)測ILM(intrusive load monitoring)不同,該技術(shù)只需要在用戶入口處安裝監(jiān)測裝置,采集功率、電壓、電流等匯總的總負荷信息,就能分解得到所需單個設(shè)備的用電信息。NILM技術(shù)在成本及后期維護上,相比ILM更具優(yōu)勢[4-5]。在用戶用電需求持續(xù)增長、智能電網(wǎng)[6]等技術(shù)快速發(fā)展的今天,NILM技術(shù)在兼顧用戶隱私[7-8]的同時,可以推動電網(wǎng)側(cè)和用戶側(cè)友好互動,鼓勵用戶積極參與到節(jié)能計劃中[9-10],對于實現(xiàn)“碳達峰、碳中和”目標具有重要意義。
NILM最早由Hart[11]于20世紀80年代提出,負荷特征一般可以分為暫態(tài)特征和穩(wěn)態(tài)特征[2]。其中,基于暫態(tài)特征的算法以瞬時功率變化、啟動電流波形、電壓噪聲等特征信息來判斷負荷狀態(tài)是否發(fā)生改變。文獻[12]提出一種改進的基于時頻分析的NILM方法,結(jié)合多分辨率S變換的瞬態(tài)特征提取方案和改進的0-1多維背包算法來識別設(shè)備運行情況。文獻[13]將設(shè)備狀態(tài)轉(zhuǎn)換過程中的暫態(tài)功率波形及狀態(tài)改變前后的功率變量作為負荷特征,采用動態(tài)時間規(guī)整DTW(dynamic time warping)算法將其與歷史暫態(tài)事件波形匹配并進行動態(tài)聚類,使用關(guān)聯(lián)規(guī)則分析找出屬于同一設(shè)備的暫態(tài)事件集。即便如此,基于暫態(tài)特征識別的算法存在需要獲取高頻采樣數(shù)據(jù)、對設(shè)備硬件要求高的特點。相比較而言,基于穩(wěn)態(tài)特征識別的算法所需要的低頻采樣數(shù)據(jù),智能電表一般就能提供支持[1]。根據(jù)辨識的負荷類型、用戶對識別精度的要求等情況,居民用戶可以考慮選擇低頻負荷特征[1]?;诜€(wěn)態(tài)特征的算法一般以有功、無功信號作為輸入來分解得到單個設(shè)備運行情況。文獻[14]提出一種情境自適應(yīng)和貝葉斯優(yōu)化的雙向長短期記憶BiLSTM(bidirectional long short-term memory)網(wǎng)絡(luò)模型,使用3種開源數(shù)據(jù)集,從季節(jié)、地理、設(shè)備型號等角度證明模型具有良好的適用性。文獻[15]提出一種數(shù)據(jù)擴充技術(shù),提高了訓(xùn)練數(shù)據(jù)集的質(zhì)量,使用深度卷積神經(jīng)網(wǎng)絡(luò)CNN(convolutional neural networks)模型進行分解,同時提出一種后處理技術(shù),可以有效剔除一些不合理的結(jié)果,對Ⅱ類負荷(多狀態(tài)設(shè)備)具有良好的分解性能。
上述基于穩(wěn)態(tài)特征的算法,其核心結(jié)構(gòu)都是基于深度學(xué)習(xí)網(wǎng)絡(luò)框架建立的。文獻[16]提出了一種CNN-BiLSTM算法應(yīng)用于NILM領(lǐng)域,是目前公認的利用深度學(xué)習(xí)所達到的綜合性能最優(yōu)的模型[17]。為了進一步提高模型的分解性能,本文在文獻[16]的基礎(chǔ)上,對其所述算法進行以下改進。
(1)序列到序列seq2seq(sequence-to-sequence)模型的獨特優(yōu)勢是能將1個序列問題轉(zhuǎn)換成另一個序列問題,seq2seq的基本單元仍是BiLSTM和長短期記憶LSTM(long short-term memory)。使用seq2seq結(jié)構(gòu)替代BiLSTM結(jié)構(gòu),更適合NILM的分解模式,且能有效地挖掘時序特征信息,同時在模型搭建上也更加靈活。
(2)引入注意力機制優(yōu)化整體模型,使得模型能夠更加關(guān)注重要部分的特征。
本文所用NILM流程如圖1所示,具體步驟如下。
圖1 模型流程Fig.1 Flow chart of the proposed model
步驟1對原始數(shù)據(jù)進行歸一化后,進行數(shù)據(jù)切片。該步驟有利于不割裂地處理每個時刻的信息,因為設(shè)備運行是一個連續(xù)過程,當前時刻的設(shè)備狀態(tài)一定程度上也與之前時刻的運行狀態(tài)相關(guān)。將處理后的序列數(shù)據(jù)作為輸入傳入訓(xùn)練模型中。
步驟2對歷史的設(shè)備數(shù)據(jù)進行聚類操作,生成負荷聚類-編碼表。這是因為設(shè)備實際運行過程中,由于噪聲等原因,其運行過程中會存在一定的波動,因此本文使用這些聚類結(jié)果代替設(shè)備不同狀態(tài)(模式)下的功率,從而降低分解難度和提高分解精度。
步驟3將聚類結(jié)果轉(zhuǎn)換成狀態(tài)編碼,作為輸出傳入到訓(xùn)練模型中,簡化了模型的輸出結(jié)構(gòu),有助于輸出和步驟1中的輸入形成一一映射關(guān)系。
步驟4將處理好的數(shù)據(jù)分成訓(xùn)練集和測試集,訓(xùn)練集用于訓(xùn)練模型,測試集用于檢驗?zāi)P头纸庑阅堋?/p>
步驟5所搭建的模型根據(jù)步驟1和步驟3輸入的數(shù)據(jù),不斷訓(xùn)練、迭代,找出數(shù)據(jù)之間的映射關(guān)系,調(diào)整模型內(nèi)部參數(shù)。
步驟6將當前時刻總功率序列數(shù)據(jù)(測試集)輸入訓(xùn)練好的模型中,模型就能自主地給出當前時刻每個設(shè)備對應(yīng)的狀態(tài)概率分布矩陣,并根據(jù)所得設(shè)備狀態(tài)結(jié)果與負荷聚類-編碼表進行比對,得到具體的有功功率。
電力負荷按照行業(yè)性質(zhì)主要劃分為商業(yè)負荷、工業(yè)負荷和居民負荷等[2]。這些負荷之間的特征存在明顯差異,例如工業(yè)負荷一般功率較大,受訂單、季節(jié)等因素影響;商業(yè)負荷以照明、電腦用電等為主,受工作日、節(jié)假日等時間因素影響;居民負荷種類眾多且功率范圍跨度廣,受用戶習(xí)慣影響。因此,對于不同行業(yè)、工程項目的負荷分解難度、具體分解方法和細節(jié)也有所不同。家電設(shè)備可以分為開/關(guān)二狀態(tài)型、有限多狀態(tài)型、連續(xù)變狀態(tài)型和永久運行型4類[2]。居民負荷多為前2種,其工作示意如圖2所示。
圖2 開/關(guān)二狀態(tài)及有限多狀態(tài)負荷Fig.2 On/off two-state and finite state load
本文選擇6種家電設(shè)備作為分解負荷,分別為干衣機、熱泵、冰箱、洗碗機、電視和地下室燈(數(shù)據(jù)描述詳見第5.1節(jié))。使用K-means++算法對上述設(shè)備進行聚類操作,具體步驟如下。
步驟1在當前設(shè)備N個樣本點中,隨機抽取1個點作為第1個聚類中心c1。
步驟2計算每個樣本點與當前已確定聚類中心之間的最短距離D(xi),可表示為
式中:xi為第i個樣本點;cj為第j個聚類中心;k為當前已確定的聚類中心個數(shù);‖‖為歐式距離;min()為最小值函數(shù)。
步驟3計算每個樣本點成為下一個聚類中心的概率P(xi),可表示為
步驟4重復(fù)步驟2和步驟3,直至選出的初始聚類中心個數(shù)達到該設(shè)備的狀態(tài)個數(shù)。
步驟5計算每個樣本點與所選聚類中心的距離,將其劃分給距離最近的聚類中心,并標記所屬簇的標簽。
步驟6計算每個簇中所有樣本點坐標的平均值,以此作為該簇新的聚類中心。
步驟7重復(fù)步驟5和步驟6,直至算法收斂。
K-means++聚類所得結(jié)果如表1所示,其中狀態(tài)0~3為本文根據(jù)聚類結(jié)果定義的設(shè)備工作狀態(tài),并匹配對應(yīng)的獨熱碼。
表1 負荷聚類-編碼表Tab.1 Table of load clustering-coding
神經(jīng)網(wǎng)絡(luò)模型激活函數(shù)的有效工作范圍一般為[-1,1],因此需要對總有功功率數(shù)據(jù)進行歸一化處理,歸一化公式為
式中:x′為歸一化后的結(jié)果;x為真實值;xmax、xmin分別為有功功率的最大值和最小值。
當前時刻各設(shè)備的狀態(tài)不僅與當前時刻的總負荷信息相關(guān),還和之前時刻有關(guān),因此需要將數(shù)據(jù)切片化處理,使其成為時間序列向量,即
根據(jù)表1所得聚類結(jié)果,將原始數(shù)據(jù)中每個設(shè)備所記錄的實際有功功率轉(zhuǎn)換為對應(yīng)設(shè)備狀態(tài),然后通過獨熱碼處理以匹配本文模型。因此,NILM技術(shù)中每個設(shè)備狀態(tài)獨熱碼和時間序列數(shù)據(jù)的映射關(guān)系可表示為
CNN在自然語言處理、計算機視覺等領(lǐng)域被廣泛應(yīng)用,主要由卷積層、池化層和全連接層構(gòu)成。其中,一維卷積神經(jīng)網(wǎng)絡(luò)在時間序列數(shù)據(jù)的特征信息提取上具有良好表現(xiàn)。一維卷積的計算公式為
本文引入SENet(squeeze-and-excitationnetwork)模塊[18],這是一種優(yōu)化CNN特征通道的注意力機制。該結(jié)構(gòu)通過學(xué)習(xí)全局信息,能夠選擇性地提高重要特征通道的權(quán)重,同時抑制非顯著特征,從而達到提高CNN性能的目的,其結(jié)構(gòu)如圖3所示。本文將式(4)所得到的總有功功率時間序列向量,通過2層卷積層得到B×C×W的特征矩陣U,其中B為模型的批處理個數(shù),C為特征通道數(shù),W為特征長度。
SENet模塊的優(yōu)化過程分為壓縮和激發(fā)兩步,如圖3所示。壓縮操作使用全局平均池化將負荷的全局信息壓縮,計算公式為
圖3 SENet模塊Fig.3 SENet block
式中:zc為通道c的壓縮值;ui為通道c上第i個特征值。
激發(fā)操作利用兩層全連接層FC(fully connected layers)捕獲通道之間的依賴關(guān)系。第1層全連接層將式(7)所得壓縮信息轉(zhuǎn)換成維度;然后使用第2層全連接層將其再次變?yōu)锽×C×1。這種處理方式使得通道之間的壓縮信息能夠進行充分非線性交互,有利于捕捉依賴關(guān)系,得到通道權(quán)重系數(shù),其計算公式為
式中:s為通道權(quán)重向量;w1、w2分別為第1層、第2層全連接層的參數(shù);z為式(7)所得所有通道信息壓縮值;δ為第1層全連接層的ReLU激活函數(shù);σ為第2層全連接層的Sigmoid激活函數(shù)。
最后,通過式(9)將特征矩陣U和所得通道權(quán)重向量s相乘,得到優(yōu)化后的特征矩陣X′為
本文所用CNN分為2層:第1層卷積層的卷積核個數(shù)為16,尺寸為3,激活函數(shù)選擇ReLU函數(shù);第2層卷積層的卷積核個數(shù)為32,尺寸為3,激活函數(shù)選擇ReLU。
seq2seq模型分為編碼和解碼2個部分,常被用于處理序列到序列的任務(wù)。本文所用seq2seq網(wǎng)絡(luò)的核心思想為通過編碼-解碼結(jié)構(gòu)對CNN進行處理,得到的特征序列轉(zhuǎn)換為狀態(tài)概率分布序列?;谧⒁饬C制優(yōu)化的seq2seq結(jié)構(gòu)如圖4所示,其中seq2seq的基本單元為LSTM網(wǎng)絡(luò)。
圖4 基于注意力機制優(yōu)化的seq2seq結(jié)構(gòu)Fig.4 Structure of seq2seq optimized by Attention mechanism
編碼結(jié)構(gòu)使用BiLSTM網(wǎng)絡(luò)替換單向LSTM,因為BiLSTM網(wǎng)絡(luò)能夠更加充分地利用輸入的所有序列信息[19]。BiLSTM網(wǎng)絡(luò)當前時刻的隱藏層狀態(tài)的計算公式為
LSTM單元包含遺忘門、輸入門和輸出門。輸入門控制當前時刻的輸入值,遺忘門對上一時刻記憶單元狀態(tài)進行選擇性地遺忘,輸出門匯總兩者信息決定輸出值,從而能夠?qū)崿F(xiàn)對時間序列數(shù)據(jù)的特征提取。LSTM單元可表示為
式中:it、ft、、ot、ct和分別為輸入門、遺忘門、候選記憶單元狀態(tài)、輸出門、記憶單元狀態(tài)和當前時刻隱層狀態(tài);Wix、Wfx、Wcx和Wox為相應(yīng)門與當前時刻輸入xt的權(quán)重矩陣;Wih、Wfh、Wch和Woh為相應(yīng)門與上一時刻隱層狀態(tài)的權(quán)重矩陣;bi、bf、bc、bo為相應(yīng)門中的偏置向量;σ為激活函數(shù)Sigmoid;tanh()為雙曲正切函數(shù);⊙表示向量中元素按位相乘。
如圖4所示,本文在seq2seq模型中引入注意力機制[20]。解碼結(jié)構(gòu)在產(chǎn)生新狀態(tài)前,先讀取編碼中所有時序的隱藏層輸出向量H=[h1,h2,…,hm],其中m為隱藏層狀態(tài)個數(shù),并使用注意力機制對H分配不同比重,使得網(wǎng)絡(luò)能夠有針對性地關(guān)注有效特征信息。解碼結(jié)構(gòu)產(chǎn)生新狀態(tài)的公式為
式中:st為解碼結(jié)構(gòu)中當前時刻的隱藏層狀態(tài);st-1為上一時刻隱藏層狀態(tài);Ct為當前時刻時序向量;yt-1為上一時刻設(shè)備的狀態(tài)概率密度分布向量。
動態(tài)可變的時序向量Ct能夠儲存當前時刻模型輸入的完整有效信息,其計算過程如下。
步驟1通過2個全連接層計算注意力機制得分,其計算公式為
式中:Ve、We為相關(guān)權(quán)值矩陣;et,i為當前時刻第i個隱層狀態(tài)的注意力得分;H為編碼中所有時刻隱藏層的輸出向量;[st-1,H]表示矩陣st-1與H拼接。
步驟2對式(13)得到的et,i使用softmax函數(shù)計算各隱層狀態(tài)的權(quán)重,即
式中:m為編碼中所輸出的隱藏層狀態(tài)個數(shù);αt,i為當前時刻第i個隱層狀態(tài)所對應(yīng)的權(quán)重;et,k為根據(jù)式(13)求得第k個et,i的值。
步驟3根據(jù)式(14)求得各隱層狀態(tài)權(quán)重αt,i及其對應(yīng)隱層狀態(tài)hi,加權(quán)相加得到動態(tài)時序向量Ct,即
式中,hi為由式(10)求得的第i個ht。
解碼結(jié)構(gòu)用來得到最終的分解結(jié)果,該部分將CNN所得總有功功率時序特征序列轉(zhuǎn)換為設(shè)備狀態(tài)序列。與編碼部分不同,解碼必須使用單向LSTM網(wǎng)絡(luò),因為解碼是設(shè)備狀態(tài)生成器,需要按順序生成每個設(shè)備的狀態(tài)編碼。從圖4可以看出,解碼結(jié)構(gòu)中LSTM層的初始狀態(tài)s0源自編碼中BiLSTM層最后1個隱層狀態(tài)hm。值得注意的是,隱層狀態(tài)是由正向、反向的2個隱層狀態(tài)拼接而成,其維度與s0所需維度不匹配,因此需要經(jīng)過1個全連接層將hm壓縮后傳入解碼。
圖4中解碼接收上一時刻(上一個設(shè)備)隱層狀態(tài)st-1、當前時刻時序向量Ct和上一時刻設(shè)備的概率輸出yt-1(第1個時刻需要設(shè)置起始符),通過式(12)可以得到當前時刻的隱層狀態(tài)st。將st、Ct和yt-1拼接后,通過全連接層得到當前設(shè)備的概率密度分布yt。st、Ct和yt-1拼接可表示為
式中,f1()為全連接層的內(nèi)部處理方式。
每個設(shè)備的狀態(tài)個數(shù)不同,因此不同設(shè)備進行概率分布yt預(yù)測時,需要使用如圖4所示不同的全連接層處理,其中全連接層神經(jīng)元個數(shù)為設(shè)備狀態(tài)類別數(shù)目。設(shè)所有設(shè)備中最大狀態(tài)個數(shù)為kmax,當使用上一個設(shè)備概率分布向量yt-1來預(yù)測當前隱層狀態(tài)st時,若yt-1的維度小于kmax,則需要將其用零向量擴展至kmax維。
對于本文模型得到的yt,通過式(17)選取概率最大的狀態(tài)作為該設(shè)備當前時刻的分解狀態(tài),最后將其轉(zhuǎn)換為如表1所對應(yīng)的功率值。具體計算公式為
式中,argmax()為最大值索引函數(shù)。
本文所用BiLSTM層的隱藏層神經(jīng)元個數(shù)為32,LSTM層的隱藏層神經(jīng)元個數(shù)為32。
本文模型通過聚類和編碼操作,將分解問題轉(zhuǎn)換為求解各個設(shè)備狀態(tài)的多分類問題,因此使用CrossEntropyLoss交叉熵函數(shù)作為模型訓(xùn)練的損失函數(shù),即
式中:lossi為第i個樣本的損失;xt,i為第i個樣本各個狀態(tài)的概率分布矩陣;n?為設(shè)備狀態(tài)個數(shù);classi為第i個樣本的所屬真實狀態(tài)類別;N為樣本個數(shù);xt,i[classi]為矩陣xt,i中第classi維代表的數(shù)值;xt,i[j]為矩陣xt,i中第j維代表的數(shù)值。
為避免網(wǎng)絡(luò)出現(xiàn)過擬合現(xiàn)象,本文在模型訓(xùn)練過程中,對于解碼部分,50%概率將上一個設(shè)備真實狀態(tài)編碼作為輸入,50%概率以模型預(yù)測值yt-1作為輸入。最后,本文使用Adam優(yōu)化器,根據(jù)梯度更新網(wǎng)絡(luò)參數(shù),學(xué)習(xí)率為0.001,迭代次數(shù)為100次。
本文采用AMPds2開源數(shù)據(jù)集[21],該數(shù)據(jù)集記錄了加拿大某居民2 a內(nèi)的各種設(shè)備監(jiān)測數(shù)據(jù),采樣時間間隔為1 min。本文使用該數(shù)據(jù)集中的干衣機、熱泵、冰箱、洗碗機、電視和地下室燈6種設(shè)備(2 a間有功功率)作為分解負荷,同時選取105組數(shù)據(jù)作為測試集用來驗證本文模型效果。
本文硬件環(huán)境為Intel(R)Core(TM)i5-9300H CPU@2.40 GHz、8 G DDR4內(nèi)存、GeForce GTX 1650的筆記本;Intel(R)Xeon(R)Gold 5218 CPU@2.30 GHz 2.29 GHz、256 G DDR4內(nèi)存、GeForce RTX 2080 Ti的服務(wù)器。
軟件平臺為Windows10操作系統(tǒng),Python 3.6.8(64位)及PyTorch 1.9.0深度學(xué)習(xí)框架,在訓(xùn)練網(wǎng)絡(luò)時使用GPU進行硬件加速。
本文所用評價指標分為評價設(shè)備狀態(tài)分解準確率和評價設(shè)備功率分解準確性兩部分。使用狀態(tài)識別準確率AS評價模型對于單個設(shè)備整體的分解效果。由于家電設(shè)備的關(guān)閉狀態(tài)時間遠大于開啟狀態(tài)時間,使用該評判標準并不能很好地體現(xiàn)模型的性能,因此定義設(shè)備運行(非關(guān)閉)狀態(tài)識別準確率ARS。AS和ARS可分別表示為
對全部狀態(tài)和運行狀態(tài)進行歸一化,其RMSE可分別表示為
式中:NS為樣本點總數(shù);n′為正確識別設(shè)備狀態(tài)的樣本點個數(shù);TS,i為第i個正確識別設(shè)備狀態(tài)的樣本點;NRS為運行狀態(tài)的樣本點總數(shù);m′為正確識別設(shè)備運行狀態(tài)的樣本點個數(shù);TRS,i為第i個正確識別設(shè)備運行狀態(tài)的樣本點;Pi為第i個真實功率值;P?i為第i個分解功率值;RMSES、RMSERS分別為全部狀態(tài)的歸一化均方根誤差和運行狀態(tài)的歸一化均方根誤差,RMSES及RMSERS越小表示設(shè)備分解準確度越高。
為驗證本文所提算法,將其與文獻[16]所述CNN-BiLSTM算法(簡稱CB算法)及CNN-seq2seq算法(無注意力機制優(yōu)化,簡稱CS算法)進行比較。部分分解曲線如圖5和圖6所示。由于同一時刻并不是所有家電設(shè)備都處于運行狀態(tài),為了更好地展示分解效果,圖5和圖6中所展示設(shè)備并非處于同一時刻。圖5為不同時刻有多個設(shè)備共同疊加運行。圖6為單個設(shè)備的分解結(jié)果。相比較而言,本文算法的分解效果更好。
圖5 負荷疊加曲線Fig.5 Curves of load superposition
圖6 各設(shè)備分解結(jié)果Fig.6 Disaggregation results of each equipment
設(shè)備狀態(tài)識別準確率、功率分解準確性的結(jié)果如表2和表3所示。結(jié)合表1中各設(shè)備的聚類結(jié)果可以看出,設(shè)備單狀態(tài)、組合狀態(tài)之間具有相似性,例如冰箱狀態(tài)1和洗碗機狀態(tài)1功率相近,冰箱狀態(tài)1、洗碗機狀態(tài)1的組合狀態(tài)與地下室燈狀態(tài)1相近等。此外,由于設(shè)備運行過程中功率會產(chǎn)生波動等因素(見圖6(e)中電視功率波動尤為明顯),也增大了負荷分解的難度。
表2 不同模型的狀態(tài)識別準確率Tab.2 State recognition accuracy of different models
表3 不同模型的功率分解準確性(均方根誤差)Tab.3 Power decomposition accuracy of different models(RMSE)
由表2和表3可知,使用seq2seq結(jié)構(gòu)替代BiLSTM提高了模型分解精度,CS模型的狀態(tài)識別準確率、均方根誤差結(jié)果都優(yōu)于CB模型;同時,本文模型的整體結(jié)果優(yōu)于CS模型,表明在模型中引入注意力機制能夠使得模型更加有效地關(guān)注重要部分的信息,進一步提高了模型精度。
總體上,本文所用模型的識別準確率AS和ARS都高于CB模型,其中冰箱、洗碗機和地下室燈的識別準確率提升較大。而在均方根誤差方面,本文模型的平均RMSES比對照模型降低了21.17%,平均RMSERS比對照模型降低了20.37%,分解精度有顯著提升。從算例分析可以看出,本文對CB算法的兩處優(yōu)化都是有效的,并取得良好的分解效果。
本文提出了一種基于注意力機制優(yōu)化的CNN-seq2seq模型用于NILM。將總有功功率數(shù)據(jù)構(gòu)建成時間序列向量作為模型輸入,通過K-means++聚類將功率數(shù)據(jù)轉(zhuǎn)換成狀態(tài)編碼作為模型輸出,簡化了模型結(jié)構(gòu)。同時注意力機制使模型能夠更加關(guān)注重要特征信息。與在深度學(xué)習(xí)領(lǐng)域中具有較優(yōu)性能的CNN-BiLSTM模型相比,本文模型的設(shè)備識別準確率較高,而且均方根誤差也顯著降低。
下一階段將在指導(dǎo)居民用電行為、減少能耗等方面開展進一步研究。