摘要:Matlab語言是一種簡單、高效、功能極強的高級語言,在科學與工程計算領域中有著其他語言無法比擬的優勢。遺傳算法是計算機科學和進化論相結合的產物,在多變量優化問題方面,具有很多優點。我們創新性地采用遺傳算法對進行生烴動力學模型公式中多個參數進行標定。在使用MATLAB編程實現的過程中,我們有針對性地、創造性地設計了編碼方案、求解方案,并且將遺傳算法和傳統的數值優化方法結合起來,大大提高了計算的精度。
本文針對新疆某油田的試驗數據,采用遺傳算法對動力學參數進行標定,并且把計算結果與采用傳統優化方法得到的結果進行對比,擬和誤差明顯提高。
關鍵詞:農遺傳算法;Matlab; 絕對誤差;擬合誤差
中圖分類號: T18 文獻標識碼: A文章編號:20080611060
一、引言
含油氣盆地烴源巖油氣生產是一個非常復雜的地質地球化學過程,目前在實際的工作中,使用有機質成烴動力學是定量評價烴源巖生烴潛力的動力學法,就是在確定成烴動力學模型、標定相關成烴動力學參數后,再結合研究區的構造史和熱史資料,計算出研究區不同層位的源巖在不同地質時代、不同埋深條件下的有機質降解成烴率(轉化率),從而估算出各層的生油量。
目前,人們對成烴熱解模型以及其動力學進行了深入的研究,提出了多種動力學模型,而標定相關成烴動力學模型的參數愈加受到人們的重視,因為成烴動力學模型有多個平行的線性變化和非線性變化的參數,采用不同的參數標定優化方法,就會產生不同的結果,而它的標定直接影響了公式的準確性。
二、需要標定的烴動力學模型
設干酪根(KEO)成油過程由一系列(NO個)平行一級反應組成,第i個反應對應的活化能為EOi,指前因子AOi,
并設對應每一個反應的干酪根的原始潛量為:XOi0,i=1,2…NO,
反映至t時刻,第i個反應的生油量為XOi。
這里以有機質成油模型的標定為例來說明;設在某一升溫速率l,達到某一溫度j時由試驗所測到的生油率為XOlij,在相同的條件下,假定EOi、AOi、XOi0之后,計算的產油率為XOij。如果存在某一組EOi、AOi、XOi0的取值使對所有的l、j都有:
XOlij-XOij=0。
則該組EOi、AOi、XOi0即為所求。由于實驗誤差等原因,只能求使XOlij-XOij盡量小的EOi、AOi、XOi0的取值。為此,構造目標函數
(2-1)
這里L0為不同升溫速率試驗的數目,J0為從一條試驗曲線上的采樣點數。
由于EOi可通過確定平行反應的活化能的分布范圍和相鄰平行反應的活化能間隔而求解,則式2-1可化為:
(2-2)
另外,式2-2中的AOi、XOi0(用占可反應量的百分數表示)應滿足:
(2-3)
三、遺傳算法簡介
Bagley在1967年關于自適應下棋程序的論文中,首次提出了遺傳算法這一術語。同年,DeJong完成了他的博士論文“遺傳自適應系統的行為分析”,將Holland的模式理論與他的計算試驗結合起來,進一步完善了選擇、交叉和變異操作,提出了一些新的遺傳操作技術。遺傳算法流程如下:
begin
t=0;
初始化;
評估;
while 不滿足終止條件 do
begin
重組獲得;
評估;
從和中選擇;
t=t+1
end
end
其中和分別代表第t代的雙親和后代,重組包括:交叉和變異;評估為進化操作,包括:選擇。
四、MATLAB編程基本思路
本文根據所考慮問題的特點,針對具體問題,創造性地設計了一種對于參數標定非常有效的、具有個性的遺傳算法。其主要思路是:考慮到如果固定指前因子Aoi(i=1,2,…No),則目標函數(2-2)是待求的生油潛量XOi0 (i=1,2,…No)的二次函數,而約束條件(2-3)均為線性約束,因此,僅對指前因子Aoi(i=1,2,…No)應用遺傳算法進行求解。對于給定的指前因子Aoi(i=1,2,…No),則通過普通的數值優化方法求解一個線性約束的二次規劃問題得到生油潛量XOi0 (i=1,2,…No),即:通過遺傳算法求解非線性參數Aoi(i=1,2,…No),在計算Aoi(i=1,2,…No)所對應的編碼的適應性函數時,應用普通的數值優化方法求解線性參數XOi0 (i=1,2,…No),并計算擬合誤差,將遺傳算法和傳統的數值計算方法很好地結合起來,發揮各自的優點。
(一)編碼方案
為了克服二進制編碼的缺點,對于問題的變量是實向量的情況,我們直接采用實數編碼。采用實數編碼也便于引入與問題領域相關的啟發信息以增加遺傳算法的搜索能力。
我們只對指前因子進行編碼。假設指前因子的個數是No,則染色體的長度就數No,染色體的第i個基因對應于第i個指前因子Aoi(i=1,2,…No)
(二)產生初始種群
具體操作為:
for i=1:PopSize
for j=1:No
r=15+rand*3;
Pop(i,j)=10^r;
end
end
其中,PopSize為種群的規模,No為指前因子的個數,也是染色體的長度,
(三)適應度函數的計算
定義個體AO=(AO1,AO2,…AONo)的適應值為
f。
個體的AO=(AO1,AO2,…AONo)的適應值越大,說明參數標定準確性越高,反之,說明,誤差越大。
(四)選擇操作
具體操作過程如下:
NewPop(1,:)=Pop(min_i,:);
for i=2:PopSize
r=rand;
for j=1:PopSize
if r<=Rules(j)
NewPop(i,:)=Pop(j,:);
break;
end
end
end
(五)交叉操作
在這里我們采用兩點交叉,交叉點隨機選擇。
具體操作步驟為:
CrossP=0.8;
i=1;
while i<PopSize
r=rand;
if (r j1=round(rand*(No-1))+1; j2=round(rand*(No-1))+1; if (j1>j2) j=j1;j1=j2;j2=j; end tempX=NewPop(i,j1:j2); NewPop(i,j1:j2)=NewPop(i+1,j1:j2); NewPop(i+1,j1:j2)=tempX; end i=i+2; end 4-6變異操作 變異的操作步驟: MuteP=0.5; for i=1:PopSize r=rand; if (r<MuteP) j=round(rand*(No-1))+1; r=rand; if (r>0.5& NewPop(i,j)<1e+18) NewPop(i,j)=NewPop(i,j)*2; end if (r<0.5& NewPop(i,j)>1e+15) NewPop(i,j)=NewPop(i,j)/2; end end end 說明: (1)依次指定個體編碼串中的每個基因座為變異點。 (2)對每一個變異點,隨機產生一個0~1之間的小數r,根據變異概率R4,對原有基因進行乘以2或除以2的變異操作,形成新的基因個體。 五、計算結果和分析 采用標準遺傳算法對實驗數據進行參數標定。 表5.1是采用遺傳算法對試驗數據進行參數標定的結果。圖5.1是迭代過程中每一代中最優個體的擬合誤差隨著代數變化的曲線。 表5.1 標準遺傳算法計算結果 Table 5.1 the result of standard GA 圖5.1各代最優個體擬和誤差變化曲線 Figure5.1fitting error of the best individual in every generation 最優代數:BestG =87絕對誤差:MinErr =0.00156697 六、結論 通過使用遺傳算法確定生烴動力學參數的過程,我們得到以下結論: (一)MATLAB語言自帶的遺傳優化函數顯著降低了編程實現的工作量。 (二)遺傳算法求解相對于傳統方法絕對誤差和效率明顯提高。 遺傳算法最大絕對誤差:0.00156697 傳統方法最大絕對誤差:0.0456 綜上所述,MATLAB在烴動力學參數標定中的應用,極大的提高和改進了傳統優化方法的效率和準確性。 參考文獻 [1] B P TISSOT等. 郝石生等譯. 石油形成與分布[M]. 北京:石油工業出版社,1982. [2] 盧雙舫. 有機質成烴動力學理論及其應用[M]. 北京:石油工業出版社, 1996. [3] 玄光男. 程潤偉. 遺傳算法與工程優化[M]. 北京:清華大學出版社, 2004. [4] 飛思科技產品研發中心.MATLAB6.5輔助優化計算與設計[M]. 北京:電子工業出版社,2003. [5]周明.孫樹棟. 遺傳算法原理及應用[M].北京:國防工業出版社,1999. [6] 田盛豐. 人工智能原理與應用[M]. 北京:北京理工大學出版社,1995.