齊云飛,胡 凡
(1.遼寧省水利水電勘測(cè)設(shè)計(jì)研究院規(guī)劃分院,沈陽(yáng)110006;2.遼寧省東水西調(diào)工程建設(shè)局,沈陽(yáng)110003)
基于Fortran與VB混編的水庫(kù)群聯(lián)合優(yōu)化調(diào)度系統(tǒng)研究
齊云飛1,胡 凡2
(1.遼寧省水利水電勘測(cè)設(shè)計(jì)研究院規(guī)劃分院,沈陽(yáng)110006;2.遼寧省東水西調(diào)工程建設(shè)局,沈陽(yáng)110003)
介紹了Visual Basic與Fortran兩種語(yǔ)言混合編程的基本方法,研究并解決了兩種語(yǔ)言之間結(jié)構(gòu)體數(shù)組傳遞的技術(shù)關(guān)鍵。建立基于Fortran語(yǔ)言的水庫(kù)群聯(lián)合優(yōu)化調(diào)度模型,并采用粒子群優(yōu)化算法進(jìn)行求解。最后結(jié)合了VB人機(jī)交互界面的優(yōu)點(diǎn)和Fortran在數(shù)值運(yùn)算方面的長(zhǎng)處,實(shí)現(xiàn)水庫(kù)群聯(lián)合優(yōu)化調(diào)度計(jì)算數(shù)據(jù)輸入輸出的可視化。
Fortran語(yǔ)言;Visual Basic語(yǔ)言;水庫(kù)群聯(lián)合調(diào)度;粒子群優(yōu)化算法;系統(tǒng)開(kāi)發(fā)
Fortran編程語(yǔ)言具有數(shù)值計(jì)算與數(shù)學(xué)分析能力強(qiáng)的特點(diǎn),并且結(jié)構(gòu)層次清楚、運(yùn)行計(jì)算穩(wěn)定可靠,在數(shù)學(xué)與工程計(jì)算領(lǐng)域得到廣泛應(yīng)用。但是,可視化編程對(duì)于Fortran編程語(yǔ)言始終存在難度較大的問(wèn)題。Visual Basic編程語(yǔ)言在可視化編程方面較為簡(jiǎn)單,容易實(shí)現(xiàn),編制的人機(jī)交互界面友好并且有效,在Windows系統(tǒng)下的可視化界面設(shè)計(jì)應(yīng)用較為廣泛。Fortran和Visual Basic一樣來(lái)自微軟公司開(kāi)發(fā)的編程環(huán)境,兩種語(yǔ)言混合編程具有較好的基礎(chǔ)。
因此,兩者結(jié)合,在Windows系統(tǒng)下對(duì)Visual Basic和Fortran進(jìn)行混合編程,既可以利用VB界面設(shè)計(jì)和圖形開(kāi)發(fā)功能設(shè)計(jì)的優(yōu)勢(shì),設(shè)計(jì)出出友好的數(shù)據(jù)輸入界面平臺(tái),又可以利用該界面在計(jì)算水庫(kù)興利調(diào)節(jié)時(shí)調(diào)用Fortran程序進(jìn)行科學(xué)計(jì)算,將計(jì)算結(jié)果以可視化數(shù)據(jù)及圖形的形式顯示在Visual Basic開(kāi)發(fā)界面上,通過(guò)數(shù)值計(jì)算、交互式數(shù)據(jù)輸入、輸出和可視化功能所集成的混合編程技術(shù),建立水庫(kù)群聯(lián)合優(yōu)化調(diào)度系統(tǒng)。
1.1 利用visual fortran建立DLL
Visual Basic設(shè)計(jì)界面程序,調(diào)用Fortran語(yǔ)言程序編譯的動(dòng)態(tài)鏈接庫(kù)(DLL,Dynamic-Link Library)。Fortran程序編譯的動(dòng)態(tài)鏈接庫(kù),通過(guò)參數(shù)傳遞,從而實(shí)現(xiàn)數(shù)據(jù)的變換。新建以工程命名的工程,類(lèi)型為Dynamic-Link Library0。將原Fortran編寫(xiě)的源程序插入工程,或者在工程中加入一個(gè)只含有函數(shù)或子程序的Fortran程序,編譯并生成DLL。生成的函數(shù)或子程序如被調(diào)用,必須加以聲明,從而標(biāo)識(shí)在生成的DLL中,這些函數(shù)或子程序可被調(diào)用。
1.2 利用VB調(diào)用Fortran DLL
Visual Basic設(shè)計(jì)界面程序調(diào)用動(dòng)態(tài)鏈接庫(kù)可以采用上述方法,也可使用其他方法。在調(diào)用Fortran語(yǔ)言中的動(dòng)態(tài)鏈接庫(kù)前,被調(diào)用的動(dòng)態(tài)鏈接庫(kù)需要被聲明。調(diào)用過(guò)程中需要保證傳遞參數(shù)類(lèi)型的一致性,這樣才能保證Fortran DLL被Visual Basic設(shè)計(jì)界面正確調(diào)用。因?yàn)镕ortran和Visual Basic兩種語(yǔ)言在定義數(shù)據(jù)類(lèi)型時(shí),存在不一致性,所以需要將Fortran程序的參數(shù)類(lèi)型在Visual Basic的Declare語(yǔ)句中的參數(shù)列表中,與Visual Basic實(shí)現(xiàn)正確對(duì)應(yīng)。傳遞數(shù)組參數(shù)時(shí),還需要在Visual Basic參數(shù)列表的對(duì)應(yīng)位置放上數(shù)組的第一個(gè)元素作為參數(shù)[1]。
2.1 粒子群優(yōu)化算法基本原理
粒子群優(yōu)化算法模型里的每個(gè)粒子都有位置和速度這兩個(gè)因素。每個(gè)粒子對(duì)當(dāng)前的最優(yōu)粒子具有一個(gè)趨勢(shì),并在解空間中進(jìn)行搜索。粒子群優(yōu)化算法中的每次迭代的過(guò)程不是隨機(jī)進(jìn)行的,而是根據(jù)較優(yōu)的解對(duì)最優(yōu)解進(jìn)行搜索。
搜索過(guò)程中粒子的速度和位置按公式(1)和(2)進(jìn)行更新:


