宋安玲,任喜偉,姚 斌,何立風(fēng)
(1.西安交通大學(xué)城市學(xué)院,陜西西安,710018;2.陜西科技大學(xué)電氣與信息工程學(xué)院,陜西西安 710021)
在油田聯(lián)合站原油儲罐中,由于流體的分異調(diào)整作用,石油占據(jù)油罐的高部位,水體則位于油罐的底部,石油與水體之間的接觸面,稱為油水界面。為了準(zhǔn)確獲取油水界面位置,需要借助某種油水界面測量裝置對原油儲罐內(nèi)油水介質(zhì)進(jìn)行測量[1-3],如圖1所示。目前,多數(shù)油水界面測量裝置內(nèi)部呈現(xiàn)矩陣式分布的傳感探極結(jié)構(gòu),物位傳感器通過與油罐內(nèi)介質(zhì)接觸獲取油水界面數(shù)據(jù),油水界面數(shù)據(jù)一般表現(xiàn)為有明顯聚類特征的線性數(shù)據(jù)[4]。
圖1 原油儲罐油水界面測量示意圖
對油水界面數(shù)據(jù)進(jìn)行分析、統(tǒng)計(jì)時,通常需要采取某種油水界面測量計(jì)算方法,才能獲得油水界面位置及介質(zhì)液位高度等結(jié)果。然而,油水界面?zhèn)鹘y(tǒng)計(jì)算方法在計(jì)算油水界面及液位高度時,完全依賴人工選取油水界面數(shù)據(jù)典型值。即,如果人工所選典型值在合理范圍內(nèi),則油水界面及液位高度計(jì)算結(jié)果準(zhǔn)確,否則,計(jì)算結(jié)果誤差較大[5]。
1967年,MacQueen提出了K-means算法,很多學(xué)者對該算法進(jìn)行了深入研究,因其易于描述和實(shí)現(xiàn),且具有高效處理大規(guī)模數(shù)據(jù)的優(yōu)點(diǎn)[6-9],該算法已經(jīng)被廣泛應(yīng)用到自然語言處理、醫(yī)學(xué)、土壤和石油等眾多領(lǐng)域[10-15]。張宜浩等將改進(jìn)的K-means算法用于漢語詞語歸納,提出用同義詞詞林中詞的分類編號來降低特征維度[10];劉海峰等將優(yōu)化的K-means算法用于文本特征選擇,通過優(yōu)化初始類中心的選擇模式及對孤立點(diǎn)的剔除改善了文本特征聚類的效果[11];董俠等將K-means算法用于腦部醫(yī)學(xué)圖像研究[12];郝智慧等將K-means算法用于分割含有噪聲及灰度非同質(zhì)的醫(yī)學(xué)圖像[13];代希君等利用K-means算法為大樣本光譜數(shù)據(jù)建立大尺度區(qū)域的鹽分等土壤屬性預(yù)測模型提供一種新的思路和方法[14]。劉遠(yuǎn)紅等將K-means算法直接應(yīng)用于油水界面檢測,獲得較好的計(jì)算結(jié)果[15]。鑒于K-means算法的優(yōu)點(diǎn)和應(yīng)用價(jià)值,本文針對原油儲罐內(nèi)油水界面數(shù)據(jù)具有數(shù)據(jù)規(guī)模較大、聚類特征明顯和數(shù)據(jù)易于優(yōu)化等特點(diǎn),將K-means算法應(yīng)用于油水界面測量計(jì)算過程中,提出基于K-means的油水界面測量聚類算法,通過算法改進(jìn),提高油水界面測量計(jì)算結(jié)果精度。
本文以開發(fā)陜北延長油田某采油廠油水界面監(jiān)控系統(tǒng)為例,說明測量過程及其油水界面數(shù)據(jù)。油水界面監(jiān)測系統(tǒng)整體框架如圖2所示。
圖2 油水界面檢測系統(tǒng)整體框架
原油儲罐中含有氣層、油層、乳化層和水層。油水界面測量裝置被安裝在原油儲罐中,采用矩陣式分布的傳感探極結(jié)構(gòu),并與介質(zhì)或罐壁之間構(gòu)成N個層面檢測橫斷面;在CPU的控制下,根據(jù)被測介質(zhì)介電常數(shù)的不同,電磁微波式測量裝置感應(yīng)獲得不同強(qiáng)弱的回波信號,經(jīng)過信號過濾、解調(diào)、模數(shù)轉(zhuǎn)換變?yōu)閿?shù)字信號,生成油水界面數(shù)據(jù);油水界面數(shù)據(jù)通過通信網(wǎng)絡(luò),上傳給監(jiān)控中心保存、統(tǒng)計(jì)、計(jì)算和展示數(shù)據(jù),最終獲得油水界面液位高度、體積、含水率等相關(guān)信息。
采油廠某原油儲罐高為12 m,直徑為12 m,測量裝置上分布了100個接收傳感器,傳感器間距10 cm。測量裝置工作后,可得到如圖3所示的油水界面數(shù)據(jù)曲線圖。從數(shù)據(jù)分析可知,原油儲罐內(nèi)宏觀上處于同一層面的介質(zhì),其油水界面數(shù)據(jù)表征基本相近,有利于辨別原油儲罐內(nèi)不同介質(zhì),計(jì)算油水界面及液位高度。
圖3 油水界面數(shù)據(jù)曲線圖
K-means算法是基于數(shù)據(jù)劃分的無監(jiān)督聚類算法,是典型的基于原型的目標(biāo)函數(shù)聚類方法的代表,它是數(shù)據(jù)點(diǎn)到原型的某種距離作為優(yōu)化的目標(biāo)函數(shù),利用函數(shù)求極值的方法得到迭代運(yùn)算的調(diào)整規(guī)則。K-means算法以歐式距離作為相似度測度,在評價(jià)指標(biāo)J最小時,求對應(yīng)某一初始聚類中心向量的最優(yōu)分類。J的數(shù)學(xué)表達(dá)如下:
(1)
式中:xi(i=1,2,3,…,N)為第i個二維向量樣板元素,即被分類對象;uj(j=1,2,3,…,K)為第Sj(j=1,2,3,…,K)類的質(zhì)心,K≤N;Sj為xi所屬的第j個類別;rij為數(shù)據(jù)點(diǎn)xi被歸類到Sj的時候?yàn)?,否則為0。
K-means算法的基本思想如下:
(1)從N個樣本xi中選擇K個對象uj作為初始聚類質(zhì)心;
(2)根據(jù)歐氏距離計(jì)算方法對xi進(jìn)行第一次分類,得到K個聚類Sj;
(3)計(jì)算每個聚類對象Sj的均值,作為新的聚類質(zhì)心uj,并根據(jù)歐式距離計(jì)算每個對象xi與每個新質(zhì)心uj的距離,對xi重新劃分,重新得到Sj;
(4)重復(fù)步驟(3),直到式(1)中J值最小,新質(zhì)心uj不發(fā)生改變?yōu)橹?,即K-means算法收斂。
(5)統(tǒng)計(jì)K個聚類Sj數(shù)據(jù)個數(shù),根據(jù)物位傳感器間距,計(jì)算油罐內(nèi)各層介質(zhì)高度,獲得油水界面。
按照上述油水界面K-means聚類算法基本描述,對圖3油水界面數(shù)據(jù)進(jìn)行計(jì)算。分別取4個數(shù)據(jù)u1=50、u2=334、u3=793、u4=2 506作為初始聚類質(zhì)心,也可選取u1=238、u2=630、u3=793、u4=3 255作為初始聚類質(zhì)心。區(qū)別在于2組數(shù)據(jù)聚類質(zhì)心的變化,如表1所示,數(shù)據(jù)1需要進(jìn)行3次聚類質(zhì)心變化,可確定聚類質(zhì)心為u1=81、u2=535、u3=932、u4=3 762,而數(shù)據(jù)2則需要進(jìn)行5次聚類質(zhì)心變化,才能確定。
表1 K-means算法聚類質(zhì)心變化過程
進(jìn)一步確定數(shù)據(jù)集合S1、S2、S3、S4分別為{x1,x2,x3,… ,x56}、{x57,x58,x59,… ,x70}、{x71,x72,x73,… ,x77}、{x78,x79,x80,… ,x100},統(tǒng)計(jì)得到m1=56、m2=14、m3=7、m4=23,計(jì)算得到H1=5.6 m、H2=1.4 m、H3=0.7 m、H4=2.3 m,計(jì)算結(jié)果與油水液位實(shí)際測量結(jié)果一致,K-means算法應(yīng)用于油水界面測量的準(zhǔn)確率得到驗(yàn)證。
在測量過程中因測量裝置與原油儲罐形狀之間存在的某種客觀因素,或是測量裝置傳感器本身存在的某種主觀因素導(dǎo)致油水界面數(shù)據(jù)中存在錯誤數(shù)據(jù),稱之為偽數(shù)據(jù)。偽數(shù)據(jù)具體表現(xiàn)在油水界面數(shù)據(jù)存在前一個數(shù)據(jù)表征第一種介質(zhì)特性,后一個數(shù)據(jù)表示第二種介質(zhì)特性,而第三個數(shù)據(jù)又表示第一種介質(zhì)特性的可能性,完全不符合原油儲罐內(nèi)介質(zhì)數(shù)據(jù)的分布規(guī)律,這種情況被認(rèn)為油水界面數(shù)據(jù)xi中存在偽數(shù)據(jù)。如圖4所示的xi曲線分布,就是一組存在偽數(shù)據(jù)的界面數(shù)據(jù),其中11號數(shù)據(jù)為1115,88號數(shù)據(jù)為50、91號數(shù)據(jù)為50,均屬于偽數(shù)據(jù)。如果直接應(yīng)用K-means聚類算法進(jìn)行油水界面計(jì)算,計(jì)算結(jié)果為H1=5.7 m、H2=1.5 m、H3=0.7 m、H4=2.1 m,計(jì)算結(jié)果與實(shí)際不符。因此,需要對油水界面數(shù)據(jù)進(jìn)行預(yù)處理,先消除偽數(shù)據(jù),再進(jìn)行聚類劃分和計(jì)算。
圖4 包含偽數(shù)據(jù)的油水界面數(shù)據(jù)曲線圖
針對油水界面存在偽數(shù)據(jù)的問題,本文提出改進(jìn)K-means算法——中值預(yù)處理K-means算法計(jì)算油水界面,該算法結(jié)合中值過濾算法和K-means聚類算法的設(shè)計(jì)思想,一方面可對油水界面數(shù)據(jù)進(jìn)行去偽預(yù)處理,另一方面可對油水界面數(shù)據(jù)進(jìn)行合理聚類劃分。改進(jìn)K-means算法的基本思想如下。
(1)按照如圖5所示的中值預(yù)處理模板遍歷向量樣本油水界面數(shù)據(jù)xi,獲得一組新的向量樣本。模板數(shù)據(jù)滿足xj≤xj+1≤xj+2≤…≤xj+d/2≤…≤xj+d,其中,d為模板中數(shù)據(jù)個數(shù)(取值應(yīng)小于油水界面數(shù)據(jù)介質(zhì)臨界處數(shù)據(jù)個數(shù)),xj+d/2為模板中間位置取值。進(jìn)行模板運(yùn)算時,始終將模板內(nèi)數(shù)據(jù)xj+d/2賦給模板起始位置所在變量,以此類推,直至N個油水界面數(shù)據(jù)xi遍歷完畢為止,即獲得一組新的向量樣本。
圖5 中值模板遍歷油水界面數(shù)據(jù)示意圖
(2)對中值預(yù)處理過的向量樣本油水界面數(shù)據(jù)xi,選取4個數(shù)據(jù)值u1、u2、u3、u4分別作為氣層、油層、乳化層和水層初始聚類質(zhì)心;
(3)按照式(2),分別統(tǒng)計(jì)油水界面各層介質(zhì)聚類集合,即氣層、油層、乳化層和水層對應(yīng)的聚類集合S1、S2、S3、S4;
Sj={x∈xix=arg min‖x-uj‖2}
(2)
(4)按照式(3)對S1、S2、S3、S44組聚類集合求取平均值,作為油水界面新的聚類質(zhì)心。其中,mj為每個聚類集合Sj的數(shù)據(jù)個數(shù)。
(3)
(5)遞歸(2)、(3)步,直至u1、u2、u3、u4數(shù)值不發(fā)生改變?yōu)橹梗?/p>
(6)統(tǒng)計(jì)最終確定的聚類集合S1、S2、S3、S4,統(tǒng)計(jì)m1、m2、m3、m4,并按照式(4)計(jì)算油水界面各層介質(zhì)高度H1、H2、H3、H4。
Hj=hmj
(4)
改進(jìn)K-means算法偽代碼如下列程序所示。其中,dataArr為獲取xi的數(shù)組,GetOWData()為獲取xi的函數(shù),dataMod為模板數(shù)組,sort()為排序函數(shù),select()為獲取有序數(shù)組中間值函數(shù)。模板長度為d,u為聚類質(zhì)心數(shù)組,min()為判斷(dataArr[i] - u[j])是否最小函數(shù),dataS為記錄聚類數(shù)組,n為統(tǒng)計(jì)聚類內(nèi)數(shù)據(jù)個數(shù)數(shù)組,aveData為求聚類平均值函數(shù),isConver()為判斷u是否收斂的函數(shù)。
∥改進(jìn)K-means算法偽代碼
dataArr←GetOWData()
for i←1 to i <= N do
| for j←1 to j <= d do
‖ dataMod[j]←dataArr[i++ j]
‖ j←j++ 1
| end of for
| dataMod←sort(dataArr)
| mid←select(dataMod)
| dataArr[i]←mid
| i←i++ 1
end of for
for i←1 to i <= N do
| for j←1 to j <= K do
‖ if min(dataArr[i] ,u[j])
||| dataS[i]←dataArr[i]
||| n[j]←n[j]++ 1
‖ end of if
‖j←j++ 1
| end of for
| i←i++ 1
end of for
for j←1 to j <= K do
| for i←1 to i <= N do
‖ aveData[i]←aveData[i]++dataS[i]
‖ i←i++ 1
| end of for
| u[j]←aveData[i] / n[j]
| if isConver(u[j])
‖ return u[j]
| else
‖ return Kmeans()
| end of if
| j←j++ 1
end of for
針對圖4所示存在偽數(shù)據(jù)的油水界面數(shù)據(jù),采用改進(jìn)K-means算法計(jì)算油水界及液位高度。首先進(jìn)行中值預(yù)處理優(yōu)化偽數(shù)據(jù),根據(jù)油水界面數(shù)據(jù)介質(zhì)臨界區(qū)域數(shù)據(jù)個數(shù)大小,選擇模板d取值為5,遍歷整個油水界面數(shù)據(jù),得到如圖6所示的油水界面數(shù)據(jù)。其中11號數(shù)據(jù)由原來的1 115優(yōu)化為115,88號、91號數(shù)據(jù)由原來的50優(yōu)化為3 996。預(yù)處理后的油水界面數(shù)據(jù)反映了實(shí)際油罐內(nèi)介質(zhì)的特性,且數(shù)據(jù)整體趨于平滑,有利于各層介質(zhì)聚類劃分。
圖6 中值預(yù)處理后的油水界面數(shù)據(jù)曲線圖
之后分別取4個數(shù)據(jù)u1=85、u2=499、u3=1 028、u4=3 255為初始聚類質(zhì)心,也可選取u1=238、u2=630、u3=793、u4=3 255為初始聚類質(zhì)心。區(qū)別在于中值預(yù)處理聚類質(zhì)心的變化,如表2所示,數(shù)據(jù)1需要進(jìn)行3次聚類質(zhì)心變化,可確定聚類質(zhì)心為u1=81、u2=534、u3=932、u4=3 762,而數(shù)據(jù)2則需要進(jìn)行4次聚類質(zhì)心變化,才能確定。
表2 預(yù)處理K-means算法聚類質(zhì)心變化過程
進(jìn)而確定數(shù)據(jù)集合S1、S2、S3、S4分別為{x1,x2,x3,… ,x56}、{x57,x58,x59,… ,x70}、{x71,x72,x73,… ,x77}、{x78,x79,x80,… ,x100},統(tǒng)計(jì)得到m1=56、m2=14、m3=7、m4=23;最后計(jì)算獲得H1=5.6 m、H2=1.4 m、H3=0.7 m、H4=2.3 m,計(jì)算結(jié)果與油水液位實(shí)際測量結(jié)果一致,改進(jìn)K-means算法應(yīng)用于油水界面測量的準(zhǔn)確率得到驗(yàn)證。
為了對比K-means算法和改進(jìn)K-means算法的性能優(yōu)劣,以圖3提供的樣本油水界面數(shù)據(jù)和圖4提供的偽數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),實(shí)驗(yàn)在ThinkPad R400電腦(Intel(R)Core(TM)2 Duo CPU P7570,2.26 GHz,RAM 2GB)上進(jìn)行。選擇不同油水界面數(shù)據(jù)作為K-means算法和改進(jìn)K-means算法的聚類質(zhì)心。u1在{x1,x2,x3,… ,x56}內(nèi)任意取值,u2在{x57,x58,x59,… ,x70}內(nèi)任意取值,u3在{x71,x72,x73,…,x77},u4在{x78,x79,x80,…,x100}內(nèi)任意取值。按照上述聚類質(zhì)心取值范圍可知,K-means算法和改進(jìn)K-means算法分別運(yùn)行126 224次。兩種算法運(yùn)行結(jié)果如表3所示。
表3 算法運(yùn)行結(jié)果對比
由2.3小節(jié)的偽數(shù)據(jù)分析,以及K-means算法和改進(jìn)K-means算法的驗(yàn)證結(jié)果分析可知,K-means算法直接應(yīng)用于存在偽數(shù)據(jù)的油水界面數(shù)據(jù),得到的結(jié)果受到偽數(shù)據(jù)的影響,結(jié)果出現(xiàn)較大偏差,計(jì)算結(jié)果不準(zhǔn)確;而將改進(jìn)K-means算法應(yīng)用存在偽數(shù)據(jù)的油水界面數(shù)據(jù)中,可以有效屏蔽其中的偽數(shù)據(jù),得到的計(jì)算結(jié)果與實(shí)際測量結(jié)果一致,計(jì)算結(jié)果準(zhǔn)確。
K-means算法處理油水界面數(shù)據(jù)時,對于油水界面數(shù)據(jù)呈現(xiàn)較大的波動數(shù)據(jù),算法的執(zhí)行過程復(fù)雜,需反復(fù)遞歸,實(shí)驗(yàn)結(jié)果總迭代次數(shù)需378 521次,迭代次數(shù)較多;而改進(jìn)K-means算法處理油水界面數(shù)據(jù)時,油水界面數(shù)據(jù)已經(jīng)得到優(yōu)化,優(yōu)化后的數(shù)據(jù)呈現(xiàn)大幅波動的情況較少,數(shù)據(jù)相對平滑,算法的執(zhí)行過程簡單,實(shí)驗(yàn)結(jié)果總迭代次數(shù)需369 781次,迭代次數(shù)較少。
統(tǒng)計(jì)2種算法運(yùn)行時間,實(shí)驗(yàn)結(jié)果為K-means算法平均耗時5.048 ms,改進(jìn)K-means算法平均耗時4.851 ms。由此可知,K-means算法和改進(jìn)K-means算法在運(yùn)行時間上差距不大,改進(jìn)K-means算法略優(yōu)于K-means算法。因K-means算法缺少對油水界面數(shù)據(jù)的預(yù)處理環(huán)節(jié),運(yùn)行時間應(yīng)快于改進(jìn)K-means算法,但改進(jìn)K-means算法總的迭代次數(shù)要少于K-means算法。因此,結(jié)果表明改進(jìn)K-means算法運(yùn)行時間小于K-means算法。
本文通過分析油水界面數(shù)據(jù)來源及其數(shù)據(jù)特性,提出應(yīng)用K-means算法計(jì)算油水界面。然而發(fā)現(xiàn)油水界面中存在偽數(shù)據(jù),直接應(yīng)用K-means算法進(jìn)行油水界面數(shù)據(jù)分類統(tǒng)計(jì),結(jié)果會存在較大誤差。又提出改進(jìn)K-means的油水界面測量預(yù)處理聚類算法,并將其應(yīng)用于可能存在偽數(shù)據(jù)的油水界面測量中。通過改進(jìn)K-means算法描述、算法結(jié)果準(zhǔn)確率驗(yàn)證和算法對比結(jié)果分析,可知預(yù)處理K-means算法能夠有效處理油水界面?zhèn)螖?shù)據(jù)問題,獲得正確結(jié)果,且算法在算法準(zhǔn)確率、算法迭代次數(shù)和算法運(yùn)行時間上均優(yōu)于K-means算法。