摘 要:智能決策支持系統(tǒng)中涉及到大量的計算和分析,會影響到系統(tǒng)的運行效率。在此提出將Matlab集成進(jìn)智能決策支持系統(tǒng),由它單獨負(fù)責(zé)數(shù)據(jù)計算,利用Matlab強大的計算能力提高系統(tǒng)運行效率,從而使系統(tǒng)設(shè)計與實現(xiàn)更加容易、使用更加方便。結(jié)合一個實例給出了集成Matlab的步驟和方法,具有一定的新穎性和實用性。
關(guān)鍵詞:集成Matlab;IDSS;BP神經(jīng)網(wǎng)絡(luò);人工智能
中圖分類號:TP183文獻(xiàn)標(biāo)識碼:A
文章編號:1004-373X(2010)02-070-03
Study on Intelligence Decision Support System by Matlab Integration
GAO Huiying,NIE Chao,ZHU Guoxiang
(Artillery Academy of PLA,Hefei,230031,China)
Abstract:Intelligence Decision Support System (IDSS) involves lots of calculations and analysis,and this can affect the operational efficiency of the system.Integrating Matlab into the IDSS,and making it compute data alone,which can improve the efficiency of the system so that the system can be designed and implemented easily and more convenient to be used.An example is given in combination with Matlab integration steps and methods,and this method is novelty and practicality.
Keywords:Matlab integration;IDSS;BP neural network;artificial intelligence
0 引 言
智能決策支持系統(tǒng)是在普通決策支持系統(tǒng)的基礎(chǔ)上,集成人工智能研究領(lǐng)域內(nèi)的專家系統(tǒng)而形成的一種新型決策支持系統(tǒng),具備強大的數(shù)據(jù)信息處理能力和學(xué)習(xí)能力,以及更加符合人類智能的科學(xué)決策的能力。但是不可避免的,在系統(tǒng)設(shè)計過程中會涉及到大量計算和分析。而在實際工程應(yīng)用中,一般軟件開發(fā)的智能決策支持系統(tǒng)在數(shù)據(jù)處理、分析和工程計算等方面效率不高,且算法較為復(fù)雜實現(xiàn)比較困難[1]。因此,在系統(tǒng)設(shè)計與實現(xiàn)更加容易、使用更加方便的基礎(chǔ)上,提高數(shù)據(jù)計算和分析能力,成為智能決策支持系統(tǒng)設(shè)計的關(guān)鍵。
在此提出將Matlab集成于智能決策支持系統(tǒng)中,由Matlab單獨負(fù)責(zé)數(shù)據(jù)分析和計算,可以較好地解決上述智能決策支持系統(tǒng)設(shè)計與實現(xiàn)中存在的困難。
1 集成Matlab技術(shù)
Matlab是一種用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,雖然Matlab也可直接用于智能決策支持,但不滿足智能決策支持系統(tǒng)人機交互性強、易用的特點,因為Matlab在端口操作和實時控制方面能力有限;另一方面,其他很多可視化軟件雖然可以比較容易地開發(fā)出人機交互、易用性強的應(yīng)用程序,但是或在數(shù)據(jù)處理、分析和工程計算上效率不高,或在算法實現(xiàn)上比較困難。因此若將Matlab強大的計算能力集成進(jìn)決策支持系統(tǒng),由Matlab單獨負(fù)責(zé)系統(tǒng)的數(shù)據(jù)計算,則可以在很大程度上提高智能決策支持系統(tǒng)的易設(shè)計性、易實現(xiàn)性、人機交互性、易用性和計算能力。
目前,集成Matlab主要有三種方法[2]:
(1) 引擎集成。調(diào)用Matlab引擎庫函數(shù)。
(2) 文件集成。從Matlab中導(dǎo)出數(shù)據(jù),并將數(shù)據(jù)存儲在以mat文件中,以應(yīng)用程序讀取mat文件。
(3) 服務(wù)器集成。將Matlab作為服務(wù)器,智能決策支持系統(tǒng)作為客戶端,客戶端向服務(wù)器發(fā)送數(shù)據(jù)請求,服務(wù)器計算完成后將結(jié)果返回客戶端。
由于方法(2)靈活性不夠,方法(3)需要Matlab同時運行,會加重系統(tǒng)負(fù)擔(dān),因此綜合考慮智能決策支持系統(tǒng)的特點,選用方法(1)。
2 集成Matlab的流程
2.1 建立BP神經(jīng)網(wǎng)絡(luò)模型
BP神經(jīng)網(wǎng)絡(luò)是一種基于誤差反向傳播神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,能學(xué)習(xí)和存貯大量的輸入/輸出模式映射關(guān)系,而無需預(yù)先揭示描述這種映射關(guān)系的數(shù)學(xué)方程,具有運算速度快、容錯能力及動態(tài)適應(yīng)能力強等特性,是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。智能決策支持系統(tǒng)的許多問題都可以由它來解決,因此可以用BP網(wǎng)絡(luò)構(gòu)造系統(tǒng)模型。
BP算法由數(shù)據(jù)流的前向計算和差信號的反向傳播兩個過程構(gòu)成。在正向傳播時,傳播方向為:輸入層→隱層→輸出層,每層神經(jīng)元的狀態(tài)只影響下一層神經(jīng)元。若輸出層得不到期望輸出,則轉(zhuǎn)向誤差信號的反向傳播流程[3]。通過這兩個過程的交替進(jìn)行,在權(quán)向量空間執(zhí)行誤差函數(shù)梯度下降策略,動態(tài)迭代搜索一組權(quán)向量,使網(wǎng)絡(luò)誤差函數(shù)達(dá)到最小,從而完成信息提取和記憶過程。
2.2 歸一化指標(biāo)
影響智能決策的因素很多,但可從解決問題的實際情況出發(fā),選取關(guān)鍵指標(biāo)集作為神經(jīng)網(wǎng)絡(luò)輸入,進(jìn)而構(gòu)造不同時間范圍和不同個體的樣本。關(guān)鍵指標(biāo)的選取既可簡化過多的相關(guān)變量,又可提高網(wǎng)絡(luò)學(xué)習(xí)的效率。由于指標(biāo)體系中的各個指標(biāo)的量綱不同,在明確指標(biāo)集后,需對指標(biāo)數(shù)值大小進(jìn)行歸一化處理,對指標(biāo)數(shù)值進(jìn)行標(biāo)準(zhǔn)化,建立統(tǒng)一的量化標(biāo)準(zhǔn)。神經(jīng)網(wǎng)絡(luò)的輸出為各種決策,為了識別輸出,還必須建立一個相應(yīng)的決策輸出數(shù)據(jù)集,對應(yīng)于各種決策結(jié)果。
2.3 訓(xùn)練網(wǎng)絡(luò)
Matlab軟件在數(shù)值計算上有強大的處理能力,利用其神經(jīng)網(wǎng)絡(luò)的工具箱,可以簡化紛繁的運算工作[4]。通過大樣本的學(xué)習(xí),不斷調(diào)整模型的權(quán)系數(shù),使輸入樣本與輸出樣本相對應(yīng),最終達(dá)到良好的擬合及泛化能力,并且可以將模型保存成文件以便調(diào)用。綜上所述,集成智能決策支持系統(tǒng)的實現(xiàn)步驟如圖1所示。
圖1 智能決策支持系統(tǒng)的實現(xiàn)步驟
3 高校用戶文獻(xiàn)偏好智能決策支持系統(tǒng)
圖書館作為高等院校的文獻(xiàn)收藏機構(gòu),在高等教育中發(fā)揮著巨大作用,要辦好一流的大學(xué),就要辦好一流的圖書館,而文獻(xiàn)的種類和數(shù)量是考察圖書館文獻(xiàn)收藏的重要指標(biāo)[5]。由于經(jīng)費有限,很多圖書館并不能購買所有需要文獻(xiàn),如何在有限的經(jīng)費條件下,使文獻(xiàn)收藏的種類和數(shù)量符合高校不同專業(yè)用戶的需求。其中一個重要的方法就是對高校不同專業(yè)用戶的文獻(xiàn)偏好數(shù)據(jù)進(jìn)行長期、大量的統(tǒng)計和分析。以下是利用集成Matlab智能決策支持系統(tǒng)對高校用戶文獻(xiàn)偏好進(jìn)行決策分析的實現(xiàn)過程。
3.1 讀入數(shù)據(jù)
讀入數(shù)據(jù)前應(yīng)該注意所有的量化指標(biāo)必須寫入到數(shù)據(jù)表中,數(shù)據(jù)庫的類型可以根據(jù)實際情況的不同自行選擇。讀入數(shù)據(jù)算法如下:
AnString s;file *fp;
int col=0,line=0;
s=Table1→FieldByName(\"BookMark\"+AnsiString(col))→AsString+\" \";
Tablel→Next();
if(col==Tablel→FieldCount)
{
col++;
line++;
fprintf(fp,\"%s\\\\",s);
s=\" \"}
在數(shù)據(jù)表中,每個字段用“BookMark1”,“BookMark2…”表示。通過上面的代碼首先把第一列數(shù)據(jù)讀取到字符串中,并寫入數(shù)據(jù)文件,當(dāng)?shù)竭_(dá)數(shù)據(jù)表末尾時,清空字符串,讀取下一列數(shù)據(jù),寫入數(shù)據(jù)文件,依次類推,直到讀取數(shù)據(jù)表中所有的數(shù)據(jù)。
3.2 神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)
對BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練及檢驗過程主要由Matlab引擎庫中的函數(shù)完成,設(shè)計人員通過參數(shù)的設(shè)置及調(diào)整使模型達(dá)到滿意狀態(tài)[6,7]。神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)前應(yīng)保證已經(jīng)將Matlab引擎庫的頭文件engine.h加入了系統(tǒng)中,系統(tǒng)能夠正常的調(diào)用Matlab引擎庫中的函數(shù)。神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)代碼如下:
file *file-1,*file-2;
file-1=fopen (filepath);
file-2=fscanf(file-1,′%if′,[col,line]);
net = init(net);
net=newff(P,T,err_goal,spread);
net.trainParam.epochs=**;
net.trainParam.goal=**;
net=train(net,P,T)
訓(xùn)練前饋網(wǎng)絡(luò)的第一步是建立網(wǎng)絡(luò)對象,在對網(wǎng)絡(luò)模型初始化后(init(net)),利用函數(shù)newff()即可建立一個可訓(xùn)練的前饋網(wǎng)絡(luò),它包括四個參數(shù):P為R×2的矩陣,定義R個輸入向量的最小值和最大值;T為設(shè)定每層神經(jīng)元個數(shù)的數(shù)組;err_goal是包含每層用到的傳遞函數(shù)名稱的細(xì)胞數(shù)組;spread是用到的訓(xùn)練函數(shù)的名稱[8,9]。通過以上代碼即可進(jìn)行神經(jīng)網(wǎng)絡(luò)學(xué)習(xí),從學(xué)習(xí)中得到高校不同專業(yè)用戶的偏好。
3.3 仿真運算與輸出
在應(yīng)用輸入具體的量化指標(biāo)后,調(diào)用Matlab引擎庫中的函數(shù)來進(jìn)行仿真運算,最終得到合適的高校不同專業(yè)用戶的輸出,并將之寫入數(shù)據(jù)庫中。
Engine *myeng;mxArray *file_in,*file_out;
file_in=mxCreateDoubleMatrix(col,line,mxREAL);
memcpy((void*)mxGetPr(file_in),(void*)data,col*line*sizeof(double));
engPutVariable(myeng,\"para\",file_in);
engEvalString(myeng,\"filepath\");
engEvalString(myeng,\"target=sim(net,para);\");
file_out=engGetVariable(myeng,\"target\");
double *result=mxGetPr(file_out);
A=mxGetN(file_out) B=mxGetM(file_out);
for(int i=0;i