式中:i=1,2,…,m,m為種群中粒子個(gè)數(shù);j=1,2,…,n,n為空間向量的維數(shù);c1,c2為學(xué)習(xí)因子,均為非負(fù)實(shí)數(shù)通常令C1=C2=2;r1,r2為[0,1]區(qū)間內(nèi)的隨機(jī)數(shù);vij為粒子i的速度,vij∈[-vimax,vimax]。
粒子當(dāng)前的位置需要通過(guò)修正最大速度vmax來(lái)實(shí)現(xiàn),粒子可能因?yàn)関max過(guò)大而錯(cuò)過(guò)最優(yōu)解;相反可能會(huì)因?yàn)関max過(guò)小,而使整體算法搜索速度降低,影響算法效率,尤其當(dāng)粒子處于某一局部最優(yōu)解附近時(shí),可能因?yàn)関max過(guò)小而于陷入局部最優(yōu)解,粒子群算法的流程如圖1:

圖1 粒子群算法流程圖
2.2 聯(lián)合調(diào)度規(guī)則
水庫(kù)在供水的同時(shí),需要保證水庫(kù)下游河道的最小生態(tài)流量要求,在滿(mǎn)足最小環(huán)境流量的前提下進(jìn)行水庫(kù)直供及下游供水。水庫(kù)各項(xiàng)供水保證率及最大破壞深度見(jiàn)表1。

