⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getmutation.m

📁 离散算法
💻 M
字号:
% 函数功能: 按照惯性权值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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -