魏鵬飛 蘇亞洲
摘 要:隨著控制系統(tǒng)規(guī)模的擴大,流程選擇的復(fù)雜程度倍增,傳統(tǒng)的流程矩陣選擇算法已不能處理上述問題。本文基于計算機的成熟二叉樹理論及其遍歷算法,通過對筒倉工藝流程的設(shè)備上下游關(guān)系進行特殊處理,得到基于二叉樹的糧食筒倉工藝流程選擇算法。該算法為大規(guī)模的筒倉工藝流程選擇提供了新的的思路。
關(guān)鍵詞:流程矩陣;二叉樹;遍歷算法;流程選擇
Abstract:With the expansion of control system scale and the complexity of process selection, the traditional process matrix selection algorithm cant deal with the above problems. Based on the mature binary tree theory of computer and its traversal algorithm, the process selection algorithm of grain silo is obtained by special processing of the relationship between the upstream and downstream equipments of the silo process. This algorithm provides a new and feasible way for large-scale silo process selection and control.
Key words:Process matrix; Binary tree; Traversal algorithm; Process selection
中圖分類號:TP311.1
近年來,隨著國際糧食物流貿(mào)易的蓬勃發(fā)展和國家對糧食倉儲投資力度的增加,糧食倉儲企業(yè)的業(yè)務(wù)范圍不斷擴大,企業(yè)擁有的倉容也逐年擴大,筒倉生產(chǎn)控制系統(tǒng)的規(guī)模伴隨著受控設(shè)備的增多而越來越龐大,流程選擇的復(fù)雜程度更是成倍增加。當項目分期建設(shè)時,為保證分期項目工藝流程的整體性,需將多期項目整體考慮,這樣工藝流程選擇成為控制人員的最大障礙。
1 筒倉控制系統(tǒng)的現(xiàn)狀與問題
對小型的筒倉控制系統(tǒng)(工藝流程條數(shù)≤300條),采用流程矩陣進行流程的選擇與控制,這種方法目前已在多個項目中成功應(yīng)用。隨著控制系統(tǒng)規(guī)模的擴大,流程矩陣算法弊端日益顯露,主要表現(xiàn)在隨著設(shè)備受控數(shù)量成倍的擴大,流程條數(shù)指數(shù)級的增多,矩陣的規(guī)模指數(shù)級擴大,使流程選擇的復(fù)雜度急劇增加[1-2]。流程矩陣的選擇算法顯然已經(jīng)不適于處理上述復(fù)雜的問題。因此,迫切需要一種全新的流程選擇算法,用來解決上述問題。
2 理論基礎(chǔ)
基于成熟的二叉樹理論和遍歷算法,同時通過對筒倉工藝流程中的設(shè)備關(guān)系進行特殊處理,轉(zhuǎn)化為標準的二叉樹結(jié)構(gòu),得到了基于二叉樹的糧食筒倉工藝流程選擇算法[3-4]。
3 算法設(shè)計與實現(xiàn)
3.1 預(yù)處理
①根據(jù)糧食筒倉進出倉工藝流程,梳理設(shè)備的上下游邏輯關(guān)系。②按照工藝流程的類型可以得到多個樹結(jié)構(gòu),這里以其中一個樹結(jié)構(gòu)為例進行討論,見圖1。③需將圖1的樹結(jié)構(gòu)轉(zhuǎn)化為標準的二叉樹結(jié)構(gòu),可方便的使用成熟的二叉樹理論及其遍歷算法來研究工藝流程中設(shè)備之間的上下游關(guān)系。顯然,二叉樹結(jié)點間的父子關(guān)系與工藝流程中設(shè)備的上下游關(guān)系高度一致。見圖2(將A結(jié)點進行處理,V結(jié)點為新增的虛擬結(jié)點)。④從根結(jié)點到任意一個葉子結(jié)點所經(jīng)歷的所有結(jié)點形成的路徑即構(gòu)成了一條工藝流程。
3.2 核心算法流程圖
以預(yù)處理后的二叉樹結(jié)構(gòu)為研究對象進行后續(xù)討論。考慮到算法的通用性,我們選取任意兩個結(jié)點,B和H(見圖3)進行B到H結(jié)點路徑算法的實現(xiàn)。算法的核心是分別從B和H結(jié)點出發(fā),依次找尋B結(jié)點和H結(jié)點的祖先結(jié)點,由此分別得到A-B和A-B-E-H兩條路徑,進而得到從B結(jié)點出發(fā)到H結(jié)點的路徑為B-E-H。
3.3 算法實現(xiàn)
本文采用java語言,實現(xiàn)了單個二叉樹任意兩個結(jié)點之間的路徑。核心的算法程序如下。
3.3.1 結(jié)點實體類實現(xiàn)
public class Node {
String data;
Node parentNode;
Node leftNode;
Node rightNode;
public String getData() {
return data;
}
Node(String v) {
data = v;
parentNode = null;
leftNode = null;
rightNode = null;
}
//省略類的get和set方法
}
3.3.2 任意兩個結(jié)點路徑函數(shù)實現(xiàn)
public static void printLeavesPath(Node leaf1, Node leaf2) {
String leaf1Data = leaf1.getData();
String leaf2Data = leaf2.getData();
Deque
Deque
while (true) {
leaf1Path.offerFirst(leaf1.getData());
leaf1 = leaf1.getParentNode();
if (leaf1 == null) {
break;
}
}
while (true) {
leaf2Path.offerFirst(leaf2.getData());
leaf2 = leaf2.getParentNode();
if (leaf2 == null) {
break;
}
}
String temp = “”;
// 比較兩個葉子結(jié)點的路徑。從根結(jié)點開始往下查找,若發(fā)現(xiàn)結(jié)點不同,則說明兩條路徑從此結(jié)點分叉。
while (leaf1Path.peekFirst() == leaf2Path.peekFirst()) {
temp = leaf1Path.pollFirst();
leaf2Path.pollFirst();
}
Iterator
Iterator
StringBuffer result = new StringBuffer();
while (leaf2Iter.hasNext()) {
result.append(leaf2Iter.next() + seperator);
}
StringBuffer result = new StringBuffer();
result.append(temp + seperator);
while (leaf1Iter.hasNext()) {
result.append(leaf1Iter.next() + seperator);
}
}
4 結(jié)語
顯然,想要得到根結(jié)點和葉子結(jié)點之間的路徑只是上述算法的特例。通過選擇根結(jié)點和葉子結(jié)點,即可確定從根結(jié)點到該葉子結(jié)點所需遍歷的所有結(jié)點,由這些結(jié)點可獲得從根結(jié)點到該葉子結(jié)點的路徑?;謴?fù)根結(jié)點和葉子結(jié)點的原始含義,可得到工藝流程與路徑的一一對應(yīng)關(guān)系。綜上所述,可用二叉樹任意兩結(jié)點的路徑算法來處理糧食筒倉控制系統(tǒng)工藝流程的選擇。
與傳統(tǒng)的流程矩陣選擇算法相比,該算法具有以下優(yōu)點:①兩個結(jié)點即可確定一條工藝流程,減少了結(jié)點數(shù)量的選擇。②通過增加葉子結(jié)點的不同權(quán)重,可篩選出滿足不同權(quán)重的工藝流程,對企業(yè)的節(jié)能有一定的參考價值。③可尋找任意兩個結(jié)點之間的路徑,對流程控制更有意義。在使用該算法時,需注意對設(shè)備的上下游關(guān)系進行人為的拆分,增加虛擬設(shè)備,進而得到標準的二叉樹結(jié)構(gòu)。
應(yīng)用上述算法,對某港務(wù)有限公司控制系統(tǒng)二期續(xù)建工程進行實際應(yīng)用,成功的完成了對一期控制系統(tǒng)的升級和融合。通過選擇首尾設(shè)備或者倉,即可完成一條流程的選擇,簡單快捷、效果良好。
參考文獻:
[1]孫宏偉.ControlLogix在大型順序控制系統(tǒng)中的應(yīng)用[J].電氣時代,2004(5):74-76.
[2]季英業(yè),李 威,陳智偉,等.糧食中轉(zhuǎn)碼頭作業(yè)流程節(jié)能技術(shù)研究[J].中國水運(下半月),2013,13(8):54-55.
[3]霍羅維茲 著,朱仲濤 譯.數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):(C語言版)(第2版)[M].北京:清華大學出版社,2009.
[4]葛一鳴.Java程序性能優(yōu)化[M].北京:清華大學出版社,2012.