表1 各供水用戶(hù)供水保證率及破壞深度
各水庫(kù)在聯(lián)合調(diào)度時(shí),按照供水調(diào)度圖及調(diào)水調(diào)度圖進(jìn)行調(diào)度,以水庫(kù)時(shí)段初的蓄水位S(t)所在調(diào)度圖區(qū)域?yàn)橐罁?jù),判斷當(dāng)前時(shí)段水庫(kù)應(yīng)該加大供水、限制供水、正常供水或棄水。
2.3 目標(biāo)函數(shù)與決策變量
水庫(kù)聯(lián)合優(yōu)化調(diào)度模型以多年平均供水量最大且缺水量和棄水量最小為目標(biāo)函數(shù),各供水用戶(hù)需滿(mǎn)足供水保證率及破壞深度要求。模型應(yīng)以各用戶(hù)
的供水限制線及調(diào)水限制線為決策標(biāo)量,在滿(mǎn)足上述調(diào)度規(guī)則的前提下進(jìn)行優(yōu)化實(shí)現(xiàn)。

3.1 系統(tǒng)組成
水庫(kù)群聯(lián)合調(diào)度系統(tǒng)由人機(jī)交互界面、調(diào)度模型庫(kù)和數(shù)據(jù)庫(kù)組成。系統(tǒng)組成示意圖見(jiàn)圖2:

圖2 北線水庫(kù)群聯(lián)合調(diào)度系統(tǒng)組成示意圖
數(shù)據(jù)庫(kù)為調(diào)度計(jì)算提供基本數(shù)據(jù)資料,計(jì)算最終結(jié)果也保存其中。水庫(kù)基本資料數(shù)據(jù)庫(kù)包括:水位~庫(kù)容曲線、水位~面積曲線、水庫(kù)特征水位參數(shù)表、蒸發(fā)滲漏損失系數(shù)等;水文徑流數(shù)據(jù)庫(kù)存儲(chǔ)各流域各區(qū)間天然徑流長(zhǎng)系列值及位置示意圖;用水戶(hù)需水?dāng)?shù)據(jù)庫(kù)存儲(chǔ)各流域區(qū)間用水戶(hù)的蓄水量及要求的供水保證率;調(diào)度數(shù)據(jù)庫(kù)存儲(chǔ)優(yōu)化后的水庫(kù)調(diào)度圖以及水庫(kù)群模擬優(yōu)化調(diào)度的結(jié)果[2]。
3.2 建立優(yōu)化調(diào)度模型庫(kù)
根據(jù)不同要求,選取不同目標(biāo)的權(quán)重,建立數(shù)學(xué)模型,并采用PSO優(yōu)化求解方法,用以水庫(kù)調(diào)度圖的尋優(yōu)計(jì)算,進(jìn)行水庫(kù)群聯(lián)合優(yōu)化模擬調(diào)度,并輸出各流域各用水戶(hù)的供水狀態(tài)以及水庫(kù)的水位狀態(tài),供研究人員對(duì)整個(gè)供水系統(tǒng)進(jìn)行綜合效益分析,指導(dǎo)規(guī)劃人員進(jìn)行方案的比選,對(duì)供水系統(tǒng)內(nèi)部水庫(kù)的運(yùn)行參數(shù)進(jìn)行調(diào)整,以獲得最優(yōu)方案。
3.3 人機(jī)交互式界面
通過(guò)界面可以導(dǎo)入流域的徑流及需水量資料,并修改水庫(kù)的特征水位、各用水戶(hù)的用水保證率、已經(jīng)PSO粒子群算法的優(yōu)化參數(shù),通過(guò)水庫(kù)調(diào)度計(jì)算,在界面輸出各水庫(kù)優(yōu)化調(diào)度圖,并可打印輸出水庫(kù)供水多年平均成果統(tǒng)計(jì)表。系統(tǒng)運(yùn)行于Windows操作系統(tǒng)之上,由菜單欄、工作區(qū)、狀態(tài)欄等組成,界面如圖3所示:

