📄 jsp.m
字号:
%945
T=[21 71 16 52 26 34 53 21 55 95;
55 31 98 79 12 66 42 77 77 39;
34 64 62 19 92 79 43 54 83 37;
87 69 87 38 24 83 41 93 77 60;
98 44 25 75 43 49 96 77 17 79;
35 76 28 10 61 9 95 35 7 95;
16 59 46 91 43 50 52 59 28 27;
45 87 41 20 54 43 14 9 39 71;
33 37 66 33 26 8 28 89 42 78;
69 81 94 96 27 69 45 78 74 84
];
M=[ 1 6 9 8 7 2 0 4 3 5;
4 2 5 9 0 7 1 8 6 3;
3 2 8 1 4 9 7 6 0 5;
1 3 2 7 8 9 6 0 5 4;
2 0 5 6 7 1 4 9 3 8;
2 3 5 9 4 6 0 8 1 7;
3 2 0 1 9 8 6 5 4 7;
1 0 3 4 6 9 8 5 2 7;
4 2 8 5 3 7 1 6 9 0;
8 9 2 4 3 0 7 6 1 5
];
%将 机器号+1
for i=1:10
S=M(i,:);
for j=1:10
S(j)=S(j)+1;
end
M(i,:)=S;
end
%87
% T=[ 6 3 2 8 3 3 4 8 2 6;
% 1 5 3 8 6 11 2 3 5 9;
% 11 3 7 2 10 2 3 4 4 7;
% 3 5 12 5 3 3 8 4 12 9;
% 2 6 10 6 1 1 2 8 3 7;
% 3 9 4 6 4 2 12 3 2 9;
% 3 1 12 4 2 8 3 2 8 7;
% 3 5 4 3 4 10 5 2 3 11;
% 8 1 12 4 2 8 3 8 8 7;
% 6 5 4 3 4 10 5 6 3 11
% ];
% M=[ 1 2 5 3 7 6 4 9 8 10;
% 3 6 4 10 8 2 7 1 9 5;
% 2 1 9 3 10 7 8 6 5 4;
% 4 6 8 7 1 9 2 3 5 10;
% 7 6 10 9 5 1 2 3 4 8;
% 3 8 9 4 6 7 1 2 5 10;
% 3 7 4 9 10 1 2 5 6 8;
% 3 4 10 8 6 5 2 7 1 9;
% 10 7 4 9 3 8 2 6 5 1;
% 3 10 4 8 6 5 9 7 1 2
% ];
PNumber=10; %零件 个数 3
MNumber=10; %机器个数 3
WPNumber=[10 10 10 10 10 10 10 10 10 10];
%将 时间 处理下
TTemp=T;
for i=1:10
for j=1:10
TTemp(i,j)=T(M(i,j),i);
end
end
T=TTemp;
NIND=40; %个体数目(Number of individuals)
MAXGEN= 200; %最大遗传代数(Maximum number of generations)
GGAP=0.9; %代沟(Generation gap)
XOVR=0.8; %交叉率
MUTR=0.6; %变异率
gen=0; %代计数器
trace=zeros(2, MAXGEN); %寻优结果的初始值
WNumber=0;
for i=1:PNumber
WNumber=WNumber+WPNumber(1,i); %工序个数
end
% 初始化群
Chrom=zeros(NIND,WNumber);
for i=1:NIND
Chrom(i,:)=randperm(WNumber);
end
%计算目标函数值
[PVal ObjV P]=cal(Chrom,NIND,T,M,PNumber,MNumber,WPNumber);
while gen<MAXGEN
FitnV=ranking(ObjV); %分配适应度值(Assign fitness values)
SelCh=select('sus', Chrom, FitnV, GGAP); %选择
SelCh=across(SelCh,NIND*GGAP,XOVR,WNumber); %交叉
SelCh=aberrance(SelCh,NIND*GGAP,MUTR,WNumber); %变异
[PVal ObjVSel P]=cal(SelCh,NIND*GGAP,T,M,PNumber,MNumber,WPNumber); %计算目标函数值
[Chrom ObjV] =reins(Chrom, SelCh,1, 1, ObjV, ObjVSel); %重插入子代的新种群
[PVal ObjVl P]=cal(Chrom,NIND,T,M,PNumber,MNumber,WPNumber); %计算目标函数值
gen=gen+1; %代计数器增加
% %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
trace(1, gen)=min(ObjV); %遗传算法性能跟踪
trace(2, gen)=sum(ObjV)/length(ObjV);
% 初始化
if gen==1
Val1=PVal;
Val2=P;
MinVal=min(ObjV);
end
%记录 最小的工序
if MinVal> trace(1,gen)
Val1=PVal;
Val2=P;
MinVal=trace(1,gen);
end
end
PVal=Val1; %工序时间
P=Val2; %工序
MinVal=MinVal %最小时间
%计算解的变化
hold on;
plot([0,0],[0,0]);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid;
legend('解的变化','种群均值的变化');
%显示结果
figure(2);
for i=1:WNumber
val= P(1,i);
a=(mod(val,10))+1;
b=((val-a+1)/10);
mText=M(b,a);
PlotRec(PVal(1,i),PVal(2,i),mText);
hold on;
mPoint1=PVal(1,i);
mPoint2=PVal(2,i);
x1=mPoint1;
y1=mText-0.5;
x2=mPoint2;
y2=mText-0.5;
x3=mPoint2;
y3=mText;
x4=mPoint1;
y4=mText;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,0.5,1]);
word=num2str(P(1,i));
%text(0.5*mPoint1+0.5*mPoint2,mText-0.5,word);
text(mPoint1,mText-0.7,word);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -