(北京林業(yè)大學(xué) 信息學(xué)院, 北京 100083)
摘 要:在分析林分生長與收獲模型在林業(yè)中的應(yīng)用,以及林分生長與收獲模型結(jié)構(gòu)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)通用的林分生長與收獲模型數(shù)據(jù)庫和模型解析器。模型解析器利用XML作為林分生長與收獲模型的表達(dá)形式,運(yùn)用編譯原理中的詞法分析、語法分析和語義分析等理論,實(shí)現(xiàn)了生長模型的解析。
關(guān)鍵詞:生長與收獲模型;模型數(shù)據(jù)庫;解析器;可擴(kuò)展標(biāo)記語言
中圖分類號:TP393 文獻(xiàn)標(biāo)志碼:A
文章編號:10013695(2009)01020902
Research on database and interpreter of stand growth and yield model
HAI Zhanguang,WU Baoguo
(School of Information Engineering, Beijing Forestry University, Beijing 100083, China)
Abstract:Based on the analysis and summary of stand growth and yield models used in forestry application system, this paper designed an overall structure of a common database system for stand growth and yield models, implemented the interpreter. The interpreter used XML as the expression of models. Using lexical analysis, syntactical analysis, semantic analysis,it achieved an interpreter of stand growth and yield model.
Key words:growth and yield model; model base; interpreter; XML
在林業(yè)生產(chǎn)實(shí)踐中,林分的生長量和收獲量的預(yù)估有很多用途,它描述了林木生長與林分狀態(tài)和立地條件的關(guān)系[1]。在林業(yè)生產(chǎn)實(shí)踐中,利用林分生長模型對森林資源進(jìn)行更新,利用林分生長模型和收獲模型對各種育林措施的影響與效應(yīng)進(jìn)行評價(jià),對林分生長進(jìn)行可視化模擬[2],為采伐計(jì)劃提供基礎(chǔ)數(shù)據(jù),為森林資源經(jīng)營與科學(xué)管理動(dòng)態(tài)決策提供預(yù)測數(shù)據(jù)[3~5]。
近年來,研建的森林資源管理系統(tǒng)、林業(yè)專家系統(tǒng)和決策支持系統(tǒng)都集成了林分生長模型或收獲模型進(jìn)行數(shù)據(jù)更新或預(yù)測的功能。當(dāng)這些系統(tǒng)運(yùn)行時(shí),需要對模型進(jìn)行動(dòng)態(tài)管理和調(diào)整,如果將模型及其參數(shù)的計(jì)算寫進(jìn)程序,那么當(dāng)模型或者模型的參數(shù)需要更換或調(diào)整時(shí),就需要對系統(tǒng)的源程序進(jìn)行修改,造成系統(tǒng)維護(hù)費(fèi)用增加。因此,林分生長與收獲等模型的動(dòng)態(tài)管理以及模型的解析已經(jīng)成為這些系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)時(shí)一個(gè)必須研究的問題。本文主要研究設(shè)計(jì)了一個(gè)通用的林分生長與收獲模型數(shù)據(jù)庫和模型解析器,實(shí)現(xiàn)了模型的解析功能,并集成在國家“十一五”科技支撐項(xiàng)目——速生豐產(chǎn)林生產(chǎn)經(jīng)營過程信息化關(guān)鍵技術(shù)研究與應(yīng)用課題中進(jìn)行了應(yīng)用。
1 林分生長與收獲模型及模型數(shù)據(jù)庫設(shè)計(jì)
11 林分生長與收獲模型
林分生長和收獲模型有很多種,常用的數(shù)學(xué)模型主要有[6]:
a)邏輯斯諦方程(Logistic equation)
y=a0+a1/(1+ea2+a3A)
b)理查茲方程(Richards equation)
y=a0(1-a1e-a2A)1/(1-a3)
c)米切爾里希方程(Mitcherlich equation)
y=ymax(1-e-a0A)a1
d)三參數(shù)Weibull模型
F(x)=0x≤a
c/b[(x-a)/b]c-1exp[-((x-a)/b)c]x>a,b>0,c>0
這些常用模型是由具有明確解析特性的初等解析函數(shù)、初等運(yùn)算的復(fù)合和分段構(gòu)成的,將模型設(shè)計(jì)為兩類計(jì)算結(jié)構(gòu):
a)初等解析函數(shù)及初等運(yùn)算的計(jì)算結(jié)構(gòu)。該類計(jì)算結(jié)構(gòu)是一些初等解析函數(shù)及初等運(yùn)算的復(fù)合。例如邏輯斯諦方程、理查茲方程和米切爾里希方程。
b)分段運(yùn)算的計(jì)算結(jié)構(gòu)。該類計(jì)算結(jié)構(gòu)將根據(jù)參數(shù)條件進(jìn)行選擇性運(yùn)算,如三參數(shù)Weibull模型。
12 模型數(shù)據(jù)庫設(shè)計(jì)
同一個(gè)模型應(yīng)用于不同的地區(qū)、不同的樹種以及不同的立地類型時(shí),模型的參數(shù)是不同的。因此,模型庫中除了需要存儲(chǔ)林分生長與收獲基本模型外,還需要存儲(chǔ)模型相對應(yīng)的參數(shù)。所以在模型數(shù)據(jù)庫中設(shè)計(jì)了模型表存儲(chǔ)模型和模型參數(shù)表存儲(chǔ)模型參數(shù)。
1)模型表實(shí)例如表1所示。由于模型可能存在分段運(yùn)算的計(jì)算結(jié)構(gòu),在表中加入了“條件”來存儲(chǔ)模型分段計(jì)算條件。模型的編碼規(guī)則遵循以下六個(gè)原則,即惟一性、科學(xué)性、可擴(kuò)展性、穩(wěn)定性、簡明性和適應(yīng)性。編碼規(guī)則為六位,前三位為模型類別,后三位為模型序號。
2)模型參數(shù)表實(shí)例如表2所示。表中存儲(chǔ)了各模型中參數(shù)的值,并且存儲(chǔ)了這一組參數(shù)值所適用的樹種和地區(qū)。模型參數(shù)表與模型信息表之間用模型號進(jìn)行關(guān)聯(lián)。
表1 模型信息表
模型號模型分類條件模型方程自變量參數(shù)模型描述
m01001林分平均樹高模型a*t^bta,bt為林分年齡
m02002蓄積模型a0*D^(a1-a2(D+H))*H^(a3+a4(D+H))D,Ha0,a1,a2,a3,a4D、H為胸徑和樹高
m04001三參數(shù)Weibullx>ac/b*((x-a)/b)^(c-1)*e^(-((x-a)/b)^c)xa,b,cx為胸徑
m04001三參數(shù)Weibullx≤a0xa,b,cx為胸徑
…………………
表2 模型參數(shù)表
模型號樹種立地類型參數(shù)值模型參數(shù)描述
m01001馬占相思樹013.278 4,0.630 6分別為a、b的值
m02002馬占相思樹010.000 064 15,1.824 576,0.006 985,1.023 269,0.005 713分別為a0、a1、a2、a3、a4的值
……………
注:模型及其參數(shù)值引自文獻(xiàn)[7]。
13 模型解析器的功能框架
模型解析器的主要功能是對模型庫中的模型進(jìn)行解析以及模型的XML輸出,如圖1所示。
模型的XML輸出主要是將數(shù)據(jù)庫中存儲(chǔ)的模型轉(zhuǎn)換成XML的形式,以便與其他外部系統(tǒng)進(jìn)行數(shù)據(jù)交換。
2 模型解析器實(shí)現(xiàn)原理的分析
模型解析器對模型的解析通過詞法分析、語法分析、語義分析和計(jì)算表達(dá)式四個(gè)步驟完成[8],如圖2所示。
21 詞法分析
在進(jìn)行詞法分析之前,首先要規(guī)定模型表達(dá)式的基本語法規(guī)則,即表達(dá)式中允許出現(xiàn)的單詞符號。單詞符號主要分為兩類操作數(shù)和操作符,操作數(shù)主要包括變量和參數(shù)、常量數(shù)字,操作符包括算術(shù)操作符、比較操作符、函數(shù)、界符等,如圖3所示。
詞法分析是對模型信息表的模型方程字段中的模型表達(dá)式從左至右進(jìn)行逐個(gè)字符的掃描和分解,從而識別出一個(gè)個(gè)單詞(包括變量、參數(shù)、運(yùn)算符、界符、函數(shù)名等),產(chǎn)生一個(gè)個(gè)的單詞序列。例如表1中的模型a0*e^(-a1^(1/t)),經(jīng)過詞法分析后得到如下的單詞符號序列:
a0*e^(-a1^(1/t))
詞法分析的主要流程如圖4所示。
22 語法分析
語法分析是識別由詞法分析給出的單詞符號序列是否存在語法錯(cuò)誤(如左右括號個(gè)數(shù)不匹配等),并構(gòu)造一棵語法樹。構(gòu)造語法樹之前,需要先定義操作的優(yōu)先級。在語法樹中,優(yōu)先級越低則越靠近根節(jié)點(diǎn)。模型解析器中操作的優(yōu)先級如下:
語法分析采用確定的自頂向下分析方法[8]。例如,模型a0*e^(-a1^(1/t))的語法分析,按照上面定義的操作優(yōu)先級,構(gòu)造出的語法樹如圖5所示。語法樹結(jié)構(gòu)中包含左右子節(jié)點(diǎn),所有葉節(jié)點(diǎn)都是操作數(shù),非葉節(jié)點(diǎn)都是操作符。在某些情況下也可能只有右子樹,而沒有左子樹(如求負(fù)值操作符“-”,函數(shù)作為一個(gè)操作符)。
構(gòu)造好語法樹后,就可根據(jù)語法樹對模型公式進(jìn)行語法檢查。語法檢查采用先序遍歷的方式,對整個(gè)語法樹中的節(jié)點(diǎn)進(jìn)行遞歸遍歷檢查。如果是運(yùn)算符或函數(shù)則分別遞歸檢查它的左右子節(jié)點(diǎn);如果是變量、參數(shù)或常量則返回。對運(yùn)算符或函數(shù)進(jìn)行語法檢查時(shí),主要檢查操作數(shù)的個(gè)數(shù)是否符合該操作(如減操作則需要兩個(gè)操作數(shù),求負(fù)值操作則只需要一個(gè)操作數(shù))。
23 語義分析
語法分析確保了模型公式不存在語法上的錯(cuò)誤,而語義分析則對運(yùn)算符或函數(shù)的運(yùn)算對象進(jìn)行進(jìn)一步的類型審查。例如,除法操作中的分母不能為0;冪運(yùn)算中當(dāng)冪值為1/2時(shí),底數(shù)必須大于等于0。
經(jīng)過以上的詞法分析、語法分析和語義分析以后,保證了模型公式符合語法和語義要求,并且完成了語法樹的構(gòu)造。最后通過先序遍歷的方法對語法樹進(jìn)行遞歸運(yùn)算,語法樹中的變量通過用戶輸入獲得,參數(shù)則通過查詢模型參數(shù)表中相應(yīng)的記錄獲得。
3 應(yīng)用實(shí)例
模型庫采用關(guān)系數(shù)據(jù)庫SQL Server 2000建立,模型解析器采用C#實(shí)現(xiàn)。解析器采用Web services的形式向其他外部系統(tǒng)提供模型解析服務(wù)。外部系統(tǒng)可以通過提供要解析模型的編號、樹種和地區(qū)來實(shí)現(xiàn)對指定模型的解析。
下面以C#開發(fā)的外部應(yīng)用系統(tǒng)為例,調(diào)用該Web services的方法如下:
a)在外部應(yīng)用系統(tǒng)中添加本模型解析器的Web services到系統(tǒng)的Web引用中。
b)使用如下代碼即可完成模型解析功能的調(diào)用(調(diào)用馬占相思樹的林分平均樹高模型,該模型號為m01001、林齡10、立地條件為01,利用下面的語句即可得到該樹種在該立地條件下10年生的平均樹高)。
//創(chuàng)建Web services實(shí)例
localhost.GrowthModelService ModelInterpreter=new localhost.GrowthModelService();
string modelID=\"m01001\";//模型編號
string ldlx=\"01\";//立地類型
string shuzhong=\"馬占相思\";//樹種
double indepVarVal=10.0;//自變量參數(shù)值
返回解析結(jié)果result
double result=ModelInterpreter.Interpreter(modelID, location,shuzhong, indepVarVal);
4 結(jié)束語
本文分析了常用的林分生長與收獲模型,設(shè)計(jì)了一個(gè)林業(yè)上通用的、易于維護(hù)和擴(kuò)展的模型庫與模型解析器。該模型庫和解析器的應(yīng)用,解決了目前森林資源管理系統(tǒng)、林業(yè)專家系統(tǒng)和決策支持系統(tǒng)等林業(yè)信息系統(tǒng)中模型動(dòng)態(tài)變化的問題,降低了系統(tǒng)維護(hù)費(fèi)用。
參考文獻(xiàn):
[1]唐守正,李希菲,孟昭和.林分生長模型研究的進(jìn)展[J].林業(yè)科學(xué)研究,1993,6(6):672679.
[2]權(quán)兵,唐麗玉,陳崇成,等.虛擬地理環(huán)境下的林分生長可視化研究[J].福建林學(xué)院學(xué)報(bào),2004,24(3):224228.
[3]杜紀(jì)山,唐守正,王洪良.天然林分生長模型在小班數(shù)據(jù)更新中的應(yīng)用[J].林業(yè)科學(xué),2000,36(3):5258.
[4]石麗萍,馮仲科.人工林生長與收獲預(yù)測模型的基本方法[J].北京林業(yè)大學(xué)學(xué)報(bào),2005,27(Z2):222225.
[5]杜紀(jì)山,唐守正.林分?jǐn)嗝娣e生長模型研究評述[J].林業(yè)科學(xué)研究,1997,10(6):599606.
[6]孟憲宇.測樹學(xué)[M].2版.北京:中國林業(yè)出版社,1996.
[7]陸道調(diào). 馬占相思工業(yè)人工林林分經(jīng)營規(guī)劃及管理的研究[D].北京:北京林業(yè)大學(xué),2005.
[8]呂映芝,張素琴,蔣維杜.編譯原理[M].北京:清華大學(xué)出版社,2001.