郎勁 唐立新
石油是不可再生資源,是關(guān)系到國(guó)家安全的重要戰(zhàn)略資源.隨著近年來(lái)對(duì)石油的連續(xù)開(kāi)采,部分油井已進(jìn)入開(kāi)采的中后期,油層出現(xiàn)明顯的供液不足,許多低產(chǎn)油井仍在繼續(xù)采油,表現(xiàn)出低滲、低壓、低產(chǎn)、低效的特征.而石油的開(kāi)采所用的油井設(shè)備是非常耗電的,油井電費(fèi)支出占原油生產(chǎn)成本的20%~40%.因此,為了避免能源浪費(fèi)和設(shè)備的損耗而采用間抽的方法進(jìn)行采油[1].油井間抽就是當(dāng)油井出現(xiàn)供液量不足或者空抽時(shí),關(guān)閉油井,等待一段時(shí)間進(jìn)行蓄油.當(dāng)動(dòng)液面達(dá)到抽油壓力的最低要求時(shí),再啟動(dòng)油井繼續(xù)采油.對(duì)油井進(jìn)行間抽調(diào)度,能夠提高油田的采油率,增加電機(jī)的運(yùn)行壽命和工作效率,降低能耗和生產(chǎn)成本,對(duì)實(shí)現(xiàn)油田的精細(xì)化管理具有重要的意義.
生產(chǎn)實(shí)際中手工作業(yè)難以實(shí)現(xiàn)精細(xì)化的生產(chǎn).因此如何科學(xué)制定出合理的間抽調(diào)度方案,以達(dá)到降低能耗、提高油井采油率,是目前開(kāi)采中后期迫切需要解決的問(wèn)題,該問(wèn)題已經(jīng)引起了國(guó)內(nèi)外專家的廣泛關(guān)注.據(jù)作者目前所知,關(guān)于油井間抽調(diào)度問(wèn)題的研究主要有:Aronofsky等[2]研究了石油開(kāi)采的經(jīng)濟(jì)調(diào)度問(wèn)題,針對(duì)多個(gè)油藏和多個(gè)油井系統(tǒng),考慮井底壓力對(duì)開(kāi)采影響因素,建立了線性規(guī)劃模型.Carvalho等[3]考慮油藏地質(zhì)特性,研究了多時(shí)段的油井生產(chǎn)調(diào)度問(wèn)題,以最小化生產(chǎn)運(yùn)行成本為目標(biāo),決策油井多時(shí)段的啟停狀態(tài)和采油量.Carvalho等[4]針對(duì)海上油田的開(kāi)采提出了混合整數(shù)線性規(guī)劃模型,決策油井平臺(tái)的布局及油井的采油量,保證達(dá)到采油量的需求.Kosmidis等[5]考慮油藏的非線性特性、油藏的多相流和地面設(shè)施的約束,建立了混合整數(shù)規(guī)劃模型,以確定油井的開(kāi)關(guān)機(jī)狀態(tài)、油井的采油量和氣舉井的位置.Bohannon[6]針對(duì)油田設(shè)計(jì)和生產(chǎn)計(jì)劃問(wèn)題建立了混合整數(shù)規(guī)劃模型.Iyer等[7]針對(duì)海上油田的生產(chǎn)計(jì)劃進(jìn)行研究,考慮了平臺(tái)和油井的生產(chǎn)能力、每個(gè)時(shí)段油井的采油量和開(kāi)采油藏的選擇等生產(chǎn)工藝約束,以一般的最優(yōu)性優(yōu)化決策指標(biāo)為目標(biāo),建立了多階段混合線性規(guī)劃模型,并設(shè)計(jì)了分支定界算法進(jìn)行求解.Ray等[8]以油田開(kāi)采中氣舉采油的方式為背景,確定注入油井的氣體的量,保證油藏的最大化的采油量.考慮問(wèn)題的復(fù)雜性和難度,設(shè)計(jì)了進(jìn)化算法進(jìn)行求解.Gunnerud等[9]針對(duì)油田實(shí)時(shí)生產(chǎn)優(yōu)化問(wèn)題,利用分段線性的方法把問(wèn)題進(jìn)行線性化,建立了混合整數(shù)線性規(guī)劃模型,并利用拉格朗日松弛算法和Dantzig-Wolfe相結(jié)合的算法進(jìn)行求解.de Souza等[10]針對(duì)連續(xù)開(kāi)采氣舉采油的計(jì)劃調(diào)度問(wèn)題進(jìn)行研究,以壓縮機(jī)年均成本、燃料等生產(chǎn)運(yùn)行成本為目標(biāo),建立了非線性數(shù)學(xué)規(guī)劃模型.Gunnerud等[11]針對(duì)大規(guī)模油田生產(chǎn)網(wǎng)絡(luò)優(yōu)化系統(tǒng)進(jìn)行研究,提出了基于列生成的分支定價(jià)算法獲得問(wèn)題的最優(yōu)解.Tavallali[12]等針對(duì)油田油井的布局及油井生產(chǎn)計(jì)劃問(wèn)題進(jìn)行研究,并利用更加縝密的流體動(dòng)力學(xué)的方法對(duì)地下情況進(jìn)行分析,可以不需要預(yù)先固定油井的位置進(jìn)行優(yōu)化.Knudsen等[13]針對(duì)頁(yè)巖氣中的多個(gè)油井系統(tǒng)為背景,確定油井的關(guān)機(jī)次數(shù).針對(duì)問(wèn)題的特征,設(shè)計(jì)了拉格朗日松弛算法進(jìn)行求解.劉安枕[14]提出了基于優(yōu)化算法的油井間抽調(diào)度,目標(biāo)是在滿足采油需求的同時(shí),油井停機(jī)時(shí)間最長(zhǎng),開(kāi)機(jī)時(shí)間最短.李軍亮等[15]通過(guò)觀測(cè)關(guān)井階段和開(kāi)井階段的液面高度變化,然后采用GM(1,1)模型建模.根據(jù)灰色系統(tǒng)理論中的“新信息優(yōu)先”原理,實(shí)現(xiàn)了模型的實(shí)時(shí)調(diào)整及間抽周期的實(shí)時(shí)預(yù)測(cè).
本文的井網(wǎng)機(jī)組間抽調(diào)度問(wèn)題與已有的研究問(wèn)題相比具有如下特點(diǎn):1)問(wèn)題本身在考慮傳統(tǒng)油藏儲(chǔ)量的同時(shí),以批的方式對(duì)油井進(jìn)行調(diào)度.2)考慮了油井運(yùn)行穩(wěn)定性和降低維修率要求,增加了運(yùn)行過(guò)程中的爬坡約束和最小開(kāi)關(guān)機(jī)時(shí)間約束,使油井前后時(shí)段的抽油量圓滑過(guò)渡,無(wú)大波動(dòng)的沖擊,有利于增加油井的使用壽命.3)在求解方法方面,本文構(gòu)造了拉格朗日松弛算法進(jìn)行求解.針對(duì)分解后的帶有爬坡約束的單機(jī)組子問(wèn)題,開(kāi)發(fā)了動(dòng)態(tài)規(guī)劃方法進(jìn)行求解,并進(jìn)一步提出了用特征點(diǎn)代表同一階段具有相同性質(zhì)節(jié)點(diǎn)群的狀態(tài)空間約簡(jiǎn)策略,使動(dòng)態(tài)規(guī)劃搜索節(jié)點(diǎn)的復(fù)雜度從O(n4)降到O(n2),顯著提高算法的搜索效率.
一個(gè)油田是由很多油藏組成的,一個(gè)油藏里面又包含了很多油井,油井之間有的是在一個(gè)油層進(jìn)行開(kāi)采,有的是連接了相同的集輸管道不同油層進(jìn)行開(kāi)采.油井的間抽調(diào)度跟油井井底和油藏的壓差值密切相關(guān).當(dāng)油井關(guān)機(jī)后,井底的動(dòng)液面會(huì)不斷上升,即井底的流動(dòng)壓力不斷恢復(fù),當(dāng)恢復(fù)到最低采油需求的值時(shí),可以開(kāi)機(jī)進(jìn)行采油.當(dāng)油井開(kāi)機(jī)后,井底的壓力隨著石油的產(chǎn)出,井底的動(dòng)液面不斷降低,即井底的流動(dòng)壓力不斷減少,當(dāng)油井井底壓力比采油要求壓力值低時(shí),需要對(duì)油井進(jìn)行停抽.
油井的開(kāi)關(guān)機(jī)狀態(tài)雖然在設(shè)計(jì)上是可以隨時(shí)切換的,但是在實(shí)際生產(chǎn)運(yùn)行中,如果油井采油量在相鄰時(shí)段上升或者下降的速率過(guò)快,或頻繁對(duì)油井進(jìn)行啟停操作,將會(huì)增加維修成本,影響油井電機(jī)的使用壽命.因此在油井運(yùn)行時(shí)考慮了爬坡約束,即油井在單位時(shí)間采油量允許上升和下降的速率.在油井間抽調(diào)度中,同時(shí)考慮了油井開(kāi)關(guān)機(jī)持續(xù)時(shí)間的限制約束.即如果油井開(kāi)機(jī),則必須開(kāi)機(jī)一定的小時(shí)數(shù),才可以允許關(guān)機(jī).同樣,如果油井關(guān)機(jī),則必須關(guān)機(jī)一定的小時(shí)數(shù),才可以允許開(kāi)機(jī),以提高整機(jī)壽命,尤其是油泵的壽命,減少機(jī)械故障,提高可靠性.
針對(duì)大規(guī)模油井調(diào)度問(wèn)題,本文提出了批建模策略.批建模的思想主要是根據(jù)油井間物理位置分布的相近性以及連通性,將相同集輸管道的、型號(hào)相同的油井進(jìn)行聚合組批.圖1為某油田的一個(gè)油藏示意圖,其中,每一個(gè)圓代表一個(gè)油井.根據(jù)批建模策略,具有相同顏色的油井群可以聚合成一個(gè)批.相應(yīng)的油藏總體采油量的需求轉(zhuǎn)化為對(duì)井批采油量的需求.
圖1 油井批聚合示意圖Fig.1 The process of well divided into batching
通過(guò)分析批模型參數(shù)與單機(jī)模型參數(shù)的關(guān)系,批劃分后提出了參數(shù)聚合方法.設(shè)批聚合前油井w最大最小采油量為:;批聚合后油井i的最大、最小采油量為:.批聚合前油井w最大、最小允許壓力值;批聚合后油井i最大、最小允許壓力值.批聚合前油井w在t時(shí)刻開(kāi)始、結(jié)束時(shí)油井井底壓力為:;批聚合后油井i在t時(shí)刻開(kāi)始、結(jié)束時(shí)油井井底壓力為:表示批聚合前油井w的運(yùn)行費(fèi)用系數(shù);γi表示批聚合后油井i運(yùn)行費(fèi)用系數(shù).|?k|表示第k批的油井的個(gè)數(shù),?1∪?2∪···∪?k=?,?i∩?j= Φ,i=1,2,···,K,j=1,2,···,K,.其參數(shù)聚合規(guī)則如下:
3)油井其他參數(shù)值聚合規(guī)則為:聚合后的參數(shù)為任取批聚合前批內(nèi)油井的參數(shù)值.如:第k個(gè)批內(nèi),運(yùn)行費(fèi)用系數(shù)聚合規(guī)則為:γi=w,?w∈?k.
油田機(jī)組間抽批調(diào)度問(wèn)題描述如下:給定一個(gè)油藏,油藏內(nèi)有n個(gè)油井,把n個(gè)具有相同集輸管道且型號(hào)相同的油井歸結(jié)為k個(gè)批.以批建模策略和方法,滿足油田采油需求和油井爬坡約束、最小開(kāi)關(guān)機(jī)時(shí)間約束、采油量限制等約束,確定未來(lái)一定期間內(nèi)油井各時(shí)刻的啟停狀態(tài)及開(kāi)機(jī)運(yùn)行時(shí)的采油量以達(dá)到最小化采油成本的目的.
根據(jù)上述參數(shù)聚合方法,直接利用批聚合后的模型參數(shù)和決策變量建立油井間抽調(diào)度批模型數(shù)學(xué)規(guī)劃模型.
模型參數(shù):
N:油井總數(shù);
?:油井集合,? ={1,2,···,N};
T:調(diào)度周期;
K:油井批的總數(shù);
Dt:油井在t時(shí)刻采油量的總需求;
Dkt:第k批油井在t時(shí)刻產(chǎn)油量的總需求,
?i:油井i在運(yùn)行時(shí)相鄰兩個(gè)連續(xù)時(shí)間段內(nèi)最大允許采油量;
URi:油井i從關(guān)機(jī)到開(kāi)機(jī)時(shí),允許最大的采油量;
DRi:油井i從開(kāi)機(jī)到關(guān)機(jī)時(shí),允許最大的采油量;
L:時(shí)間調(diào)度周期;
ui0:油井i的初始開(kāi)關(guān)機(jī)狀態(tài);
Si:油井i的啟動(dòng)費(fèi)用.
決策變量:
uit:油井i在t時(shí)刻的啟停狀態(tài),1為開(kāi)機(jī)狀態(tài),0為停抽狀態(tài);
xit:油井i在t時(shí)刻的采油量.
建立的批聚合后的數(shù)學(xué)規(guī)劃模型如下:
約束(2)表示每個(gè)批的需求約束.要求每個(gè)批的油井采油量達(dá)到各自的需求量.約束(3)表示油井最小開(kāi)關(guān)機(jī)的啟停約束.當(dāng)油井開(kāi)機(jī)時(shí),必須持續(xù)運(yùn)行一段時(shí)間才允許關(guān)機(jī).同樣,當(dāng)油井關(guān)機(jī)時(shí),必須持續(xù)關(guān)機(jī)一段時(shí)間才允許開(kāi)機(jī).即,油井開(kāi)機(jī)運(yùn)行時(shí),uit=1.當(dāng)油井前一時(shí)刻開(kāi)機(jī)ui,t?1=1時(shí),如果油井持續(xù)開(kāi)機(jī)時(shí)間小于油井最小開(kāi)機(jī)時(shí)間,則油井當(dāng)前時(shí)刻必須保持開(kāi)機(jī).即:當(dāng)時(shí),uit=1,滿足最小開(kāi)機(jī)時(shí)間約束的要求;如果大于等于油井最小開(kāi)機(jī)時(shí)間,則當(dāng)前時(shí)刻油井可開(kāi)機(jī)也可以停抽.即:時(shí),uit=1或者uit=0都可.同理,當(dāng)油井停抽時(shí),uit=0.當(dāng)油井前一時(shí)刻ui,t?1=0時(shí),如果油井持續(xù)關(guān)機(jī)時(shí)間小于油井的最小關(guān)機(jī)時(shí)間,則油井必須保持停抽狀態(tài).即:當(dāng)時(shí),uit=0,滿足最小關(guān)機(jī)約束的要求.當(dāng)油井的持續(xù)關(guān)機(jī)時(shí)間大于等于最小關(guān)機(jī)時(shí)間要求時(shí),油井當(dāng)前狀態(tài)可以停抽也可開(kāi)機(jī).即:當(dāng)時(shí),uit=1或者uit=0都可.約束(4)表示油井的爬坡約束,包括油井運(yùn)行時(shí)相鄰兩個(gè)時(shí)刻采油量增加或者減少的爬坡約束,油井下一時(shí)刻開(kāi)機(jī)或者關(guān)機(jī)時(shí)采油量的爬坡約束.約束(5)表示油井產(chǎn)油量輸出的上下限的限制.約束(6)為常規(guī)油井生產(chǎn)調(diào)度的壓力約束,即油井運(yùn)行和停抽時(shí),井底壓力的變化.當(dāng)油井處于運(yùn)行狀態(tài)時(shí),油井的壓力逐漸減小.當(dāng)油井處于停抽時(shí),油井的壓力逐漸增大.約束(7)為變量的取值范圍.
建立的數(shù)學(xué)規(guī)劃模型是具有整數(shù)變量和連續(xù)變量的混合整數(shù)規(guī)劃模型,本身是一個(gè)非凸的、離散的優(yōu)化問(wèn)題,屬于NP難問(wèn)題,大規(guī)模求解時(shí)在合理的時(shí)間內(nèi)很難獲得最優(yōu)解,因此尋找該問(wèn)題的近優(yōu)解成為主要研究方式.
根據(jù)模型的結(jié)構(gòu)特點(diǎn),本文設(shè)計(jì)了拉格朗日松弛方法(Lagrangian relaxation,LR)求解該問(wèn)題.拉格朗日松弛算法是求解混合整數(shù)規(guī)劃問(wèn)題的一種有效的最優(yōu)化算法[16?17].拉格朗日松弛算法的主要思想如下:通過(guò)拉格朗日乘子將模型中的耦合約束松弛到目標(biāo)函數(shù)中,得到原問(wèn)題的松弛問(wèn)題,對(duì)于給定的一組乘子,松弛問(wèn)題可以分解為單個(gè)機(jī)組的子問(wèn)題,得到的對(duì)偶函數(shù)的目標(biāo)值是原問(wèn)題的下界.同時(shí),構(gòu)造啟發(fā)式算法將對(duì)偶問(wèn)題得到的解轉(zhuǎn)換成原問(wèn)題的可行解,可行解的目標(biāo)值是原問(wèn)題的上界.解的質(zhì)量通過(guò)上下界之間的對(duì)偶間隙來(lái)衡量.
本文之所以采用基于變量分離技術(shù)的拉格朗日松弛算法求解該模型是因?yàn)槟P屠飰毫s束的特殊性,每一時(shí)刻的壓力值都受前一時(shí)刻壓力值的影響,由于對(duì)偶問(wèn)題需要用動(dòng)態(tài)規(guī)劃求解,而動(dòng)態(tài)規(guī)劃要求狀態(tài)具有無(wú)后效性,即如果給定某一階段的狀態(tài),則在這一階段以后過(guò)程的發(fā)展不受這階段以前各段狀態(tài)的影響.因此,本文利用分離變量技術(shù)解決壓力約束無(wú)法采用動(dòng)態(tài)規(guī)劃方法求解子問(wèn)題的難題.
具體的分離方法為:引入一個(gè)新的變量yit,令xit=yit,將此等式約束引入模型.相當(dāng)于在模型里加入了一個(gè)約束式.對(duì)應(yīng)地,變量xit在目標(biāo)函數(shù)中分解為α·xit+β·yit,在部分約束中被變量yit替代.令α+β=1,那么原問(wèn)題可以重新表述如下:
滿足約束(2)~(7)和
通過(guò)乘子{πit},{λit}(無(wú)符號(hào)限制)把耦合約束(2)、(9)引入到目標(biāo)函數(shù)中,得到松弛問(wèn)題LR.
LR:L(λ)=minZLR,其中
滿足約束(3)~(7).
對(duì)于給定的乘子{πit},{λit}可以把松弛問(wèn)題(LR)分解為兩個(gè)獨(dú)立的子問(wèn)題,即LR1:
滿足約束(3)~(5)和(7).
滿足約束(6).
拉格朗日對(duì)偶問(wèn)題(Lagrange duality,LD)為:MaxL(λ),其中
滿足約束(3)~(7).
3.2.1 求解帶有爬坡約束的子問(wèn)題LR1
LR1子問(wèn)題是帶有爬坡約束混合整數(shù)規(guī)劃問(wèn)題,既有離散變量又有連續(xù)變量約束,而且相鄰兩時(shí)段的發(fā)電量是耦合的,xit受到區(qū)間[xi,t+1??i,xi,t+1+?i]爬坡速率的約束不能隨意變化.如果用常規(guī)的動(dòng)態(tài)規(guī)劃進(jìn)行求解,得到的解不是問(wèn)題的最優(yōu)解.因此,本文提出一種新型的動(dòng)態(tài)規(guī)劃方法,用于求得該問(wèn)題的最優(yōu)解.
在新的動(dòng)態(tài)規(guī)劃轉(zhuǎn)移圖G(如圖3)中,起點(diǎn)為s,終點(diǎn)為d.每個(gè)節(jié)點(diǎn)代表了一個(gè)狀態(tài),兩個(gè)節(jié)點(diǎn)之間的連線表示一個(gè)可能的狀態(tài)轉(zhuǎn)移.每個(gè)階段的節(jié)點(diǎn)為 (τh,τk),τh,τk∈T且τk≥τh, 表示油井開(kāi)機(jī)的起止時(shí)間.考慮最小開(kāi)機(jī)時(shí)間約束,所有的對(duì)應(yīng)的都是不可行的狀態(tài),因此在動(dòng)態(tài)規(guī)劃中不考慮此類節(jié)點(diǎn).對(duì)于每一個(gè)節(jié)點(diǎn),τh被稱作前端節(jié)點(diǎn),τk稱作是后端節(jié)點(diǎn).
在狀態(tài)轉(zhuǎn)移圖G中,是在假設(shè)所有狀態(tài)轉(zhuǎn)移都滿足了油井井底壓力的約束前提下進(jìn)行的.前后連接的節(jié)點(diǎn) (τh,τk) 和 (τr,τq) 表示油井在時(shí)刻τk+1關(guān)機(jī),在τr時(shí)刻又開(kāi)機(jī),其中,滿足最小關(guān)機(jī)約束.油井在開(kāi)關(guān)機(jī)時(shí)的運(yùn)行費(fèi)用和啟動(dòng)費(fèi)用與節(jié)點(diǎn)及邊有關(guān).每一個(gè)邊的轉(zhuǎn)移費(fèi)用都為油井的啟動(dòng)費(fèi)用.從起點(diǎn)s到所有(τh,τk)節(jié)點(diǎn)的狀態(tài)轉(zhuǎn)移,代表了油井的初始狀態(tài)和下一階段狀態(tài)的關(guān)系.每條從s到d的路徑表示了單機(jī)組子問(wèn)題的一個(gè)可行解.對(duì)于每一個(gè)階段的節(jié)點(diǎn)的開(kāi)機(jī)運(yùn)行費(fèi)用和油井的xit相關(guān).對(duì)于每一個(gè)(τh,τk)節(jié)點(diǎn),其轉(zhuǎn)移費(fèi)用可以用帶有爬坡約束的經(jīng)濟(jì)分配問(wèn)題進(jìn)行求解.記為問(wèn)題DP1:
s.t.約束(3)~(5)和(7).
轉(zhuǎn)化為線性規(guī)劃問(wèn)題后可以用CPLEX進(jìn)行求解.
一般求解該類問(wèn)題的動(dòng)態(tài)規(guī)劃都是以時(shí)間t作為階段,但是新的動(dòng)態(tài)規(guī)劃節(jié)點(diǎn)是開(kāi)機(jī)起止時(shí)間段,因此不能以時(shí)間t作為階段了.本文根據(jù)油井的初始狀態(tài)和最小開(kāi)關(guān)機(jī)時(shí)間確定階段.其規(guī)則如下:已知,設(shè)油井的階段數(shù)為S,第一個(gè)階段中τh1和τk1值最小的節(jié)點(diǎn)為(τh1,τk1),第二階段τh2和τk2值最小的節(jié)點(diǎn)為(τh2,τk2),n個(gè)階段后的τhn和τkn值最小的節(jié)點(diǎn)為 (τhn,τkn).則:
1)如果τhn≤T,τknT,則階段S=n.
2)如果τk,n?1≤T,τhnT,則階段S=n?1.
(τhn,τkn)和T之間的關(guān)系如圖2所示.
圖2 (τrn,τqn)和 T的關(guān)系圖Fig.2 The diagram for the relationship between(τrn,τqn)and T
狀態(tài)轉(zhuǎn)移圖G中,節(jié)點(diǎn)的復(fù)雜性為O(n2),節(jié)點(diǎn)之間弧的復(fù)雜性為O(n4).
從狀態(tài)空間圖G中可以觀測(cè)到如下的特征:
1)對(duì)于每個(gè)節(jié)點(diǎn)(τh,τk),其τk值相同的節(jié)點(diǎn)在下一個(gè)階段連接的節(jié)點(diǎn)是相同的.
2)兩個(gè)節(jié)點(diǎn) (τh,τk)和 (τr,τq)之間的轉(zhuǎn)移費(fèi)用是相同的,都等于油井的啟動(dòng)費(fèi)用.
3)對(duì)于每一個(gè)階段具有相同τk值的節(jié)點(diǎn),我們用k代表其費(fèi)用最小的節(jié)點(diǎn),這里我們把k稱之為具有相同τk值的費(fèi)用最小的節(jié)點(diǎn)的特征點(diǎn).這樣可以避免轉(zhuǎn)移過(guò)程中遍歷所有點(diǎn).
用特征點(diǎn)代替節(jié)點(diǎn)的新的狀態(tài)轉(zhuǎn)移圖定義為圖V,如圖3所示.圖V和原來(lái)的狀態(tài)空間轉(zhuǎn)移圖G是等價(jià)的.證明如下:
性質(zhì)1.圖G和圖V是等價(jià)的證明:設(shè)階段為s,Ds(hs,ks)表示在s階段到狀態(tài)(hs,ks)的允許決策集合.則圖G的狀態(tài)轉(zhuǎn)移方程為:fs+1(hs+1,ks+1)=min(hs,ks)∈Ds(hs,ks){ds+fs(us(hs,ks))}.
因?yàn)楣?jié)點(diǎn)間的轉(zhuǎn)移費(fèi)用是相同的,得到:fs+1(ks+1)=minks∈Ds(ks){ds+fs(us(ks))}, 可簡(jiǎn)化為fs+1(ks+1)=minks∈Ds(ks){fs(us(ks))}.因?yàn)閳DV中的節(jié)點(diǎn)(特征點(diǎn))費(fèi)用是圖G中相同后端節(jié)點(diǎn)k的費(fèi)用值的最小值,即:
因?yàn)橥浑A段,特征點(diǎn)k轉(zhuǎn)移到下一個(gè)階段的節(jié)點(diǎn)相同,相鄰階段的狀態(tài)轉(zhuǎn)移費(fèi)用又相等,因此,只需要先比較特征點(diǎn)k的費(fèi)用值即可,則得到如下等式:
因此,當(dāng) 1≤ks≤T時(shí),fs+1(hs+1,ks+1)=fs+1(ks+1).即圖G和圖V是等價(jià)的.
圖G中節(jié)點(diǎn)的復(fù)雜性為O(n2),圖V中節(jié)點(diǎn)的復(fù)雜性為O(n),節(jié)點(diǎn)之間弧的復(fù)雜性為O(n2).相對(duì)于原來(lái)的狀態(tài)轉(zhuǎn)移圖G,節(jié)點(diǎn)的復(fù)雜性從O(n2)降到O(n),弧的復(fù)雜性從O(n4)降到O(n2).即使對(duì)于小規(guī)模問(wèn)題,這樣的轉(zhuǎn)換也是一項(xiàng)非常重要的工作,不僅簡(jiǎn)化了狀態(tài)轉(zhuǎn)移圖,也大大減少了需要乘子迭代的拉格朗日松弛算法的求解時(shí)間.
上述方法舉例如下:
以初始狀態(tài)是關(guān)機(jī)3小時(shí),最小開(kāi)關(guān)機(jī)時(shí)間都為2小時(shí),調(diào)度周期T為8小時(shí)的油井為例,其狀態(tài)轉(zhuǎn)移如圖3所示.從圖3中可以看出并不是所有的節(jié)點(diǎn)都會(huì)轉(zhuǎn)移到下一個(gè)階段,隨著階段的增加,節(jié)點(diǎn)是逐漸減少的.在同一階段后端時(shí)刻相同的節(jié)點(diǎn)有很多,比如第一階段后端時(shí)刻為3的節(jié)點(diǎn)有(1,3)、(2,3),而這兩個(gè)節(jié)點(diǎn)對(duì)應(yīng)第二階段相同的節(jié)點(diǎn)(6,7)、(6,8)、(7,8)和(8,8).利用動(dòng)態(tài)規(guī)劃方法求解時(shí),一般選擇費(fèi)用最小的點(diǎn)作為此階段的決策點(diǎn).由于各個(gè)階段狀態(tài)轉(zhuǎn)移的費(fèi)用是相同的,因此可以只比較(1,3)、(2,3)費(fèi)用值即可,其費(fèi)用最小的節(jié)點(diǎn)用相同的特征點(diǎn)3來(lái)表示.同理,在第二階段,與特征點(diǎn)3相關(guān)聯(lián)的特征點(diǎn)為7或8.
圖3 動(dòng)態(tài)規(guī)劃狀態(tài)轉(zhuǎn)移圖Fig.3 Dynamic programming state transition diagram
以此類推,把各個(gè)階段具有相同τk的節(jié)點(diǎn)都用特征點(diǎn)k表示,就得到新的動(dòng)態(tài)規(guī)劃轉(zhuǎn)移圖,如圖3所示.圖3中,每一個(gè)k(1 3.2.2 求解壓力子問(wèn)題LR2 壓力子問(wèn)題有兩種處理方法,第一種是直接用CPLEX求解,第二種是根據(jù)壓力約束的特點(diǎn)進(jìn)行求解.下面介紹第二種方法: 最優(yōu)解性:定義E=(γiβ+λit)yit 當(dāng)λit≥0時(shí),yit=0,uit=0,E=0. 當(dāng)λit<0時(shí),yit=,uit=1. 因可直接觀測(cè)出,故證明略. 由于壓力子問(wèn)題前后兩個(gè)狀態(tài)的采油量直接跟壓力相關(guān),因此無(wú)需用標(biāo)準(zhǔn)的動(dòng)態(tài)規(guī)劃方法進(jìn)行求解.當(dāng)嘗試用CPLEX優(yōu)化軟件求解該子問(wèn)題時(shí),即使是小規(guī)模問(wèn)題,也需要消耗大量的時(shí)間.因此,本文設(shè)計(jì)了啟發(fā)式算法,利用最優(yōu)解性質(zhì),在滿足最優(yōu)解性質(zhì)時(shí),保證獲得解是最優(yōu)解;不能滿足最優(yōu)解性質(zhì)時(shí),獲得的解是近優(yōu)解.其主要思想如下: 步驟1.令t=1. 步驟2.判斷是否滿足最優(yōu)解條件,如果滿足,則轉(zhuǎn)到步驟4,如果不滿足,則轉(zhuǎn)到步驟3. 步驟3.判斷油井的狀態(tài),若uit=0,根據(jù)約束(6)計(jì)算出停機(jī)后的壓力值.若uit=1,判斷油井壓力值和最大生產(chǎn)量的關(guān)系.若,則,若,則從t=1到當(dāng)前時(shí)段,找到乘子值最小時(shí)對(duì)應(yīng)的時(shí)段,令xit=0. 步驟4.t=t+1,若t≥T,轉(zhuǎn)到步驟5. 步驟5.算法停止,獲得油井i壓力子問(wèn)題的調(diào)度方案. 由于松弛問(wèn)題的解對(duì)于原問(wèn)題常常是不可行的,可能會(huì)違反需求約束,需要設(shè)計(jì)啟發(fā)式算法將其轉(zhuǎn)化為可行解.構(gòu)造啟發(fā)式算法時(shí),要考慮該問(wèn)題的特征,即油井間抽操作受到三個(gè)重要約束的制約:最小開(kāi)關(guān)機(jī)時(shí)間約束、爬坡約束和壓力變化約束.這三個(gè)約束是相互關(guān)聯(lián)的,對(duì)油井的啟停狀態(tài)影響非常大,如圖4所示.因此本文設(shè)計(jì)了兩階段啟發(fā)式算法將松弛問(wèn)題得到的解轉(zhuǎn)化為可行解.第一階段啟發(fā)式先保證滿足油井的最小開(kāi)關(guān)機(jī)約束和壓力約束,第二階段是根據(jù)第一階段決策出的油井最小開(kāi)關(guān)機(jī)時(shí)間,保證油井開(kāi)機(jī)運(yùn)行時(shí)其采油量滿足爬坡約束,進(jìn)而決策出油井的每個(gè)時(shí)段的采油量.通過(guò)兩階段啟發(fā)式算法所得到的可行解能夠?yàn)樵瓎?wèn)題的最優(yōu)目標(biāo)函數(shù)值提供一個(gè)上界. 圖4 三個(gè)約束對(duì)油井啟停的影響Fig.4 The influence of three constraints on the start-up/shut-down 由于壓力子問(wèn)題是近似求解,其獲得的對(duì)偶問(wèn)題的目標(biāo)值,不是最優(yōu)目標(biāo)函數(shù)值的真實(shí)下界,因此只能作為代理下界進(jìn)行迭代.本文采用了代理次梯度[18]方法用于更新乘子的值. 為了減少代理次梯度方法的下界高估對(duì)乘子的影響,步長(zhǎng)因子取值減少,范圍縮小一半,即.其乘子πit,λit在h次迭代中的更新公式分別如下: 計(jì)算次梯度,得到搜索的方向: 每次迭代都需要按照上面的公式,更新次梯度.其中xit和yit是單機(jī)子問(wèn)題求得的最優(yōu)解. 然后沿著次梯度的方向更新乘子,第一個(gè)子問(wèn)題每次迭代的乘子更新公式如下: 第二個(gè)子問(wèn)題每次迭代的乘子更新公式如下: 為了驗(yàn)證所提出模型和算法的有效性,把建立的非線性數(shù)學(xué)規(guī)劃模型線性轉(zhuǎn)化為線性整數(shù)規(guī)模模型,轉(zhuǎn)化后可以直接利用商業(yè)軟件CPLEX 11.0進(jìn)行求解.算法用Visual C++對(duì)算法編碼,全部模型和算法在PC機(jī)(3.10GHz主頻和4.00GB內(nèi)存)上進(jìn)行測(cè)試. 4.1.1 實(shí)驗(yàn)參數(shù)設(shè)置 為驗(yàn)證算法的性能,提出的算法采用C++編程實(shí)驗(yàn),在PC機(jī)(Pentium-IV 2.83GHz CPU)上進(jìn)行測(cè)試.在實(shí)驗(yàn)測(cè)試中,把變換后的線性整數(shù)規(guī)模模型直接采用商業(yè)軟件CPLEX 11.0軟件進(jìn)行求解.CPLEX的算法最長(zhǎng)運(yùn)行時(shí)間設(shè)置為1800秒.其他的CPLEX設(shè)置保持軟件的默認(rèn)設(shè)置.對(duì)于拉格朗日松弛算法,算法性能的評(píng)價(jià)采用兩個(gè)指標(biāo):對(duì)偶間隙和計(jì)算時(shí)間(秒).對(duì)偶間隙%的計(jì)算如下:可行解的目標(biāo)函數(shù)值ZU(原問(wèn)題的一個(gè)上界)減去對(duì)偶函數(shù)的值ZL(原問(wèn)題的一個(gè)下界),再除以對(duì)偶函數(shù)的值ZL,最后轉(zhuǎn)化成百分比的形式.上界是在算法迭代過(guò)程中找到的最小的目標(biāo)函數(shù)值.以對(duì)偶間隙小于0.5%或迭代次數(shù)小于500作為算法的終止條件.設(shè)調(diào)度周期為24小時(shí),初始的壓力值為機(jī)組的最大壓力值.開(kāi)機(jī)爬坡URi和關(guān)機(jī)爬坡DRi滿足[600,700]間的均勻分布,上升爬坡和下降爬坡?i滿足[400,600]間均勻分布.其他油井參數(shù)在表1中給出的范圍中均勻隨機(jī)產(chǎn)生. 表1 與油井相關(guān)的參數(shù)的生成范圍Table 1 Range of values for parameters corresponding to oil wells 4.1.2 實(shí)驗(yàn)結(jié)果 為了驗(yàn)證所提出算法的有效性,設(shè)計(jì)了不同的求解方法比較各算法的目標(biāo)函數(shù)值和運(yùn)算時(shí)間進(jìn)行評(píng)價(jià).1)用CPLEX單獨(dú)求解.2)采用LR方法,子問(wèn)題用CPLEX求解,標(biāo)記為L(zhǎng)R-CPLEX.3)利用變量分離機(jī)組的拉格朗日方法,壓力子問(wèn)題用CPLEX求解,標(biāo)記為L(zhǎng)D-CPLEX.4)本文設(shè)計(jì)的子問(wèn)題帶有狀態(tài)空間約簡(jiǎn)策略的基于變量分離的的LR方法,標(biāo)記為L(zhǎng)D.每種規(guī)模隨機(jī)產(chǎn)生和求解了10組,N=10和N=30為小規(guī)模問(wèn)題,N=50到100為中規(guī)模問(wèn)題,N=300到N=900為大規(guī)模問(wèn)題.計(jì)算結(jié)果如表2和表3所示,表2和表3中的數(shù)值是所測(cè)規(guī)模的10組實(shí)例的平均值.表2中的數(shù)值為目標(biāo)函數(shù)值的比值,即每個(gè)規(guī)模自身求得的目標(biāo)函數(shù)值與所有算法求解單機(jī)模型和批模型所有目標(biāo)函數(shù)值取最小值的比值.即:ARi=Zi/min{Z1,Z2,Z3,···,Z8},i=1,2,3,···,8.其中,Z1/Z2表示 CPLEX 分別求解單機(jī)模型和批模型獲得的目標(biāo)函數(shù)值,Z3/Z4表示LR-CPLEX分別求解單機(jī)模型和批模型獲得的目標(biāo)函數(shù)值,Z5/Z6表示LD-CPLEX求解單機(jī)模型和批模型獲得的目標(biāo)函數(shù)值.Z7/Z8表示LD求解分別求解單機(jī)模型批模型獲得的目標(biāo)函數(shù)值.表3中的數(shù)值表示不同求解方法在求解單機(jī)模型和批模型時(shí)所需要的計(jì)算時(shí)間. 與單機(jī)模型相比,批模型明顯降低了問(wèn)題維數(shù),顯著降低了變量的規(guī)模.以規(guī)模24×30為例,單機(jī)模型的變量個(gè)數(shù)為6481,0-1變量個(gè)數(shù)為2160,非零系數(shù)個(gè)數(shù)為38300,約束個(gè)數(shù)為13704;而批模型的變量個(gè)數(shù)僅為649,0-1變量個(gè)數(shù)為216,非零系數(shù)個(gè)數(shù)為3830,約束個(gè)數(shù)為1392.從表2和表3的計(jì)算結(jié)果,可以得出如下結(jié)論: 1)模型的有效性 a)從表3的小規(guī)模問(wèn)題CPLEX求解結(jié)果中可以看出,批模型求解的速度明顯優(yōu)于單機(jī)模型. b)從表3的中規(guī)模問(wèn)題CPLEX求解結(jié)果中可以看出,當(dāng)單機(jī)模型在允許時(shí)間內(nèi)不能獲得最優(yōu)解時(shí),批模型依然能夠在給定的時(shí)間內(nèi)求解該問(wèn)題. 表2 模型與算法的性能比較結(jié)果Table 2 Computational results of the LR algorithm and the CPLEX solver 表3 模型與算法的計(jì)算時(shí)間比較Table 3 Computational time of the proposed model and algorithm c)批模型和單機(jī)模型在求解精度上,從表2的CPLEX求解小規(guī)模問(wèn)題的結(jié)果中可以看出,當(dāng)單機(jī)模型在限定內(nèi)能夠獲得最優(yōu)解時(shí),批模型的求解精度僅降低了0.902%.對(duì)于中大規(guī)模問(wèn)題,單機(jī)模型在限定時(shí)間內(nèi)不能獲得最優(yōu)解時(shí),批模型的求解精度跟單機(jī)模型相比平均提高了4.692%. 2)LD算法有效性 a)從表2的中小規(guī)模問(wèn)題中可以看出,提出的LD算法跟CPLEX相比,單機(jī)模型的求解精度降低1.196%,批模型的求解精度降低0.716%.從大規(guī)模問(wèn)題中可以看出,LD算法與CPLEX相比,單機(jī)模型的求解精度比CPLEX提高了8.373%,批模型的求解精度比CPLEX降低1.123%.從表3中可以看出,無(wú)論是求解單機(jī)模型還是批模型,LD的求解效率明顯優(yōu)于CPLEX. b)從表3的大規(guī)模問(wèn)題看出,無(wú)論是單機(jī)模型還是批模型,CPLEX在限定的時(shí)間(3600s)內(nèi)已經(jīng)無(wú)法得到問(wèn)題的最優(yōu)解,而設(shè)計(jì)的LD算法無(wú)論對(duì)于單機(jī)模型還是批模型,都能夠快速地得到問(wèn)題的近優(yōu)解,LD算法求解批模型的各個(gè)規(guī)模的平均計(jì)算時(shí)間僅為0.16. c)從表2中可以看出,提出的LD算法跟LRCPLEX算法相比,LD求解批模型的平均求解精度僅降低0.002%,但從表3中可以看出,LD求解效率明顯優(yōu)于LR-CPLEX的算法. d)從表2中可以看出,提出的LD算法跟LDCPLEX算法相比,LD求解批模型的平均求解精度僅降低0.023%,但從表3中可以看出,LD求解效率都明顯優(yōu)于LD-CPLEX的算法. e)從表2和表3中的LD算法中可以看出,批模型比單機(jī)模型的平均求解精度僅降低了0.003%,但求解效率提高了8.75倍. 以上結(jié)果表明,提出的批模型的求解效率明顯優(yōu)于單機(jī)模型.提出的LD算法,不僅求解的精度高,在求解效率上也明顯優(yōu)于其他算法. 本文針對(duì)大規(guī)模油井間抽調(diào)度問(wèn)題,考慮油井生產(chǎn)時(shí)的井底壓力約束,爬坡約束和最小開(kāi)關(guān)機(jī)約束,把同一油藏內(nèi)的油井劃分為批進(jìn)行調(diào)度,提出了批建模的策略.利用提出的批聚合的策略和方法,以采油成本最小為優(yōu)化目標(biāo)建立了混合整數(shù)規(guī)劃批模型.針對(duì)大規(guī)模問(wèn)題CPLEX無(wú)法有效快速求解的難題,本文提出基于變量分離的拉格朗日分解算法進(jìn)行求解.為了加速算法求解效率,根據(jù)動(dòng)態(tài)規(guī)劃的結(jié)構(gòu)特征,提出了用特征點(diǎn)代表同一階段具有相同性質(zhì)節(jié)點(diǎn)群的狀態(tài)空間約簡(jiǎn)策略,降低搜索復(fù)雜度,用于提高算法的搜索效率.為了測(cè)試模型和算法的性能,隨機(jī)產(chǎn)生了大量數(shù)據(jù)進(jìn)行計(jì)算實(shí)驗(yàn).結(jié)果表明,在模型方面,基于批聚合策略和方法建立的批模型明顯降低了問(wèn)題的維度,顯著提高了求解效率和求解規(guī)模;在優(yōu)化算法方面,提出的基于變量分離的LR算法,能夠在合理的計(jì)算時(shí)間內(nèi)獲得高質(zhì)量的解.3.3 具有爬坡約束的可行解的構(gòu)造
3.4 更新拉格朗日乘子
4 實(shí)驗(yàn)設(shè)計(jì)及計(jì)算結(jié)果
4.1 實(shí)驗(yàn)和數(shù)據(jù)結(jié)果
5 結(jié)論