getmutation.m

来自「离散算法」· M 代码 · 共 30 行

M
30
字号
% 函数功能: 按照惯性权值in_w,得到“变异”后新的序列
%   |-思想:产生一个随机数r1,若 r1 < in_w 则变异,否则不变
%   |- 变异:随机产生两个位置,交换对应的作业编号
function [out_mutJobSeq] = getMutation(in_jobSeq, in_w);
% 输入:
%   |- in_jobSeq:原作业序列,(1 × jobCount)维
%   |- in_w:      惯性权值,取值为[0, 1]
% 输出:
%   |- out_mutJobSeq:变异后的序列,(1 × jobCount)维
[f_lowCount, f_jobCount] = size(in_jobSeq);
f_rand = rand(1);
out_mutJobSeq = in_jobSeq;

if (f_rand < in_w) % 变异
    % 随机取两个位置 f_ind1,f_ind2
    f_ind1 = ceil(rand(1) * (f_jobCount-1));
    f_ind2 = ceil(rand(1) * (f_jobCount-1));
    % 避免两位置相同,随机加上一个数,超出边界则修正为边界
    if (f_ind1 == f_ind2)
        f_add = ceil(rand(1) * (f_jobCount-1));
        f_ind2 = f_ind2 + f_add;
        if (f_ind2 > f_jobCount)
            f_ind2 = f_jobCount;
        end
    end
    f_swap = in_jobSeq(1, f_ind1);
    out_mutJobSeq(1, f_ind1) = out_mutJobSeq(1, f_ind2);
    out_mutJobSeq(1, f_ind2) = f_swap;
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?