(1.河海大學(xué) 水文水資源學(xué)院,江蘇 南京 210098; 2.山西水利職業(yè)技術(shù)學(xué)院,山西 運(yùn)城 044004; 3.句容市水利農(nóng)機(jī)局,江蘇 句容 212400)
近年來(lái),山西晉城市經(jīng)濟(jì)的快速增長(zhǎng),導(dǎo)致對(duì)水資源的需求量也隨之增大。但是晉城市位于北方地區(qū),降水量小,水資源總量不豐,而工農(nóng)業(yè)發(fā)展迅速,造成供需矛盾突出。因此,水資源的合理配置愈發(fā)顯得重要。由于水資源配置涉及到多部門(mén)與群體的利益分配問(wèn)題,在決策時(shí)需調(diào)和各方矛盾與沖突,故需要以各要素交互耦合等方法來(lái)解決水資源配置中諸多的決策問(wèn)題。何國(guó)華等針對(duì)水資源配置的復(fù)雜性,提出了運(yùn)用模擬退火遺傳算法對(duì)水資源優(yōu)化配置中問(wèn)題進(jìn)行研究[1];婁帥等針對(duì)水資源配置的不確定性等問(wèn)題,開(kāi)展了基于區(qū)間直覺(jué)模糊的水資源配置集群決策研究[2];王永濤等以解決多目標(biāo)問(wèn)題為目的,采用多種尋優(yōu)方法對(duì)黔中區(qū)的水資源多目標(biāo)配置進(jìn)行了研究[3]。
2001年,Pan根據(jù)果蠅覓食行為,提出了果蠅算法(Fruit Fly Optimization Algorithm,FOA)[4],該算法自提出以來(lái)就被廣泛地運(yùn)用到物流聯(lián)運(yùn)、交通運(yùn)輸以及電力分配等方面[5-7],而在水資源配置方面運(yùn)用較少。在經(jīng)典的果蠅算法中,果蠅個(gè)體通過(guò)視覺(jué)搜索(vision-based search)和氣味搜索(smell-based search),可以在有限時(shí)間內(nèi)達(dá)到優(yōu)化搜索空間。但該算法在被應(yīng)用到實(shí)際問(wèn)題時(shí)會(huì)產(chǎn)生算法運(yùn)行復(fù)雜、尋優(yōu)過(guò)程容易陷入局部最優(yōu)等問(wèn)題。對(duì)于這些問(wèn)題,本文將遺傳算法的交叉與變異算子[8]引入到果蠅算法[9]中,并借助于變步長(zhǎng)和增加果蠅個(gè)體隨機(jī)性的方法[10],降低了算法的復(fù)雜性與陷入局部最優(yōu)解的可能性。
實(shí)現(xiàn)區(qū)域水資源的經(jīng)濟(jì)、社會(huì)及生態(tài)平衡發(fā)展是水資源優(yōu)化配置的目標(biāo)。一般而言,水資源的多目標(biāo)優(yōu)化配置包括經(jīng)濟(jì)效益目標(biāo)、社會(huì)效益目標(biāo)與生態(tài)效益目標(biāo)[11]。
2.1.1經(jīng)濟(jì)效益目標(biāo)
區(qū)域水資源配置的最大目標(biāo)之一是達(dá)到經(jīng)濟(jì)利益的最大化,而經(jīng)濟(jì)效益主要是依據(jù)三大產(chǎn)業(yè)的單位產(chǎn)值(GDP),故經(jīng)濟(jì)效益的目標(biāo)函數(shù)構(gòu)建如下:
(1)
2.1.2社會(huì)效益目標(biāo)
區(qū)域水資源產(chǎn)生的社會(huì)效益將直接影響到經(jīng)濟(jì)效益的發(fā)揮,達(dá)到區(qū)域水資源的缺水量最小是水資源配置的主要目標(biāo)之一,故社會(huì)效益目標(biāo)如下:
(2)
2.1.3生態(tài)效益目標(biāo)
在對(duì)水資源的多目標(biāo)配置中,應(yīng)當(dāng)最小程度地排放主要污染物,用化學(xué)需氧量(COD)衡量。其表達(dá)式如下:
(3)
根據(jù)晉城市的特點(diǎn),確定了晉城市水資源配置的約束條件,其數(shù)學(xué)表達(dá)式如下。
(1) 水量平衡約束。
Wke=Wkb+QrT-QgT-QqT
(4)
式中,Wke和Wkb是k子區(qū)在時(shí)段T的初、末水量,萬(wàn)m3;Qr是k子區(qū)在T時(shí)段的來(lái)水量,萬(wàn)m3;Qg是k子區(qū)在T時(shí)段的供水總量,萬(wàn)m3;Qq是k子區(qū)在T時(shí)段的棄水總量,萬(wàn)m3。
(2) 可供水量約束。
(5)
(3) 需水量約束。
(6)
式中,Xkjmin和Xkjmax分別是k子區(qū)j用戶(hù)的最小需水量和最大需水量,萬(wàn)m3/a。
(4) 非負(fù)約束。
(7)
果蠅算法(FOA)是模擬果蠅覓食行為而提出的一種基于群體性搜索的隨機(jī)優(yōu)化算法[12],現(xiàn)已被廣泛地運(yùn)用到各種需要優(yōu)化的設(shè)計(jì)和規(guī)劃領(lǐng)域。與傳統(tǒng)的優(yōu)化算法相比,果蠅算法具有簡(jiǎn)單明了、操作方便以及調(diào)整參數(shù)少等優(yōu)點(diǎn)[13]。但是由于果蠅是在全局中飛行以尋找更優(yōu)的個(gè)體進(jìn)行迭代,導(dǎo)致在算法后期由于個(gè)體集聚度變大而多樣性減少,因此果蠅到后期容易出現(xiàn)陷入局部最優(yōu)解的問(wèn)題[14]。為了解決果蠅算法容易陷入局部最優(yōu)解的問(wèn)題,引入了遺傳算法中的交叉和變異算子,并通過(guò)對(duì)果蠅算法步長(zhǎng)進(jìn)行改進(jìn)和增加算法的隨機(jī)性來(lái)予以解決[15]。
(1) 初始化數(shù)據(jù)果蠅種群規(guī)模Sizepop與最大迭代次數(shù)Maxgen,同時(shí),根據(jù)尋優(yōu)范圍,隨機(jī)生成果蠅群體位置X-axis,Y-axis。
(2) 根據(jù)初始化果蠅個(gè)體的位置,設(shè)定果蠅利用嗅覺(jué)搜索目標(biāo)的矢量數(shù)據(jù),包括距離與方向,公式(8)中的L為搜索距離。
Xi=X-axis+L
Yi=Y-axis+L
(8)
(3) 因?yàn)榇繕?biāo)的位置是隨機(jī)的,因此要先估算原點(diǎn)與果蠅個(gè)體的距離Disti,之后再計(jì)算味道濃度判定值Si,Si是Disti的倒數(shù)。
(9)
(4) 將Si代入濃度判定函數(shù)中,求出果蠅個(gè)體的濃度Smelli。
Smelli=Functions(Si)
(10)
(5) 記錄下味道濃度最大的果蠅。
[bestSmellbestindex]=min(Smelli)
(11)
(6) 保存最好的濃度值bestSmell與該個(gè)體的X、Y坐標(biāo),之后的果蠅群體利用視覺(jué)搜索向該最優(yōu)位置靠近。
Smellbest=bestSmell
X-axis=X(bestindex)
Y-axis=Y(bestindex)
(12)
(7) 開(kāi)始進(jìn)行迭代尋優(yōu),重復(fù)執(zhí)行步驟(2)~(5),并對(duì)最佳濃度進(jìn)行判斷,如果優(yōu)于上一代的最佳濃度,則執(zhí)行步驟(6);否則,一直重復(fù)執(zhí)行到計(jì)算機(jī)設(shè)定的迭代次數(shù)的最后一次[16]。
通過(guò)對(duì)nfal(e,α,δ)函數(shù)代數(shù)式的分析發(fā)現(xiàn):插值擬合時(shí)設(shè)定的e2項(xiàng)的系數(shù)為0,方程中僅存在l1sine和l3tane兩項(xiàng),這顯示了插值擬合后的新函數(shù)比預(yù)期具有更好的收斂性。
3.2.1遺傳算法與蠅算法耦合
遺傳算法通過(guò)編碼隨機(jī)地生成一個(gè)初始種群[17],并對(duì)目標(biāo)問(wèn)題進(jìn)行編碼,再經(jīng)過(guò)選擇、交叉與變異的遺傳操作來(lái)尋找種群的最優(yōu)個(gè)體。本文引入并改進(jìn)了遺傳算法的交叉和變異算子,并將其用于解決果蠅算法在運(yùn)行到后期時(shí)由于果蠅個(gè)體多樣性減少而導(dǎo)致的隨機(jī)性與多樣性減少的問(wèn)題。
3.2.2交叉率、變異率的引進(jìn)與改進(jìn)
引入并改進(jìn)遺傳算法中的交叉算法,根據(jù)味道濃度值與迭代次數(shù)來(lái)調(diào)節(jié)果蠅個(gè)體的交叉率與變異率:
(13)
(14)
式中,qa是交叉概率;qa_max,qa_min分別是最大和最小交叉概率;qm_max,qm_min分別是最大和最小變異概率;Maxgen是算法的最大迭代次數(shù);gener是當(dāng)前迭代的代數(shù);savg是果蠅種群平均適應(yīng)度;s′是將要交叉的2個(gè)果蠅個(gè)體中具有較大濃度值的個(gè)體;s是要變異的個(gè)體濃度值。
為了降低算法陷入局部最優(yōu)解的可能性,取qa_max=0.9,qa_min=0.1;為了增加果蠅個(gè)體在迭代過(guò)程中的多樣性,增強(qiáng)尋優(yōu)能力,取qm_max=0.9,qm_min=0.1。 算法運(yùn)行中,對(duì)比交叉與變異后的個(gè)體濃度值的大小,如果個(gè)體濃度值增大,就保留新的果蠅個(gè)體,反之保留原來(lái)的果蠅個(gè)體[18]。為了有利于在算法運(yùn)行前期迭代中保存優(yōu)良的果蠅個(gè)體,后期迭代中的優(yōu)良果蠅個(gè)體不會(huì)被篩掉,從而防止了早熟,使函數(shù)的適應(yīng)性增強(qiáng)。這種改進(jìn)保證了新進(jìn)果蠅個(gè)體的優(yōu)良性,使得果蠅個(gè)體進(jìn)化方向更準(zhǔn)確,進(jìn)化速度也更快。
3.2.3自適應(yīng)步長(zhǎng)遞減策略
傳統(tǒng)的果蠅是采用固定步長(zhǎng)的方式,因此算法收斂速度較慢,在全局搜索中的能力也較低。而步長(zhǎng)遞減的自適應(yīng)步長(zhǎng)策略[19],在迭代的前期,步長(zhǎng)比較大、收斂速度也比較快;在迭代的后期,步長(zhǎng)變小,算法精確搜索的能力也相對(duì)提高,此時(shí)更容易找到目標(biāo)個(gè)體。因此算法中引入自適應(yīng)的步長(zhǎng)遞減的策略,使得算法在迭代的初期就可以快速地逼近尋優(yōu)目標(biāo),增強(qiáng)了算法的探測(cè)能力,降低了果蠅個(gè)體在尋優(yōu)過(guò)程中陷入局部最優(yōu)的概率。同時(shí),在算法迭代后,也可以進(jìn)行精確的搜索,避免錯(cuò)過(guò)最優(yōu)解。而引入隨機(jī)機(jī)制之后,會(huì)使得算法有更大的可能性跳出局部最優(yōu)解,同時(shí)也增加了算法在搜索后期的個(gè)體多樣性。
(1) 步長(zhǎng)遞減策略如下。
(15)
(16)
(17)
式中,bestsi-1是上一代味道最優(yōu)的濃度值;Bmax是最大步長(zhǎng);u是指數(shù)因子;取0.01,d是當(dāng)前的代數(shù);dmax是最大迭代次數(shù);c是過(guò)渡參數(shù)。
(2) 隨機(jī)機(jī)制策略如下。
(18)
Vi=1-e-γx
(19)
式中,Vi是指數(shù)分布;γ取0.5,其他和果蠅算法原理一樣。
3.2.4改進(jìn)后的果蠅算法
改進(jìn)后的果蠅算法在經(jīng)典果蠅算法的基礎(chǔ)上引入了遺傳算法的交叉和變異算子,對(duì)這兩個(gè)算子的適應(yīng)度進(jìn)行了改進(jìn)。同時(shí),加入了迭代步長(zhǎng)遞減策略和隨機(jī)機(jī)制,加快了算法的收斂速度和尋優(yōu)目標(biāo)的精確性[20]。改進(jìn)后的果蠅算法步驟如圖1所示。
選取山西省晉城市作為此次研究的對(duì)象。晉城市位于山西省的東南地區(qū),總面積為9 490 km2,其具體的地理位置如圖2所示。隨著區(qū)域產(chǎn)業(yè)結(jié)構(gòu)的轉(zhuǎn)型升級(jí)與經(jīng)濟(jì)水平的不斷提高,區(qū)域需水量在不斷增加,水生態(tài)狀況變差,供需結(jié)構(gòu)性的矛盾進(jìn)一步的加大,水資源的合理配置成為了一個(gè)影響晉城市可持續(xù)發(fā)展的重要問(wèn)題。根據(jù)晉城市水資源開(kāi)發(fā)條件與區(qū)域水利規(guī)劃狀況,將晉城市按行政區(qū)為供給單位概化為6個(gè)子區(qū),分別是:城區(qū)、沁水縣、陽(yáng)城縣、陵川縣、澤州縣與高平縣,晉城市區(qū)域內(nèi)的主要供水河流為西部的沁河與東部的丹河,通過(guò)張峰水庫(kù)供水工程連通,具體輸水路線(xiàn)如圖3所示。
圖1 改進(jìn)后的果蠅算法運(yùn)行過(guò)程Fig.1 Operation process of the improved FOA
圖2 晉城市具體地理位置Fig.2 Specific geographical location of Jincheng
圖3 晉城市供水結(jié)構(gòu)概化Fig.3 Summary diagram of water supplysystem structure in Jincheng
供給水源為地下水、地表水、回用水以及引調(diào)水4類(lèi)。需水分為農(nóng)業(yè)、生活、第二產(chǎn)業(yè)、第三產(chǎn)業(yè)與河道外生態(tài)用水5類(lèi),采用定額法對(duì)晉城市2020年20%、50%、75%和95%來(lái)水保證率下的水資源的需水量進(jìn)行了預(yù)測(cè),但是由于受限于篇幅,只列出了2020年75%來(lái)水保證率下的需水預(yù)測(cè)情況,如表1所列。
表1 2020年晉城市75%保證率的需水預(yù)測(cè)Tab.1 Prediction of Jincheng′s water demandunder 75% guarantee rate in 2020 萬(wàn)m3/a
根據(jù)上述模型和算法,在優(yōu)先滿(mǎn)足生活用水和河道外生態(tài)用水,降低地下水的開(kāi)采量的前提條件下,通過(guò)約束條件來(lái)確定決策變量的搜索空間,使空間中的任意一變量點(diǎn)與解空間中的任意一可行解有一一對(duì)應(yīng)的關(guān)系;借助于Matlab軟件,調(diào)用果蠅算法進(jìn)行求解,取種群數(shù)為100,進(jìn)化代數(shù)為1 500。用果蠅算法分別對(duì)晉城市2020年在20%,50%,75%與95%的來(lái)水頻率下的水資源進(jìn)行了配置,方案的配置結(jié)果如圖4所示。但是由于限于篇幅,只選取了75%來(lái)水保證率下最優(yōu)配置結(jié)果中的3個(gè)方案,晉城市在75%保證率下的總的可供水量為49 300萬(wàn)m3,具體如表2~4所列。
圖4 晉城市水資源配置可行解Fig.4 A feasible solution for water resourceallocation in Jincheng
萬(wàn)m3/a
表3 晉城市水資源配置方案二Tab.3 Jincheng water resources allocation scheme 2 萬(wàn)m3/a
表4 晉城市水資源配置方案三Tab.4 Jincheng water resources allocation scheme 3 萬(wàn)m3/a
方案一產(chǎn)生的三大效益分別為7 978 424萬(wàn)元/a、21 194萬(wàn)m3/a和32 517 t,方案二產(chǎn)生的三大效益分別為9 418 114萬(wàn)元/a、12 858萬(wàn)m3/a和36 039 t,方案三產(chǎn)生的三大效益分別為10 609 832萬(wàn)元/a、6 246萬(wàn)m3/a和44 451 t。
通過(guò)3個(gè)方案的對(duì)比分析可知:若考慮經(jīng)濟(jì)效益目標(biāo)與社會(huì)效益目標(biāo),則方案3更能滿(mǎn)足要求,其第二產(chǎn)業(yè)用水量最大,增加了由煤礦為主的第二產(chǎn)業(yè)所形成的產(chǎn)業(yè)鏈的用水量,有利于晉城市水資源配置中經(jīng)濟(jì)目標(biāo)的實(shí)現(xiàn);農(nóng)業(yè)用水量低,水資源耗損率低,社會(huì)總?cè)彼啃?,但?huì)產(chǎn)生污染物排放過(guò)大的問(wèn)題。若考慮生態(tài)效益目標(biāo),則方案1更能滿(mǎn)足目標(biāo)要求,其農(nóng)業(yè)用水與第三產(chǎn)業(yè)用水占比大,工業(yè)用水占比小,污染物排放小,但經(jīng)濟(jì)效益也低。若3個(gè)目標(biāo)都考慮,則方案2的配置結(jié)果則比較適中,也更符合晉城市發(fā)展需要。
從配置結(jié)果來(lái)看,農(nóng)業(yè)整體用水量依然偏大,建議可以廣泛推廣節(jié)水農(nóng)業(yè),減少漫灌,種植耗水率低的作物;第二、第三產(chǎn)業(yè)用水量有較大的增長(zhǎng)空間,建議可以適當(dāng)增加工業(yè)與服務(wù)業(yè)用水量,延長(zhǎng)用水產(chǎn)業(yè)鏈,提高經(jīng)濟(jì)效益;建議配合山西省“兩縱十橫”與“六河連通”的大水網(wǎng)建設(shè),適當(dāng)增加水利工程經(jīng)費(fèi)投入,完善區(qū)域供水工程與設(shè)施,更好地整合與規(guī)劃水資源。
本文將果蠅優(yōu)化算法運(yùn)用到多目標(biāo)水資源配置中,將遺傳算法中的交叉、變異因子與果蠅算法耦合起來(lái),并對(duì)交叉率與變異率進(jìn)行改進(jìn),提高了函數(shù)的適應(yīng)性,在算法迭代過(guò)程中采用步長(zhǎng)遞減策略與隨機(jī)機(jī)制,降低了果蠅個(gè)體在搜索過(guò)程中陷入局部最優(yōu)解的可能性,加快了算法運(yùn)行的收斂速度。通過(guò)以山西省晉城市為實(shí)例進(jìn)行計(jì)算與分析,算法收斂速度快,配置結(jié)果合理,符合目標(biāo)函數(shù)要求。