圖3 水庫(kù)群聯(lián)合供水調(diào)度系統(tǒng)界面
菜單欄包括水庫(kù)調(diào)度規(guī)則優(yōu)化、水庫(kù)優(yōu)化調(diào)度模擬、打印、幫助、退出五個(gè)一級(jí)菜單。“水庫(kù)調(diào)度規(guī)則優(yōu)化”菜單用于對(duì)水庫(kù)調(diào)度圖進(jìn)行優(yōu)化計(jì)算;“水庫(kù)優(yōu)化調(diào)度模擬”菜單用于水庫(kù)采用已優(yōu)化的調(diào)度圖進(jìn)行長(zhǎng)系列模擬優(yōu)化調(diào)度;“幫助”菜單提供調(diào)度幫助文本;“退出”菜單用于程序的退出。
1)研究過(guò)程中發(fā)現(xiàn),粒子群算法能以較高效率搜索函數(shù)的全局最優(yōu)解;本聯(lián)合調(diào)度系統(tǒng)中以調(diào)度圖中的供水調(diào)度線和調(diào)水控制線為決策變量,采用粒子群算法,得到最優(yōu)的水庫(kù)群聯(lián)合調(diào)度圖,較傳統(tǒng)的調(diào)度圖算法,無(wú)需進(jìn)行重復(fù)計(jì)算及經(jīng)驗(yàn)修正。在綜合利用水庫(kù)的調(diào)度中,能搜索得出調(diào)度圖的非劣解集,兼顧多個(gè)調(diào)度目標(biāo)。
2)調(diào)度系統(tǒng)充分利用Fortran在數(shù)值計(jì)算方面和VB在可視化方面的優(yōu)勢(shì),實(shí)現(xiàn)程序資源的共享和可視化,節(jié)約時(shí)間和提高效率。原始數(shù)據(jù)由VB界面直接輸人或更改(前處理),通過(guò)調(diào)用Fortran動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)計(jì)算功能(后臺(tái)處理),將計(jì)算成果傳回VB程序并且利用VB可視化功能直觀顯示和分析。
3)結(jié)合實(shí)際算例的研究表明:基于VB與Fortran混合編程的水庫(kù)群調(diào)度系統(tǒng)有一定的實(shí)用性,且在數(shù)據(jù)輸入/輸出和處理方面具有相當(dāng)?shù)膬?yōu)勢(shì)。
[1]李學(xué)哲,白云,陳國(guó)新.Fortran 90與VB混合編程技術(shù)的研究與實(shí)現(xiàn)[J].蘇州科技學(xué)院學(xué)報(bào),2008(04):76-80.
[2]杜文娟,李建東.用VB和Fortran語(yǔ)言混合編程開(kāi)發(fā)氣象軟件[J].氣象與環(huán)境科學(xué),2007(04):88-90.
Research on Optimal Scheduling System based on Fortran and VB Combined w ith Reservoir Group
QIYun-fei1and HU Fan2
(1.Planning Institute of LiaoningWater Conservancy&Hydroelectric Power Investigation,Design and Research Institute,Shenyang 110006,China;2.Liaoning ProvincialWater from East to West Project Construction Bureau,Shenyang 110003,China)
The basic method to mix programming in two languages of Visual Basic and Fortran is introduced in the paper,researching and solving the technological key of array transfer of structures between two languages.A optimal schedulingmodel combined with reservoir based on Fortran language is founded and the particle swarm optimization algorithm is adopted to solve.Finally,the advantage of human-computer interaction interface of VB and the strongpoint of numerical calculation of Fortran are combined,realizing the visualization of optimal scheduling calculation data input and output joint with reservoir group.
Fortran language;Visual Basic language;combined scheduling of reservoir group;particle swarm optimization algorithm;system development
TV697.12
B
2014-10-31
齊云飛(1978-),男,滿(mǎn)族,遼寧開(kāi)原人,高級(jí)工程師,從事規(guī)劃、水資源配置與水利經(jīng)濟(jì)專(zhuān)業(yè);胡凡(1956-),男,廣西桂林人,高級(jí)工程師。
1007-7596(2015)06-0001-03