-
目前,塔里木盆地塔河油田是中国已探明石油地质储量最大的缝洞型油藏,其埋藏深度大,岩溶储层复杂,缝洞发育程度高,储集空间结构多变,油水流动关系复杂,分布受沉积、构造、古地貌及多期岩溶作用控制.溶洞是该类油藏的主要储集空间,也是区别于其他类型油藏的最主要特点.以塔河油田为代表的缝洞型油藏是一种以大型的溶洞和宽裂缝为主要储集空间的特殊类型油藏,其有效储集空间多是由岩溶和断裂的作用发育而来,具有储集体分布复杂,非均质性强,主体缝洞内的流体流动不符合达西渗流规律等特征[1].在实际生产过程中,预测缝洞型油藏的产量变化规律十分重要,良好的产量预测方法在开发方案的优化中起到关键的作用.现有的油藏产量预测方法中,基于传统的油藏渗流理论在描述这类缝洞型油藏时存在困难;基于数值模拟的方法主要通过经验公式,因此主观性较大,在实际生产中应用较为困难;基于数据挖掘的方法虽然能够取得不错的性能,但无法反映油藏生成过程中产油量的变化状况,并且存在不确定性.因此本文基于塔河油田实际生产数据,使用隐马尔可夫模型(Hidden Markov Model,HMM)[2-3]来构建油藏产量预测模型,以对油藏产量趋势进行预测.
全文HTML
-
HMM描述了含有未知参数的马尔可夫过程[4-5],该模型被广泛应用在态势评估、语音识别等领域[6-8].
假设现有一观测序列x={x1,x2,…,xm},其中xm∈{O1,O2,…,Op},p为观测值集合中元素的个数;一隐含状态序列y={y1,y2,…,yn},其中yn∈{S1,S2,…,Sq},q为隐含状态集合中元素的个数[9-10].用aij表示从状态Si转移到状态Sj的概率,即:aij=P(Sj|Si),其中1≤i,j≤q.由aij组成的矩阵叫做状态转移概率矩阵,记作A,矩阵A描述了不同状态之间进行转移的概率[11-13].
bjk用来表示状态值为Sj时产生的观测值为Ok的概率,即:
其中Ok是状态Sj下的观测值,1≤k≤p,1≤j≤q.由bjk组成的矩阵叫做观测值概率分布矩阵,记作B,矩阵B描述了在不同的隐含状态下生成不同观测值的概率. HMM可由一个五元组(P,Q,A, B,α)表示,其中P为观测值的有限集合, Q为状态值的有限集合,A为状态转移概率矩阵,B为观测值概率分布矩阵,α为初始状态概率分布[14].
1) 解码问题:已知HMM和观测序列,求解产生该观测序列的最佳隐藏状态序列;
2) 学习问题:已知观测序列,求解最优的HMM参数,使得产生该观测序列的可能性最大;
3) 估计问题:已知HMM和观测序列,求解在所有可能的隐藏状态序列下,产生给定观测序列的概率.
-
本文结合HMM和油藏背景,通过塔河油田区域真实的生产井历史产油数值和产气数值,研发基于HMM的油藏生产井产油趋势预测方法.
图 1是基于HMM的油藏生产井产油趋势预测方法整体流程,整个预测模型的输入数据是塔河区域油藏生产井的历史产油数据和产气数据,模型首先对输入数据进行预处理,以确定最终HMM的输入信息,预处理过程包括确定状态值集合、确定观测值集合、生成观测序列和生成状态序列4个步骤.经过预处理产生的观测序列集合和状态序列集合作为HMM的输入数据,该输入数据被分为训练数据和测试数据两部分,其中训练数据用来训练HMM,生成状态转移概率矩阵和观测值概率矩阵,而测试数据集用于测试训练出来的HMM的精度.基于训练好的HMM可以用来对油藏生产未来一段时间的产油量趋势进行预测.
由于油藏生产是一个持续的过程,生产井每天都会得到新的产出数值,将油藏生产井每日最新产生的产油值和产气值用来更新数据集,重新训练HMM,可以保证HMM的预测精度.
-
为了对产油历史数据和产气历史数据进行预处理以生成HMM中的观测值序列,本文引入生产指标的概念对历史产油数据和产气数据进行离散化处理.生产指标指在油藏生产过程中,每口油藏生产井在不同产出(油、汽、水)情况下预期的日产量.产油生产指标指油藏生产井每日产油的预期值,产气生产指标指油藏生产井每日产气的预期值,产水生产指标指油藏生产井每日产水的预期值.若油藏生产井某一日产油量大于或等于产油生产指标,说明该油藏生产井当天产油量达标;反之,若油藏生产井某一日产油量小于产油生产指标,说明该油藏生产井当天产油量未达标,产出不足.生产指标可以衡量油藏生产井每日的产出(油、气、水)效率.一般情况下,生产指标可由油藏开采部门结合每口油藏生产井的实际情况确定.为将人工干预的影响降低到最小,本文采用油藏生产井产出历史数据的平均值作为不同产出的生产指标.
通过引入产油生产指标和产气生产指标,按照算法1的流程,可以将油藏生产井历史产油数据和历史产气数据转换为历史产油标记序列和历史产气标记序列,从而生成HMM中的观测值序列.
算法1 标记序列产生算法
输入:油藏生产井历史产油数据序列OilD,油藏生产井历史产气数据序列GasD,其中D为天数(即数据大小)
输出:油藏生产井历史产油标记序列Label_OilD和历史产气标记序列Label_GasD
开始:
/*得到油藏生产井历史产油数据的平均值和历史产气数据的平均值*/
avgOil=sum(OilD)/D
avgGas=sum(GasD)/D
FOR i=1→D
IF Oili≤avgOil
Label_Oili=0
ELSE Label_Oili=1
END
IF Gasi≤avgGas
Label_Gasi=0
ELSE Label_Gasi=1
END
END
通过算法1得到油藏生产井历史产油标记序列Label_OilD={Lo1,Lo2,…,Loi,…,LoD},1≤i≤D,Loi∈{0,1}和历史产气标记序列Label_GasD={Lg1,Lg2,…,Lgi,…,LgD},1≤i≤D,Lgi∈{0,1}.油藏生产井每日产油标记和每日产气标记可形成一个二元组OG=〈Loi,Lgi〉,1≤i≤D,将该二元组作为HMM中的一个观测点的值,那么可以得到HMM中的有限观测值集合P={〈0,0〉,〈0,1〉,〈1,0〉,〈1,1〉}.
图 2是基于油藏生产井历史产油数据和历史产气数据生成观测序列的一个示例.
-
本文引入3个状态值来描述油藏生产井在一段时间内(3 d,5 d等)的变化趋势,分别为:上升、下降和震荡. 图 3以1 d作为一个观测点,7 d作为一个观测时间段,描述了在观测时间段内油藏生产井产油的变化趋势.当油藏生产井的状态值为上升时,表示油藏生产井在观测时间段内的产油变化趋势呈现上升趋势;当油藏生产井的状态值为下降时,表示油藏生产井在观测时间段内的产油变化趋势呈现下降趋势;当油藏生产井的状态值为震荡时,表示油藏生产井在观测时间段内的产油变化较平稳,不明显.
在得到指定的一段观测时间内的油藏生产井产油数据后,根据算法2中的算法流程可以得到部分观测点油藏生产井未来的产油趋势.其中ε为设定的阈值,其值为在观测时间段内最后一个观测点所观测到的油藏生产井产油数值与第一个观测点所观测到的油藏生产井产油数值的差.
从算法2可以看出,在状态序列产生的过程中,我们将一天作为一个观测点,每一个观测点的状态值描述了该点后(即该天之后)油藏生产井的产油趋势,该观测点的状态值是根据这一天后面T天的数据计算得出的,因此,对于一个给定的油藏生产井历史产油数据集,其观测点的状态值无法计算,所以油藏生产井历史产油数据集最后T个没有状态值.在实验过程中,为了消除该问题的影响,可以选取全部油藏生产井历史产油数据集中的一部分作为实验数据集(例如,选取长度为1 000的总数据集中的前900 d的数据作为实验数据).
算法2 状态序列产生算法
输入:油藏生产井历史产油数据序列OilD,D为天数(即数据大小),阈值为ε,观测时段为T
输出:油藏生产井历史状态State_OilD-T
开始:
FOR i=1→(D-T)
firstValue=Oili+1
lastValue=Oili+2
IF (lastValue-firstValue)≥0
IF (lastValue-firstValue)≥ε
State_Oili=上升
ELSE State_Oili=震荡
END
ELSE IF |lastValue-firstValue|≥ε
State_Oili=下降
ELSE State_Oili=震荡
END
END
在本文提出的HMM中,状态值有限集合Q={上升,下降,震荡},为方便实验,在实验过程中,可用1,2,3这3个数值分别表示上升、下降和震荡.
以图 2中的油藏生产井历史产油数据为例,描述如何基于算法2生成状态序列集.现有的油藏生产井历史产油数据集Oil8={28.6,29.3,30.7,30.7,25.7,25.2,27.4,27.6},假设观测时段T=3,阈值ε=1,那么根据算法2的流程可得到该历史产油数据集产油趋势序列State_Oil={上升,下降,下降,上升,上升},用1,2,3这3个数值分别表示上升、下降和震荡,那么得到的状态序列为State_Oil={1,2,2,1,1}.
2.1. 生成观测值序列
2.2. 生成状态值序列
-
本实验硬件环境为:Inter(R) Core(TM) i7-6500U CPU @ 2.50 GHz,8 GB内存.
本实验软件环境为:Windows Ultimate 7 64 bit,Matlab R2015b,代码使用Matlab编写.
本实验使用的数据集为塔河油田5口生产井T705、T706、T801、T808和T702B的历史生产数据,数据集详细信息如图 4所示.
本实验中,观测时段设为3 d,即每一个观测点的未来状态值由该观测点后续2个观测点确定;预测时段设为7 d,即建立好的HMM可以预测未来7 d油藏生产井的产油趋势;阈值,即油藏生产井在观测时段前后的产油值差值.
-
图 5展示了本文提出的基于HMM的油藏生产井产油趋势预测方法在不同数据集上的结果.
对于不同油井的历史数据,将其分为训练数据和预测数据,基于每口井的训练数据集训练出来的HMM输入预测集进行预测,预测结果与真实结果进行比较其准确度也高达71.42%(即7个观测点的状态值预测中,准确的有5个)以上. 图 5展示了每个数据集的训练数据总量和训练数据的天数均不同,但是所得到的预测精度却大致相同,由此可以看出HMM预测的准确度跟上一个状态有关系而跟状态的总数无关,能够较好地拟合油藏历史数据并进行预测.
图 6的时间比较展示了5个不同的数据集训练数据以及预测数据所消耗的总时间,在同一台机器上进行了这5组实验,对于不同的数据集,平均运行时间是42.17 ms.用时最长的是T705和T706数据集,用时45.58 ms.用时最短的是T702B数据集,仅用34.16 ms. HMM模型拥有高效的训练效率的原因是模型是基于隐马尔可夫假设的,即当前时刻点的状态仅与上一个时刻点的状态有关.这一假设在减少了预测时计算量的同时,也减轻了2个概率矩阵的构建和计算难度.由图 6结合图 5不同数据集的训练数据总量和训练数据天数比较可以看出,训练数据和预测数据的总时间与训练数据总量以及训练数据天数没有明显关系,因为训练数据和预测数据的总时间最少的数据集T705所使用的数据总量和训练数据天数并不是最少的,而且训练数据和预测数据总时间相同的2个数据集T706和T801所使用的数据总量和训练数据天数却有着近两倍以上的差距.但总体来说,采用隐马尔可夫进行预测消耗的时间很短,在处理流数据时,可以进行实时处理并且保持平均较高的正确率.
图 7展示了T702B训练天数与训练精度之间的关系,选取了间隔为50 d共计20组的训练数据,预测数据为固定的7 d,由图 7可以看出,在预测数据不变的情况下,训练精度随着训练天数增加的总体变化趋势是先增加再减少,由此可以看出针对T702B这口井,HMM在400~650 d这个区间内训练效果相对较好,也就是拟合程度比较高,当训练天数低于该区间时,拟合程度不够;当训练天数高于该区间时,会导致训练的HMM预测模型过于贴近于训练集的变化规律,导致模型过拟合,使得将训练好的模型应用在测试数据集时出现预测精度下降的现象.因此选取合适的训练天数是非常有必要的,对训练精度有比较大的影响.
3.1. 实验环境
3.2. 实验结果
-
本文提出了一种基于HMM的油藏生产井产油趋势预测算法.通过数据预处理、模型训练建立起基于隐马尔可夫的油藏生产预测模型,用来预测油藏生产井未来一周的产油趋势,为油藏生产开发提供指导.实验结果表明,本文提出的基于HMM的油藏生产井产油趋势预测算法,其预测精度最高可达85.71%,并且预测消耗时间仅为42.17 ms,证明了本文所提出算法的有效性.