朱 呂,姚錫凡,徐 川
(華南理工大學(xué) 機(jī)械與汽車工程學(xué)院,廣州 510640)
基于JBoss Drools的車間調(diào)度*
朱 呂,姚錫凡,徐 川
(華南理工大學(xué) 機(jī)械與汽車工程學(xué)院,廣州 510640)
JBoss Drools是開源業(yè)務(wù)規(guī)則引擎,它能夠?qū)⒊绦蛑袕?fù)雜的條件語句以規(guī)則的形式展示出來,從而便于管理程序。車間作業(yè)調(diào)度是復(fù)雜的條件調(diào)度,利用JBoss Drools可以實現(xiàn)車間調(diào)度的優(yōu)化問題。文章利用云制造的思想,將制造資源虛擬化為服務(wù),然后將服務(wù)綁定為一個流程來定義業(yè)務(wù)流程并結(jié)合業(yè)務(wù)規(guī)則引擎來實現(xiàn)產(chǎn)品流程加工,最后通過選擇FT46柔性作業(yè)問題實例來驗證制造資源調(diào)度的有效性。
JBoss Drools;車間調(diào)度;業(yè)務(wù)流程;云制造
云計算(Cloud Computing)是近年來提出的一種基于互聯(lián)網(wǎng)的計算新模式,其特點是將互聯(lián)網(wǎng)上計算資源(如存儲、運算器等)虛擬化為一個大的資源池,用來提供統(tǒng)一的服務(wù)。其服務(wù)模式主要有:基礎(chǔ)架構(gòu)即服務(wù)(Infrastructure as a Service,IaaS)、軟件即服務(wù)(Software as a Service,SaaS)和平臺即服務(wù)(Platform as a Service,PaaS),資源包括硬件、平臺和軟件等。云制造(Cloud Manufacturing)正是基于云計算的思想,將各種制造資源(如計算資源、設(shè)計資源、加工資源、設(shè)備資源、物流資源、人力資源等)和制造能力(制造過程中有關(guān)的論證、設(shè)計、生產(chǎn)、仿真、實驗、管理、集成等)虛擬化、服務(wù)化。云制造在服務(wù)方式上,它除了云服務(wù)(Iaas、PaaS和SaaS)外,還具有設(shè)計即服務(wù)(Design as a Service,DaaS)、生產(chǎn)加工即服務(wù)(Fabrication as a Service,F(xiàn)aaS)等服務(wù)模式[1-4]。
Drools是Java編寫的、開放源代碼的業(yè)務(wù)邏輯集成平臺[5]。Drools是Eclipse的一個插件,利于編寫和調(diào)試規(guī)則和流程。Drools提供了自動檢查語法錯誤的功能,而且還要有許多其他有用的功能。
Drools有很多優(yōu)點:①易于理解:比Java或其他命令式的編程語言的代碼更簡單。②提高了系統(tǒng)的維護(hù)性能:因為規(guī)則簡單易懂,就可以省出更多時間來發(fā)現(xiàn)和解決問題。③能夠處理不斷變化的復(fù)雜問題:相比修改程序,更容易添加新的規(guī)則、修改或刪除現(xiàn)有規(guī)則。④靈活性:它能夠更好地適應(yīng)需求或?qū)?shù)據(jù)模型的變化。更改或重寫應(yīng)用程序不會是一個簡單的任務(wù),但是Drools形式化的規(guī)則使得更改或重寫應(yīng)用程序是一件輕松的事情。⑤合理性能: Rete算法的應(yīng)用使得系統(tǒng)的性能理論上并不取決于規(guī)則的數(shù)量。由于規(guī)則引擎本質(zhì)上是“if-then”的繼承,因此可以獨立應(yīng)用許多優(yōu)化規(guī)則[6-7]。
目前,車間生產(chǎn)調(diào)度主要是實現(xiàn)生產(chǎn)資源的優(yōu)化配置,尤其是對于柔性制造,同一零件可以在不同機(jī)床上加工,同一機(jī)床又可以加工不同的零件。優(yōu)化配置的目標(biāo)就是使得同一時間段里加工的零件最多,也就是生產(chǎn)效率要達(dá)到最高。對于一個加工系統(tǒng),首先要確定收集系統(tǒng)的輸出性能指標(biāo)(單位時間加工過程中的總產(chǎn)量、接受服務(wù)的零件的平均排隊等待時間、最大排對等待時間、最大排隊等待零件數(shù)、機(jī)床利用率等),然后可以利用規(guī)則引擎建立性能指標(biāo)直接的相互關(guān)系,從能得到優(yōu)化配置后的加工方式[8]。
車間作業(yè)調(diào)度問題(Job shop scheduling,JSP)是機(jī)械加工調(diào)度中最重要的研究問題之一,也是制造業(yè)提高機(jī)床利用率和減少產(chǎn)品循環(huán)時間的重要作業(yè)。JSP具體描述如下:工件集合{Ji}1≤i≤n,包含n個工件;機(jī)床集合{Mi}1≤i≤m,包含m臺機(jī)床。每個工件由特定加工順序的mi個工序Oi1,Oi2,,Oimi組成。其中Oij是工件i的第j個工序,工序在機(jī)床Mk上的加工時間為tik。每個工序Oij的加工機(jī)床Mk和機(jī)床對應(yīng)的加工時間tik是預(yù)先設(shè)定的。在同一時間內(nèi),每臺機(jī)床只能加工一個工件且每個工件只能在一臺機(jī)床上加工[9-11]。所有工件的所有工序加工完成時間為最長加工時間。車間作業(yè)調(diào)度決定所有工件的所有工序在機(jī)床上的加工順序,而車間調(diào)度優(yōu)化的目的就是尋找最優(yōu)化的加工順序,即使得最長加工時間最短。
以4個零件,6臺機(jī)床同時并行加工的FT46柔性作業(yè)問題為例,如表1所示。
表1 FT46問題的時間表
如表1所示為常見的車間作業(yè)調(diào)度(Job-shop scheduling,JSP)模型,每個工件的每道工序可以選擇不同的機(jī)床進(jìn)行加工,但是工序在不同機(jī)床上的加工時間不一樣,就會使得完成這些工件的加工有多種加工路徑可供選擇。為了實現(xiàn)車間資源的合理利用,就要通過一些解決JSP的智能的優(yōu)化方法來尋找出一條基于給定條件而言是最優(yōu)的加工路徑。本文利用Drools的形式化規(guī)則,基于“先來先服務(wù)”規(guī)則來求解作業(yè)車間調(diào)度問題。
本優(yōu)化規(guī)則是按“先來先服務(wù)”進(jìn)行優(yōu)化設(shè)計。圖1所示為基于JBoss Drools的車間調(diào)度優(yōu)化設(shè)計流程圖。具體的設(shè)計步驟如下:
(1)設(shè)置完成工序總數(shù)為0,工序總數(shù)為12。創(chuàng)建一個空隊列,給每個工序創(chuàng)建二維下標(biāo),第一道工序按著下標(biāo)順序依次進(jìn)入隊列。
(2)獲取隊列首元素的加工時間,對加工時間進(jìn)行排序以求出最短加工時間,同時獲取對應(yīng)加工時間的機(jī)床狀態(tài)。
(3)判斷最短加工時間的機(jī)床狀態(tài)是否是空閑狀態(tài),如果是最短加工時間對應(yīng)的機(jī)床是空閑狀態(tài),則該機(jī)床進(jìn)行加工此工序,同時將該機(jī)床加工狀態(tài)設(shè)置為運行狀態(tài);如果最短加工時間對應(yīng)的機(jī)床是運行狀態(tài),則繼續(xù)判斷加工時間序列表第二短加工時間對應(yīng)的機(jī)床是否為空閑狀態(tài),以此類推,直到工序以找到空閑機(jī)床以最短加工時間進(jìn)行加工。
(4)機(jī)床加工完工序后將加工狀態(tài)設(shè)置為空閑狀態(tài),同時將此工序的下標(biāo)增加一個單位后重新進(jìn)入隊列,然后將完成工序總數(shù)增加一個單位。
(5)判斷完成工序總數(shù)與總工序數(shù)是否相等,若相等,則表示所有工件的工序都已完成加工,這時設(shè)置所有機(jī)床狀態(tài)為關(guān)閉狀態(tài),系統(tǒng)結(jié)束加工。若不相等,則表示還有工件的工序沒有加工,這時返回到(1)處,重復(fù)(1)至(5)步驟。
圖1 車間調(diào)度流程圖
(1)以面向?qū)ο蠓椒▉碓O(shè)計
1) MachineState類:設(shè)置和返回機(jī)床加工狀態(tài);
2) WorkpieceIndex類:設(shè)置和返回工件工 序的下標(biāo)值;
3) WorkpieceNumber類:設(shè)置和返回已完成加工的工序數(shù);
4) Queue類:先進(jìn)先出隊列表,負(fù)責(zé)工序進(jìn)出隊列;
5) ProcessTime類:獲取機(jī)床對工件工序的加工時間,并按時間最短到最長排序;
(2) 類圖如圖2所示。
圖2 Drools程序類圖
MachineStation類的方法:getMachineStation()當(dāng)工件進(jìn)入隊列首時獲取機(jī)床的加工狀態(tài)(Busy或Free),以判斷機(jī)床是否可以加工該工件;setMachineStation()當(dāng)機(jī)床開始加工工件或機(jī)床加工完成工件時設(shè)置機(jī)床的狀態(tài)(Busy或Free);Start()啟動機(jī)床開始加工工序。
WorkpieceIndex類的方法:getWorkpieceIndex()當(dāng)工件加入隊列隊首時獲取工件工序的下標(biāo),以判斷目前加工的工序;setWorkpieceIndex()當(dāng)工件工序加工完成后設(shè)置工序下標(biāo)以加工下一個工序。
Queue類的方法:put()將工件的工序插入到隊列中等待加工;get()將隊列隊首的工序取出加工。
ProcessTime類的方法:getProcessTime()獲取隊列隊首的工序的加工時間;rankProcessTime()將獲取的工序的不同的加工時間進(jìn)行排序,以便獲得最短加工時間。
WorkFinishedNumber類的方法:getWorkfinishedNumber()獲取已完成工序的總數(shù)量,以判斷加工是否完成;setWorkFinishedNumber()當(dāng)完成一個工序加工時將工序完成總數(shù)量增加。
(3)類的方法編碼實現(xiàn)
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)規(guī)則文件
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)測試結(jié)果
所得結(jié)果轉(zhuǎn)換為甘特圖如圖3所示。
圖3 基于Drools車間調(diào)度的甘特圖
由此可見,Drools規(guī)則可以簡化條件循環(huán)模塊,當(dāng)某一機(jī)床發(fā)生故障時,只需將該機(jī)床與對應(yīng)工序的關(guān)聯(lián)設(shè)置為0即可,不用改動程序就能實現(xiàn)動態(tài)調(diào)動。
本文基于云制造的思想,將工件、工序和機(jī)床虛擬化為服務(wù),并利用Drools實現(xiàn)車間調(diào)度問題,相比于其他車間調(diào)度方法,具有程序簡潔、流程清晰、修改方便、能夠?qū)崿F(xiàn)動態(tài)調(diào)度等優(yōu)點。但是隨著工件、工序和機(jī)
床的增多,基于Drools的規(guī)則定義文件的復(fù)雜度也會大大提高。這一問題可以利用Hadoop MapReduce方法來解決。MapReduce是一種處理和生成超大數(shù)據(jù)集的算法模型,能夠利用低廉的計算資源實現(xiàn)大量的并行運算,對于解決大規(guī)模作業(yè)調(diào)試問題具有潛力。
[1] 姚錫凡, 練肇通, 李永湘,等. 面向云制造服務(wù)架構(gòu)及集成開發(fā)環(huán)境 [J]. 計算機(jī)集成制造系統(tǒng), 2012, 18(10): 2312-2322.
[2] 李伯虎, 張霖, 柴旭東. 云制造概論 [J]. 中興通訊技術(shù), 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]. 計算機(jī)集成制造系統(tǒng), 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] 楊一鳴. 基于規(guī)則引擎的CRM系統(tǒng)的設(shè)計與實現(xiàn) [D].上海:復(fù)旦大學(xué), 2011.
[8] 顏亮. 遺傳算法在車間作業(yè)調(diào)度上的應(yīng)用 [J]. 組合機(jī)床與自動化加工技術(shù), 2008(11): 99-102.
[9] 顏亮, 姚錫凡. 一種改進(jìn)的遺傳算法在車間作業(yè)調(diào)度上的應(yīng)用 [J]. 機(jī)床與液壓, 2008, 36(11): 11-14.
[10] 黃英杰. 基于目標(biāo)級聯(lián)法和智能優(yōu)化算法的車間調(diào)度問題研究 [D]. 廣州:華南理工大學(xué), 2012.
[11] 黃英杰, 姚錫凡, 顏亮,等. 基于目標(biāo)級聯(lián)法的作業(yè)車間調(diào)度 [J]. 華南理工大學(xué)學(xué)報(自然科學(xué)版), 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
國家自然科學(xué)基金項目(51175187);國家863計劃資助項目(2007AA04Z111);東莞市科技計劃項目(2012108102010)
朱呂(1984—),男,彝族,云南楚雄人,華南理工大學(xué)碩士研究生,研究方向為數(shù)字化制造及其計算機(jī)控制,(E-mail)ggyy7763@sina.com。
TH181;TG65
A