初始化种群的函数:
function pop = initpop(popsize, piecesize)
% 初始化种群
% popsize input 种群规模
% piecesize input 工件数量
% pop output 种群
pop = zeros(popsize, piecesize);
for i = 1:popsize
pop(i, :) = randperm(piecesize);
end
end
计算适应度值的函数:
function fitness = calfitness(objvalue)
% 计算适应度值
% objvalue input 目标函数值
% fitness output 适应度值
fitness = 1 ./ objvalue;
end
制作加工流程矩阵的函数,该矩阵行代表机器,按照工序进行排序(假设工序1有两个机器,则第1行为工序1机器1,第2行为工序1机器2,第3行为工序2机器1……),列代表时间:
function gantt = makegantt(ptr, per, equsize)
% 制作加工流程矩阵
% ptr input 工件时间记录
% per input 工件设备记录
% equsize input 工序设备数量
% gantt output 加工流程矩阵
finaltime = max(max(ptr));
[piecesize, prosize] = size(per);
cumsumequ = cumsum(equsize);
gantt = zeros(sum(equsize), finaltime);
for pro = 1:prosize
for i = 1:piecesize
if pro == 1
equ = per(i, pro);
else
equ = cumsumequ(pro - 1) + per(i, pro);
end
starttime = ptr(i, pro*2-1);
endtime = ptr(i, pro*2);
gantt(equ, starttime:endtime) = i;
end
end
end
生成两个随机数的函数:
function [rl, ru] = makerlru(maxnum)
% 制作两个随机整数, rl < ru
% maxnum input 最大数
% rl output 小随机数
% ru output 大随机数
r1 = randi(maxnum);
r2 =randi(maxnum);
while r2 == r1
r2 = randi(maxnum);
end
rl = min([r1, r2]);
ru = max([r1, r2]);
end