朱 呂,姚錫凡,徐 川
(華南理工大學 機械與汽車工程學院,廣州 510640)
基于JBoss Drools的車間調度*
朱 呂,姚錫凡,徐 川
(華南理工大學 機械與汽車工程學院,廣州 510640)
JBoss Drools是開源業務規則引擎,它能夠將程序中復雜的條件語句以規則的形式展示出來,從而便于管理程序。車間作業調度是復雜的條件調度,利用JBoss Drools可以實現車間調度的優化問題。文章利用云制造的思想,將制造資源虛擬化為服務,然后將服務綁定為一個流程來定義業務流程并結合業務規則引擎來實現產品流程加工,最后通過選擇FT46柔性作業問題實例來驗證制造資源調度的有效性。
JBoss Drools;車間調度;業務流程;云制造
云計算(Cloud Computing)是近年來提出的一種基于互聯網的計算新模式,其特點是將互聯網上計算資源(如存儲、運算器等)虛擬化為一個大的資源池,用來提供統一的服務。其服務模式主要有:基礎架構即服務(Infrastructure as a Service,IaaS)、軟件即服務(Software as a Service,SaaS)和平臺即服務(Platform as a Service,PaaS),資源包括硬件、平臺和軟件等。云制造(Cloud Manufacturing)正是基于云計算的思想,將各種制造資源(如計算資源、設計資源、加工資源、設備資源、物流資源、人力資源等)和制造能力(制造過程中有關的論證、設計、生產、仿真、實驗、管理、集成等)虛擬化、服務化。云制造在服務方式上,它除了云服務(Iaas、PaaS和SaaS)外,還具有設計即服務(Design as a Service,DaaS)、生產加工即服務(Fabrication as a Service,FaaS)等服務模式[1-4]。
Drools是Java編寫的、開放源代碼的業務邏輯集成平臺[5]。Drools是Eclipse的一個插件,利于編寫和調試規則和流程。Drools提供了自動檢查語法錯誤的功能,而且還要有許多其他有用的功能。
Drools有很多優點:①易于理解:比Java或其他命令式的編程語言的代碼更簡單。②提高了系統的維護性能:因為規則簡單易懂,就可以省出更多時間來發現和解決問題。③能夠處理不斷變化的復雜問題:相比修改程序,更容易添加新的規則、修改或刪除現有規則。④靈活性:它能夠更好地適應需求或對數據模型的變化。更改或重寫應用程序不會是一個簡單的任務,但是Drools形式化的規則使得更改或重寫應用程序是一件輕松的事情。⑤合理性能: Rete算法的應用使得系統的性能理論上并不取決于規則的數量。由于規則引擎本質上是“if-then”的繼承,因此可以獨立應用許多優化規則[6-7]。
目前,車間生產調度主要是實現生產資源的優化配置,尤其是對于柔性制造,同一零件可以在不同機床上加工,同一機床又可以加工不同的零件。優化配置的目標就是使得同一時間段里加工的零件最多,也就是生產效率要達到最高。對于一個加工系統,首先要確定收集系統的輸出性能指標(單位時間加工過程中的總產量、接受服務的零件的平均排隊等待時間、最大排對等待時間、最大排隊等待零件數、機床利用率等),然后可以利用規則引擎建立性能指標直接的相互關系,從能得到優化配置后的加工方式[8]。
車間作業調度問題(Job shop scheduling,JSP)是機械加工調度中最重要的研究問題之一,也是制造業提高機床利用率和減少產品循環時間的重要作業。JSP具體描述如下:工件集合{Ji}1≤i≤n,包含n個工件;機床集合{Mi}1≤i≤m,包含m臺機床。每個工件由特定加工順序的mi個工序Oi1,Oi2,,Oimi組成。其中Oij是工件i的第j個工序,工序在機床Mk上的加工時間為tik。每個工序Oij的加工機床Mk和機床對應的加工時間tik是預先設定的。在同一時間內,每臺機床只能加工一個工件且每個工件只能在一臺機床上加工[9-11]。所有工件的所有工序加工完成時間為最長加工時間。車間作業調度決定所有工件的所有工序在機床上的加工順序,而車間調度優化的目的就是尋找最優化的加工順序,即使得最長加工時間最短。
以4個零件,6臺機床同時并行加工的FT46柔性作業問題為例,如表1所示。

