【车间调度】基于改进模因算法的考虑工人安排的分布式灵活作业车间调度问题(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客  

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

经典的分布式柔性作业车间调度问题(DFJSP)主要考虑工厂分配、机器布置、作业排序和运输。迄今为止,相关文献尚未研究工人安排的DFJSP,这在实际制造系统中广泛存在。在本文中,我们研究了工人安排的DFJSP(DFJSPW),其中不仅考虑了工厂,机器和操作,而且同时考虑了工人。针对此问题制定了混合整数线性规划模型。相应地,针对拟议的DFJSPW提出了一种基于NSGA-II结构的改进模因算法(IMA),其目标是同时最小化机器的制造跨度,最大工作量和工人工作量。在 IMA 中,设计了一种简化的两级编码和四种启发式解码方法来对个人进行编码和解码。设计合理的自适应邻域搜索算子,增强IMA的局部搜索能力,加速其收敛。构建了 58 个基准来评估我们提议的 IMA 的绩效。

📚2 运行结果

只有运行结果,没有运行可视化喔。

%% read the time stoppong criteria and benchmark
load('run_time_set.mat')
time_stop=min(run_time_set);
file_all=dir('Instance_*.mat');
for file=1:size(file_all,1)
    file_name=file_all(file).name;
    load(file_name);
    
    %% input parameter
    pop_size=100;
    crossRate=0.8;
    mutationRate=0.3;
    NS_rate=0.1;
    Obj_num=3;
    count=1;
    Population_all=[];
    
    for k=1:count
        tic;
        obj=[];
        %% initlize the neighbor information table
        adap_use_times={[0,0,0,0],[1,1,1,1],[0,0,0,0]};
        %% population initialization
        [pop_st]=initialization(job_num,pop_size,all_oper,ope_set,fa_num,wo_num,ma_set_fa);
        %% decode population
        [Population_st]=decode(job_infor,pop_st,pop_size,job_num,all_oper,fa_num,Fa_ma_set,wo_num,ope_set,ma_set_fa);
        while toc<=time_stop(file)
            %% evolutionary operators
            [cross_pop]=crossPopulate(Population_st,pop_size,all_oper,crossRate,wo_num);
            [mut_pop]=mutation_pop(cross_pop,pop_size,all_oper,mutationRate,fa_num,wo_num);
            [pop_evo]=decode(job_infor,mut_pop,pop_size,job_num,all_oper,fa_num,Fa_ma_set,wo_num,ope_set,ma_set_fa);
            %% combine population
            [Population_home]=[Population_st, pop_evo];
            %% non-dominated sorting and crowding distance 
            len=size(Population_home,2);
            [Population_home_ns]=nondominant_sort(Population_home,len,Obj_num);
            [Population_home_ns]=crowding_distance(Population_home_ns,Obj_num);
            %% ANS operator
            [Population_home_ns,adap_use_times]=ANS_operator(Population_home_ns,all_oper,len,NS_rate,ope_set,job_infor,job_num,fa_num,Obj_num,Fa_ma_set,adap_use_times,wo_num,ma_set_fa);
            %% population selection
            [Population_st,Population_first]=selectPopulate(Population_home_ns,pop_size,Obj_num);
            cur_obj=reshape([Population_first.objectives],[3,length(Population_first)])';
            obj=[obj;round(mean(cur_obj))]
            disp(['Number of PF members = ' num2str(numel(Population_first))])
        end
        %% Combine the optimal Pareto front in each computation
        Population_all=[Population_all,Population_first];
    end
    
    %% Output the final Pareto front of 30 runs
    [Population_ns_all]=nondominant_sort(Population_all,size(Population_all),Obj_num);
    [~,index]=find([Population_ns_all.rank]==1);
    num2=size(index,2);
    Population_ns_one=Population_ns_all(index);
    %% remove the duplicates
    [Population_child_all]=move_repeat(Population_ns_one,num2,Obj_num);
    filename_result=strcat('result_all_',file_name(1:end-4));
    save(filename_result,'Population_child_all');
end
end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Qiang Luo, Qianwang Deng, Guiliang Gong, Xie Guo, Xiahui Liu (2022) A distributed flexible job shop scheduling problem considering worker arrangement using an improved memetic algorithm

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值