【車間調(diào)度】基于遺傳算法實(shí)現(xiàn)柔性車間調(diào)度問(wèn)題附Matlab代碼
1 簡(jiǎn)介
針對(duì)傳統(tǒng)作業(yè)車間調(diào)度存在加工設(shè)備功能單一,加工工序?qū)?yīng)設(shè)備固定的問(wèn)題,采用遺傳算法進(jìn)行求解優(yōu)化.通過(guò)一個(gè)8個(gè)工件,每工件8道工序的應(yīng)用實(shí)例進(jìn)行測(cè)試,驗(yàn)證了該方法切實(shí)可行有效.





2 部分代碼
%-------------------------計(jì)算各染色體的適應(yīng)度-----------------------
function [fit,Y1,Y2,Y3] = object(p,TN,N,P,m,n) ?%計(jì)算各染色體的適應(yīng)度
fit = zeros(N,1);
Y1 = cell(N,1);
Y2 = cell(N,1);
Y3 = cell(N,1);
? ?for j = 1:N
? ? ? ?Y1{j} = zeros(m,n);
? ? ? ?Y2{j} = zeros(m,n);
? ? ? ?Y3{j} = zeros(m,n);
? ?end
for w = 1:N
? ?X = p{w}; ? ? ? ? ? ? ? ? ?%變量初始化
? ?T = TN{w};
? ?[m,n] = size(X);
? ?Y1p = zeros(m,n);
? ?Y2p = zeros(m,n);
? ?Y3p = zeros(m,n);
? ?Q1 = zeros(m,1); ? ? ? ? %計(jì)算第一道工序的安排
? ?Q2 = zeros(m,1);
? ?R = X(:,1); ? ? ? ? ? ? %取出第一道工序的機(jī)器號(hào)
? ?Q3 = floor(R); ? ? ? ? ?%向下取整得到各工件在第一道工序使用的機(jī)器號(hào)
? ?for k =1:P(1) ? ? ? ? ? %第一道工序的時(shí)間安排,k為機(jī)器號(hào)
? ? ? ?pos = find(Q3 == k); ? ? %在Q3中取出用機(jī)器k加工的工件編號(hào)
? ? ? ?lenpos = length(pos); ? ?%使用機(jī)器k的工件數(shù)量
? ? ? ?if lenpos == 0
? ? ? ?end
? ? ? ?if lenpos >= 1
? ? ? ? ? ?Q1(pos(1)) = 0;
? ? ? ? ? ?Q2(pos(1)) = Q1(pos(1)) + T(pos(1),1);
? ? ? ? ? ?if lenpos >= 2
? ? ? ? ? ? ? ?for j = 2:lenpos
? ? ? ? ? ? ? ? ? ?Q1(pos(j)) = Q2(pos(j-1));
? ? ? ? ? ? ? ? ? ?Q2(pos(j)) = Q1(pos(j)) + T(pos(j),1);
? ? ? ? ? ? ? ?end
? ? ? ? ? ?end
? ? ? ?end
? ?end
? ?Y1p(:,1) = Q1;
? ?Y2p(:,1) = Q2;
? ?Y3p(:,1) = Q3;
? ?for k = 2:n ? ? ? ? ? ?%計(jì)算第2到n道工序的安排
? ? ? ?Q1 = zeros(m,1);
? ? ? ?Q2 = zeros(m,1);
? ? ? ?R = X(:,k); ? ? ? ?%取出第k道工序的機(jī)器號(hào)
? ? ? ?Q3 = floor(R); ? ? %向下取整得到各工件在第k道工序使用的機(jī)器號(hào)
? ? ? ?R1 = X(:,k-1); ? ? %取出前一道工序的機(jī)器號(hào)
? ? ? ?Q31 = floor(R1); ? %向下取整得到各工件在前一道工序使用的機(jī)器號(hào)
? ? ? ?for i = 1:P(k) ? ? %第i道工序的時(shí)間安排,k為機(jī)器號(hào)
? ? ? ? ? ?pos = find(Q3 == i);
? ? ? ? ? ?lenpos = length(pos);
? ? ? ? ? ?pos1 = find(Q31 == i);
? ? ? ? ? ?lenpos1 = length(pos1);
? ? ? ? ? ?if lenpos == 0
? ? ? ? ? ?end
? ? ? ? ? ?if lenpos >= 1
? ? ? ? ? ? ? ?EndTime = Y2p(pos(1),k-1);
? ? ? ? ? ? ? ?POS = zeros(1,lenpos1);
? ? ? ? ? ? ? ?for j = 1:lenpos1
? ? ? ? ? ? ? ? ? ?POS(j) = Y2p(pos1(j),k-1);
? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ?EndTime1 = max(POS);
? ? ? ? ? ? ? ?if EndTime1 > EndTime
? ? ? ? ? ? ? ? ? ?EndTime = EndTime1;
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ?EndTime = EndTime;
? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ?Q1(pos(1)) = EndTime;
? ? ? ? ? ? ? ?Q2(pos(1)) = ?Q1(pos(1)) + T(pos(1),k-1);
? ? ? ? ? ? ? ?if lenpos >= 2
? ? ? ? ? ? ? ? ? ?for j = 2:lenpos
? ? ? ? ? ? ? ? ? ? ? ?Q1(pos(j)) = Y2p(pos(j),k-1); ? %前一道工序的結(jié)束時(shí)間
? ? ? ? ? ? ? ? ? ? ? ?if Q1(pos(j)) < Q2(pos(j-1))
? ? ? ? ? ? ? ? ? ? ? ? ? ?Q1(pos(j)) = Q2(pos(j-1));
? ? ? ? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ? ? ? ? ? Q1(pos(j)) = Q1(pos(j));
? ? ? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ? ? ? ? ?Q2(pos(j)) = Q1(pos(j)) + T(pos(j),k);
? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ?end
? ? ? ? ? ?end
? ? ? ?end
? ?Y1p(:,k) = Q1;
? ?Y2p(:,k) = Q2;
? ?Y3p(:,k) = Q3;
? ?end
? ?Y2m = Y2p(:,n);
? ?Y2m1 = Y2p(:,n-1);
? ?Zx = max(Y2m1);
? ?Zp = max(Y2m);
? ?if Zx >Zp
? ? ? ?Zp = Zx;
? ?end
? ?fit(w) = Zp;
? ?Y1{w} = Y1p;
? ?Y2{w} = Y2p;
? ?Y3{w} = Y3p;
end
3 仿真結(jié)果


4 參考文獻(xiàn)
[1]郭慶、張明路、孫立新、劉軒. 基于遺傳算法的柔性車間調(diào)度優(yōu)化[J]. 科學(xué)技術(shù)與工程, 2020, 20(29):6.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問(wèn)題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