表1 FT46問題的時間表
如表1所示為常見的車間作業調度(Job-shop scheduling,JSP)模型,每個工件的每道工序可以選擇不同的機床進行加工,但是工序在不同機床上的加工時間不一樣,就會使得完成這些工件的加工有多種加工路徑可供選擇。為了實現車間資源的合理利用,就要通過一些解決JSP的智能的優化方法來尋找出一條基于給定條件而言是最優的加工路徑。本文利用Drools的形式化規則,基于“先來先服務”規則來求解作業車間調度問題。
本優化規則是按“先來先服務”進行優化設計。圖1所示為基于JBoss Drools的車間調度優化設計流程圖。具體的設計步驟如下:
(1)設置完成工序總數為0,工序總數為12。創建一個空隊列,給每個工序創建二維下標,第一道工序按著下標順序依次進入隊列。
(2)獲取隊列首元素的加工時間,對加工時間進行排序以求出最短加工時間,同時獲取對應加工時間的機床狀態。
(3)判斷最短加工時間的機床狀態是否是空閑狀態,如果是最短加工時間對應的機床是空閑狀態,則該機床進行加工此工序,同時將該機床加工狀態設置為運行狀態;如果最短加工時間對應的機床是運行狀態,則繼續判斷加工時間序列表第二短加工時間對應的機床是否為空閑狀態,以此類推,直到工序以找到空閑機床以最短加工時間進行加工。
(4)機床加工完工序后將加工狀態設置為空閑狀態,同時將此工序的下標增加一個單位后重新進入隊列,然后將完成工序總數增加一個單位。
(5)判斷完成工序總數與總工序數是否相等,若相等,則表示所有工件的工序都已完成加工,這時設置所有機床狀態為關閉狀態,系統結束加工。若不相等,則表示還有工件的工序沒有加工,這時返回到(1)處,重復(1)至(5)步驟。

圖1 車間調度流程圖
(1)以面向對象方法來設計
1) MachineState類:設置和返回機床加工狀態;
2) WorkpieceIndex類:設置和返回工件工 序的下標值;
3) WorkpieceNumber類:設置和返回已完成加工的工序數;
4) Queue類:先進先出隊列表,負責工序進出隊列;
5) ProcessTime類:獲取機床對工件工序的加工時間,并按時間最短到最長排序;
(2) 類圖如圖2所示。

圖2 Drools程序類圖
MachineStation類的方法:getMachineStation()當工件進入隊列首時獲取機床的加工狀態(Busy或Free),以判斷機床是否可以加工該工件;setMachineStation()當機床開始加工工件或機床加工完成工件時設置機床的狀態(Busy或Free);Start()啟動機床開始加工工序。
WorkpieceIndex類的方法:getWorkpieceIndex()當工件加入隊列隊首時獲取工件工序的下標,以判斷目前加工的工序;setWorkpieceIndex()當工件工序加工完成后設置工序下標以加工下一個工序。
Queue類的方法:put()將工件的工序插入到隊列中等待加工;get()將隊列隊首的工序取出加工。
ProcessTime類的方法:getProcessTime()獲取隊列隊首的工序的加工時間;rankProcessTime()將獲取的工序的不同的加工時間進行排序,以便獲得最短加工時間。
WorkFinishedNumber類的方法:getWorkfinishedNumber()獲取已完成工序的總數量,以判斷加工是否完成;setWorkFinishedNumber()當完成一個工序加工時將工序完成總數量增加。
(3)類的方法編碼實現
1)MachineStation類的方法
public String getMachinStation(){
return MachineStation;}
public void setMachineStation(String MachineStation){
this.MachineStation=MachineStation}
2)WorkpieceIndex類的方法
public int WorkpieceIndex;
public int getWorkpieceIndex(){
return WorkpieceIndex;}
public void setWorkpieceIndex(int WorkpieceIndex){
this.WorkpieceIndex=WorkpieceIndex;}
3)Queue類的方法
public Object get(){
if(!linkedList.isEmpty())
returnlinkedList.removeFirst();
else
return "";}
public boolean isEmpty(){
returnlinkedList.isEmpty();}
4)ProcessTime類的方法
public class ProcessTime {
public int getProcessTime(){
returnrankProcessTime();}
public static void rankProcessTime()
{………………………………………………………………}
5)WorkFinishedNumber類的方法
public int getWorkFinishedNumber(){
return WorkFinishedNumber;}
public void setWorkFinishedNumber(int WorkFinishedNumber){
this.WorkFinishedNumber=WorkFinishedNumber;
…………………………………………………………}
(4)規則文件
rule "Put WorkPiece into Queue"
when
WorkpieceIndex(WorkpieceIndex Incease)
then
Queue(Queue.put(WorkpieceIndex)
rule "WorkPiece selcet Machine"
when
MachineStation(MachineStation==Free)
ProcessTime(ProcessTime==minProcessTime)
then
System.out.println(MYMWorkpieceIndex.getWorkpieceIndex)
MachineStation(MachineStation==Busy)
end
rule "WorkPiece ReSelect Machine"
when
MachineStation(MachineStation==Busy) then
ProcessTime.getOtherPorcessTime
System.out.println(MYMWorkpieceIndex.getWorkpieceIndex)
end
rule "Workpiece continue machining"
when
WorkpieceStation(WorkpieceStation==Finishe)
then
WorkpieceIndex.setWorkpieceIndex()
WorkFinishedNumber.setWorkFinishedNumber()
…………………………………………………………
(5)測試代碼
public static void main(String[] args) {
ProcessTime.minProcessTime();
int a[][]= new int[12][6];
WorkFinishedNumber.setWorkFinishedNumber(0);
MachineStation.setMachineStation("Free");
WorkpieceIndex.getWorkpieceIndex();
Queue.put(WorkpieceIndex.getWorkpieceIndex());
…………………………………………………………}
(6)測試結果
所得結果轉換為甘特圖如圖3所示。

圖3 基于Drools車間調度的甘特圖
由此可見,Drools規則可以簡化條件循環模塊,當某一機床發生故障時,只需將該機床與對應工序的關聯設置為0即可,不用改動程序就能實現動態調動。
本文基于云制造的思想,將工件、工序和機床虛擬化為服務,并利用Drools實現車間調度問題,相比于其他車間調度方法,具有程序簡潔、流程清晰、修改方便、能夠實現動態調度等優點。但是隨著工件、工序和機
床的增多,基于Drools的規則定義文件的復雜度也會大大提高。這一問題可以利用Hadoop MapReduce方法來解決。MapReduce是一種處理和生成超大數據集的算法模型,能夠利用低廉的計算資源實現大量的并行運算,對于解決大規模作業調試問題具有潛力。
[1] 姚錫凡, 練肇通, 李永湘,等. 面向云制造服務架構及集成開發環境 [J]. 計算機集成制造系統, 2012, 18(10): 2312-2322.
[2] 李伯虎, 張霖, 柴旭東. 云制造概論 [J]. 中興通訊技術, 2010(4): 5-8.
[3] Xu Xun. From cloud computing to cloud manufacturing[J]. Robotics and Computer-Integrated Manufacturing, 2012, 28(1): 75-86.
[4] 李伯虎, 張霖, 任磊,等. 再論云制造 [J]. 計算機集成制造系統, 2011, 17(3): 449-457.
[5] JBoss. Drools[EB/OL].http://www.jboss.org/drools/.2013-08-20
[6] Browne Paul. JBoss Drools Business Rules [M]. UK: Packt Publishing Ltd., 2009.
[7] 楊一鳴. 基于規則引擎的CRM系統的設計與實現 [D].上海:復旦大學, 2011.
[8] 顏亮. 遺傳算法在車間作業調度上的應用 [J]. 組合機床與自動化加工技術, 2008(11): 99-102.
[9] 顏亮, 姚錫凡. 一種改進的遺傳算法在車間作業調度上的應用 [J]. 機床與液壓, 2008, 36(11): 11-14.
[10] 黃英杰. 基于目標級聯法和智能優化算法的車間調度問題研究 [D]. 廣州:華南理工大學, 2012.
[11] 黃英杰, 姚錫凡, 顏亮,等. 基于目標級聯法的作業車間調度 [J]. 華南理工大學學報(自然科學版), 2010, 38(6): 128-133.
(編輯 趙蓉)
Job-shop Scheduling Based on Jboss Drools
ZHU Lv, YAO Xi-fan, XU Chuan
(School of Mechanical and Automobile Engineering,South China University of Technology, Guangzhou 510640,China)
JBoss Drools is an open source business rule engine, which can facilitate management program by programming complex conditional statements in the form of rules. Job-shop scheduling is a complex condition problem,and such problems can be solved by using JBoss Drools. This study uses the thought of cloud manufacturing to virtualize manufacturing resources as services, and binds such services for business processes with the business rule engine to implement. Finally, the flexible job-shop problem, FT46, is chosen to verify the effectiveness of manufacturing resource scheduling.
JBoss Drools; Job-Shop; business processes
1001-2265(2014)06-0131-04
10.13462/j.cnki.mmtamt.2014.06.036
2013-10-21
國家自然科學基金項目(51175187);國家863計劃資助項目(2007AA04Z111);東莞市科技計劃項目(2012108102010)
朱呂(1984—),男,彝族,云南楚雄人,華南理工大學碩士研究生,研究方向為數字化制造及其計算機控制,(E-mail)ggyy7763@sina.com。
TH181;TG65
A