遗传算法求解混合流水车间调度问题(HFSP)三:算法实现二

初始化种群的函数:

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

留下评论

电子邮件地址不会被公开。 必填项已用*标注