鐘華明,梁玉楠,何勝林,胡向陽,曾少軍
(1.廣東粵電湛江風力發電有限公司,廣東湛江,524000;2.中海石油(中國)有限公司湛江分公司,廣東湛江,524057)
隨著油氣勘探開發的不斷深入,開發井和探井的數量不斷增加,測井解釋人員需要結合本區域的地質模式選擇測井解釋模型和解釋參數,對測井資料進行精細化解釋評價[1-2]。目前主流的測井解釋系統均未包含區域研究成果及專家經驗知識,因此測井人員在測井解釋時,需要先對區域地質數據進行分析,再分選模型和確定參數,這在很大程度上降低了測井解釋的效率。不熟悉區域地質情況的測井解釋人員往往不能正確地選擇測井解釋模型及參數,從而造成了測井解釋評價不準確,其結果無法準確反映真實油氣藏情況。包含專家經驗的測井知識庫可以將專家頭腦中的認知轉化為測井解釋人員實際工作中的理性認知,使測井解釋人員在模型選擇和參數確定等測井解釋環節中最大限度地減少人為干擾因素,提高測井解釋效率及精度。
目前,知識庫[3-4]的研究和應用在國內外引起廣泛關注,知識庫的種類及構建方法[5-6]較多。傳統的知識檢索和知識智能調用方法主要包括混合推理[7]、最小井距法[8]等,當知識庫中存在不確定性的知識時,傳統方法普遍存在準確度不高的問題。SHARMA[9]提出通過人工智能自適應模式獲取知識,通過增加知識的依賴性進而獲取準確的知識,但這是一種理想狀態的知識庫系統,且建立過程復雜。GENE ONTOLOGY CONSORTIUM[10]提出了一種基于本體的知識庫構建模式,該模式通過本體推理獲得知識,但本體構建均針對特定的領域,無法形成通用的知識模式。尚福華等[11]提出了一種首先利用關聯規則查找知識,然后采用模糊推理對多條規則消除沖突,最后利用結果分析得到知識的方法,該方法的不足之處在于對于復雜規則需要人工判別。ZHU等[12]提出了基于KNN算法的知識庫查詢方法,該方法利用KNN算法判別和調用知識流,但KNN算法對于高維數據的判別存在不足之處。
在對測井解釋評價流程綜合分析以及相關算法研究的基礎上,本文提出了基于KNN-Fisher算法的測井解釋知識庫構建方法,該方法在ZHU等[12]提出的KNN算法分類知識調用的基礎上,引入了Fisher判別法對知識降維分類,同時,為提高計算精度,在KNN算法中加入權重及質心點等約束條件,實現了對知識的自動調用。將該方法應用于南海西部某油田測井解釋,解釋成果證明了方法的有效性。
考慮到Fisher判別法[13-16]與KNN算法[17-18]各自的優點,將KNN算法與Fisher判別法相結合建立了KNN-Fisher算法,該算法既具有KNN算法的穩定性及準確性,又具有Fisher處理高維數據集及多樣本數據集的優勢。KNN-Fisher算法原理如下:首先利用Fisher判別法對樣本數據進行降維分類,求取各類樣本的質心,再利用KNN算法對測試數據進行判別分類,為了減少樣本不均衡對KNN算法準確性的影響,在KNN判別算法中加入權重約束和Fisher分類后的質心點約束,最終建立判別函數F。
采用Fisher判別法對測井知識進行降維分類,首先需要選擇能反映測井知識特點且盡可能獨立的測井資料,然后建立樣品點的觀測向量,再對樣品變量進行變換并將其投影于判別向量方向,最后建立判別函數。利用Fisher判別法對兩類測井知識進行判別分析,圖1通過兩類知識的研究數據在x、y方向上的投影展示了Fisher判別法原理,圖1中箭頭為數據投影方向,G1、G2為知識的測井數據,x軸和y軸上的數據點為G1、G2的投影,從圖1可知,Ⅰ類和Ⅱ類測井知識存在較大程度的重疊,需要設法找到一個新y軸(直線L),使得散點投影在新y軸上時,Ⅰ類和Ⅱ類測井知識重疊程度較小,即兩類測井知識的類間離差大,類內離差小,以達到提高識別率的目的。

圖1 Fisher判別法原理
根據兩類知識對應的測井資料建立樣本數據矩陣集合D,設D={(X,Y)},xi是第i類測井資料,xi∈X,yi是第i類知識的標識,yi∈Y,i=1,2。令最佳投影為W,μi為第i類質心,Ni為第i類的樣本數量,μi的計算公式可表示為:
(1)
兩類測井知識的質心點分別為μ1,μ2。兩類測井知識的最大類間距離,即樣本間離差J0可表示為:
J0=(WTμ2-WTμ1)2=WT(μ2-μ1)(μ2-μ1)TW
(2)
類間離散度矩陣S0可表示為:
S0=(μ2-μ1)(μ2-μ1)T
(3)
(2)式可表示為:
J0=WTS0W
(4)
兩類測井知識的最小類內距離,即樣本內離差為J1可表示為:

(5)
類內離散矩陣S1:
(6)
(5)式可表示為:
J1=WTS1W
(7)
要想達到較好的分類效果,應該使同類樣本的投影點盡可能接近,樣本內離差盡可能小,即J1盡可能小;同時也要保證不同類樣本投影點盡可能遠離,即J0盡可能大。同時考慮兩者的關系建立目標函數J:
(8)
當J最大時,分類效果最好。因此,對(8)式求偏導,即可實現樣本數據的降維分類。

(9)
K值為KNN算法中K個最近鄰近數,K值對KNN算法的結果影響重大,K值過大或過小,均會造成較大誤差,為簡化計算和提高判別精度,令K的計算公式為:

(10)
式中:N為樣本類數。

(11)
j∈K

(12)
建立加入權系數以及質心點約束條件的F函數:
(13)

我們利用各種分析方法分區域、分油田、分層組對測井基礎資料、巖石物理分析資料以及試油資料進行分析,再將建立的孔-滲-飽模型及參數、解釋圖版、模型函數等保存下來,形成測井知識[7-8]。測井知識包括解釋模型和解釋參數。
解釋模型為針對不同地區、不同類型儲層,應用數理統計的方法分析測井資料和巖心分析資料之間的關系,建立的地區孔隙度、滲透率、含水飽和度、束縛水飽和度、滲透率解釋模型。
解釋參數是調用地區地質和試油試水資料、測井曲線資料,采用交會圖版、M-N交會圖、Pe-K交會圖和Pe-Th/K交會圖等,結合地區地質和解釋經驗確定的地層水電阻率、巖電參數、巖性、骨架參數以及粘土礦物類型等參數。區域性解釋參數的確定需考慮地區性和經驗性,因此上述參數均非常重要。
為了方便調用,我們采用多叉樹存儲結構,將知識按照盆地、油田、層組和知識類別分類存儲。圖2為知識的存儲結構,按照盆地→構造→油田→油組→模型/參數的層次結構存儲知識,一個盆地包含多個構造,每個構造包含多個油田,每個油田包含多個油組,每個油組包含多個解釋參數和模型。

圖2 知識存儲結構
在多叉樹知識存儲的基礎上,為了進一步提高知識的辨識度,還需要對知識進行分類標識。進行測井解釋時,需要將測井知識分為下限參數、解釋模型等類別,同時根據不同的研究目的對知識進行細分。因此,在測井知識庫加入了知識類別及知識名稱。為了實現KNN-Fisher算法對知識的調用,我們在測井知識庫中引入了知識研究參數。表1是存儲在測井知識庫中的知識。

表1 存儲在測井知識庫中的知識
我們基于測井綜合處理解釋平臺建立了測井解釋知識庫系統,將研究得到的知識保存在測井綜合處理解釋平臺的知識庫中,實現知識的調用。知識的調用采用混合推理與KNN-Fisher算法相結合的方式,選用堆棧存放知識查找路徑,依次匹配盆地、構造、油田、層組,并存入棧中。如果層組匹配且有相關的知識,則調用;否則,返回上一級,繼續匹配,直到查找結束。當檢索到多個知識時,則采用KNN-Fisher算法進行智能調用。圖3為測井知識庫系統的調用流程。以從測井知識庫中調用參數為例展開說明,步驟如下。
1) 判斷測井解釋是否需要調用測井知識庫的參數,如果是,則獲取盆地P、構造S、油田A、層組C依次入棧,轉步驟2);否則,轉步驟7)。
2) 通過混合推理查找知識,如果不存在知識或者不存在層組C知識,則彈出堆棧,如果堆棧不為空,重復步驟2);如果存在層組C知識或者存在知識且堆棧為空,轉步驟3),否則,轉步驟7)。

圖3 測井知識庫調用流程
3) 判斷知識是否唯一,如果唯一,則轉步驟7);否則,轉步驟4)。
4) 查找知識庫中知識的研究參數,并從數據庫中獲取知識的研究參數,轉步驟5)。
5) 根據研究參數,提取解釋井的資料,轉步驟6)。
6) 利用KNN-Fisher算法對研究資料以及解釋井資料進行建模,優選解釋參數,轉步驟7)。
7) 調用知識。
KNN-Fisher算法的實現流程如下:首先對導入的知識參數集及測試集進行預處理,去除異常值,再利用Fisher判別法對預處理后的數據進行降維分類,計算中心質點,最后調用改進的KNN算法實現知識判別調用。KNN-Fisher算法的描述如圖4所示。

