張珊靚+王慶喜
摘要:調度是研究資源如何配置問題的理論,流水車間問題是車間調度問題領域的一個子問題,是通過對制造過程作業(yè)計劃,以實現流水車間環(huán)境下生產過程的優(yōu)化調度,其廣泛應用于實際生產,尤其適用于單件大批量生產背景的制造企業(yè)。該文主要研究的是使用布谷鳥搜索算法優(yōu)化車間調度中的流水車間調度的問題。
關鍵詞:布谷鳥搜索算法;流程車間;調度
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)35-0104-02
流水車間調度問題是一個經典的理論問題,擁有簡潔的形式,廣泛的關聯性和高度的計算復雜度。該問題的簡潔性體現在,任務集合上的一個排列就代表了一個調度序列。而關聯性和復雜性體現在,該問題代表了一大類具有排列性質的問題,許多組合優(yōu)化問題都可以歸約到它。在計算理論中,它是NP-難的。
1 布谷鳥搜索算法
布谷鳥搜索算法自從2009年問世以來廣泛醫(yī)用于多個領域,已經成功優(yōu)化多種問題,其搜索能力和優(yōu)化能力被大量證明,該算法的思想可以從如下代碼解釋。
for i=1:n,
nest(i,:)=Lb+(Ub-Lb).*rand(size(Lb));
end
fitness=10^10*ones(n,1);
[fmin,bestnest,nest,fitness]=get_best_nest(nest,nest,fitness);
N_iter=0;
while (fmin>Tol),
new_nest=get_cuckoos(nest,bestnest,Lb,Ub);
[fnew,best,nest,fitness]=get_best_nest(nest,new_nest,fitness); N_iter=N_iter+n;
new_nest=empty_nests(nest,Lb,Ub,pa) ;
[fnew,best,nest,fitness]=get_best_nest(nest,new_nest,fitness); N_iter=N_iter+n;
if fnew fmin=fnew; bestnest=best; end end 2 流水車間問題求解 流水車間調度問題是典型的組合優(yōu)化問題。假設有N個工件,每個工件都按相同的順序經過M臺機器加工,求解各工件的加工順序,使某種預先規(guī)定的目標函數達到最優(yōu)。其最優(yōu)時間求解在Matlab中的實現采用矩陣思想,主要代碼如下。 function [F, PI] = FSPFitness( Problem, x ) P = Problem'; [M, N] = size(Problem); [aaa, ROV] = sort(x); C = zeros(N, M); C(ROV(1), 1) = P(ROV(1), 1); for i = 2:N C(ROV(i), 1) = C(ROV(i-1), 1) + P(ROV(i), 1); end for k = 2:M C(ROV(1), k) = C(ROV(1), k-1) + P(ROV(1), k); end for i = 2:N for k = 2:M C(ROV(i), k) = max(C(ROV(i-1), k), C(ROV(i), k-1)) + P(ROV(i), k); end end F = C(ROV(N), M); PI = ROV; end 3 布谷鳥求解流水車間問題 在用布谷鳥求解流水車間調度問題時,經過隨機鍵編碼方式,布谷鳥找到的每個鳥巢代表了調度問題的一個解,主要代碼如下。 function [fmin,bestnest]=cuckoo_search_fsp(Problem,params) [numMachines,numJobs] = size(Problem); if size(params) == [1, 3] numNests = params(1); pa=params(3); MaxGeneration = params(2); else numNests = 300; pa=0.25; MaxGeneration = 1000; end result = zeros(1, MaxGeneration); nest = rand(numNests, numJobs); fitness = 10e5*ones(1, numNests); [fmin,bestnest,nest,fitness]=get_best_nest(nest,nest,fitness,Problem) for i=1:MaxGeneration, new_nest=get_cuckoos(nest,bestnest); [fnew,best,nest,fitness]=get_best_nest(nest,new_nest,fitness,Problem);
new_nest=empty_nests(nest,pa) ; [fnew,best,nest,fitness]=get_best_nest(nest,new_nest,fitness,Problem);
if fnew fmin=fnew; bestnest=best; end result(i)=fmin; %fprintf('best:%f\n',fmin); end plot(result); 4 仿真測試 仿真測試的測試函數采用Car問題和Rec問題。為了獲得較好準確的結果,求解流水車間調度問題時獨立運行程序20詞,求出20詞中求得最優(yōu)解的次數,然后求出尋優(yōu)率,根據尋優(yōu)率,對比多種算法的優(yōu)劣。主要代碼 Car7=[692 310 832 630 258 147 255; 581 582 14 214 147 753 806; 475 475 785 578 852 2 699; 23 196 696 214 586 356 877; 158 325 530 785 325 565 412; 796 874 214 236 896 898 302; 542 205 578 963 325 800 120]'; Problem = Car7; BESTANSWER = 6590; runTimes = 20; for i=1:runTimes subplot(2,1,1); hold on [Best(i), paixu] = cuckoo_search_fsp(Problem, [25, 500, 0.25]); hold off subplot(2,1,2); xlim([1,runTimes]); hold on plot(Best); hold off drawnow; end count = 0; for i=1:runTimes if Best(i) == BESTANSWER count = count + 1; end end 為了驗證布谷鳥算法求解FSP的性能,對算法沒有采取改進策略,完全依靠算法自身進化機制尋優(yōu)。選擇Car類基準測試問題進行仿真測試,并與螢火蟲算法在離散空間的優(yōu)化性能進行對比。仿真測試的一組結果如圖1所示。 5 結論 本文將布谷鳥搜索算法這一優(yōu)秀的元啟發(fā)式算法應用于流水車間調度問題領域。雖然流水車間調度問題是一個古老的課題,但由于它不可忽略的現實和理論意義,對該問題進一步探索守非常有意義的。本文針對求解以最小時間跨度的流水車間調度問題,具體設計布谷鳥算法,所做的工作有。求解質量是指,在給定的迭代次數內所求解的質量的好壞。本文基于該考慮,觀察和設計布谷鳥算法的各個組成要素,盡可能使算法能夠得到較優(yōu)的調度。 參考文獻: [1] 王慶喜, 趙珊. 基于改進布谷鳥搜索算法的工程設計優(yōu)化[J]. 黑龍江大學自然科學學報, 2017, 345(2):247-52. [2] 陳超. 改進CS算法結合決策樹的云工作流調度[J]. 電子科技大學學報, 2016, 46(6):974-980. [3] 謝麗霞, 王志華. 基于布谷鳥搜索優(yōu)化BP神經網絡的網絡安全態(tài)勢評估方法[J]. 計算機應用,2017, 37(7):1926-1930. [4] 王慶喜, 魏勝利. 基于混沌和非線性規(guī)劃的螢火蟲算法[J]. 科技通報, 2017, 33(5):120-123.