圖4 KNN-Fisher算法的描述
采用基于KNN-Fisher算法構建的知識庫對南海西部海域某油氣田的20多口井資料進行處理解釋,效果良好。XX井的測井資料有效儲層解釋流程如下:首先根據測井曲線的形態特征將測井解釋剖面劃分為具有相同巖石物理性質和流體類型的小層結構,然后對這些小層定性解釋,最后給出合理結論。在解釋過程中需要調用相關層組的下限參數包括孔隙度(POR)下限、含水飽和度(SW)下限及泥質含量(VSH)下限參數,對儲層流體性質判斷,以識別油氣。XX井位于A1氣田、S1構造,從表2中可知S1構造包括B1、B2、C1共3個目的層組,知識庫中已經存在了A1氣田B1、B2層組下限參數以及A2、A3氣田C1層組的下限參數。
XX井距離A2氣田21.5km,距離A3氣田30.0km,包含3個目的層組B1、B2、C1,其中C1層組在A1油田知識庫中無下限參數,因此為了對C1層組進行有效儲層解釋,需要借助構造內同一層組或者同一油田中鄰近層組的信息進行解釋分析。經過混合推理,首先查找知識庫中A1氣田C1層組的知識,返回結果為無;接著返回A1氣田查找,存在B1、B2層組知識,不存在C1層組知識;然后返回構造繼續查找,存在A2氣田C1層組以及A3油田C1層組知識,查找結束,一共查找到4個知識,下一步需要利用KNN-Fisher算法判別調用知識。
我們利用孔隙度、泥質含量、含水飽和度、電阻率以及聲波曲線進行知識研究。采用KNN-Fisher算法判別調用知識時,需要利用A1氣田B1、B2層組的孔隙度、泥質含量、含水飽和度、電阻率及聲波曲線以及A2、A3氣田C1層組的孔隙度、泥質含量、含水飽和度、電阻率及聲波曲線建立模型,并將A1氣田C1層組的孔隙度、泥質含量、含水飽和度、電阻率及聲波曲線作為測試集。

表2 P1盆地知識
將該油氣田相關研究資料與XX井C1層組資料進行預處理后,再采用KNN-Fisher算法建模,得到的因子分析結果如圖5所示。將該油氣田相關研究資料與XX井C1層組資料進行預處理后,不調用Fisher判別法,僅采用KNN算法建模,得到的因子分析結果如圖6所示。對比圖5和圖6可以發現,圖5中同一層組的數據更集中,而圖6中的數據較為分散。從采用KNN-Fisher算法建??梢钥闯?XX井C1層組與A3氣田C1層組最接近,因此,我們采用A3氣田的C1層組下限參數對XX井C1層組進行有效儲層解釋。利用ZHU等[12]提出的KNN算法建模得到的XX井C1層組與A2氣田C1層組最接近,因此,我們調用A2氣田C1層組的知識對XX井C1層組進行有效儲層解釋。

圖5 采用KNN-Fisher算法建模得到的因子分析結果(x軸為因子1,y軸為因子2,z軸為因子3)

圖6 采用KNN算法建模得到的因子分析結果(x軸為因子1,y軸為因子2,z軸為因子3)
將利用本文方法與ZHU等[12]提出的方法得到的分析結果進行比較研究。圖7是分別利用A3氣田C1層組的下限參數及A2氣田C1層組的下限參數對XX井C1層組的有效儲層解釋得到的結果。XX井C1層組被分為3個小層進行有效儲層解釋,采用A2氣田C1層組的下限參數進行解釋,解釋結果為差氣層,而采用A3氣田C1層組的下限參數得到的解釋結果為氣層。在XX井C1層組進行地層測試,獲天然氣124935.0m3/d、水9.0m3/d,證實C1層組為高產氣層,不難發現,利用A3油田C1層組的下限參數得到的解釋結果更符合實際情況。

圖7 利用A3氣田C1層組和A2氣田C1層組的下限參數對XX井C1層組的有效儲層解釋得到的結果(1ft≈0.3048m)
表3是KNN-Fisher算法與KNN算法在南海西部海域某油氣田的應用統計結果,從表3可以看出,KNN-Fisher算法的符合率為80%,KNN算法的符合率為60%,KNN-Fisher算法的符合率較KNN算法的符合率高。KNN-Fisher算法能夠實現知識自動、準確調用,有效克服了混合推理及KNN算法存在的不足。

表3 KNN-Fisher算法與KNN算法在南海西部某油氣田的應用統計結果
本文結合測井解釋知識庫的特點,提出了基于KNN-Fisher算法構建知識庫的方法,研究了知識庫調用方法,并將該方法應用于南海西部海域某油氣田的測井解釋,得出以下結論。
1) 該方法在利用Fisher判別法進行降維分類的同時,對KNN算法加入權重系數以及質心點約束條件,提高了算法的準確度,有效克服了混合推理及KNN算法存在的不足。
2) 該方法實現了測井知識庫中知識的自動、準確調用,獲取的知識與實際的地層條件吻合,提高了解釋精度和解釋效率。
3) 在實際應用中應該注意,當知識庫中不存在知識研究所需的測井資料或者當前處理井的資料與知識庫的知識研究參數不符合時,采用該算法得到的知識將會給測井解釋造成較大的誤差。