编程语言
首页 > 编程语言> > 【车间调度】基于nsgaII算法求解车间调度matlab源码

【车间调度】基于nsgaII算法求解车间调度matlab源码

作者:互联网

1 模型介绍

模型参考这里

2 部分代码

%主函数
 
clear all;
clc;
pop = 200; %种群数量
gen = 10; %迭代次数
pop_f=100;%父代种群数量
data_mac;%载入车间设备信息
data_pro;%载入待加工工件信息
pro_matrix=[];%包含工序及目标函数值得决策矩阵
mac_matrix=[];%包含设备染色体信息的决策矩阵
for i=1:pop_f%生成初始种群
    [P,M,N]=initPop(J);
    [part_t,mac_t]=decode(J,P,M,N);
    c_time=cal_comp_time(part_t);
    d_time=cal_def_time(J,part_t);
    t_load=cal_equ_load(part_t);
    t_cons=cal_ene_consu(Mac,mac_t,P,M,c_time);
    pro_matrix(i,:)=[P,c_time,d_time,t_load,t_cons];
    mac_matrix(i,:)=M;
end
for i = 1 : gen
    pool = round(pop/2);%round() 四舍五入取整 交配池大小
    tour = 2;%竞标赛  参赛选手个数
    [p_matrix,m_matrix]= non_domination_sort_mod(pro_matrix,mac_matrix);%种群进行非支配快速排序和拥挤度计算
    clear pro_matrix;
    clear mac_matrix;
    [p_parent_chromosome,m_parent_chromosome] = tournament_selection(p_matrix,m_matrix,pool,tour);%竞标赛选择适合繁殖的父代
    %交叉变异生成子代种群
    [p_child_matrix,m_child_matrix]=genetic_operator(J,p_parent_chromosome,m_parent_chromosome);
    %根据父类和子类总种群,进行非支配快速排序,选取出下一代的父代种群
    for j=1:size(p_child_matrix,1)
        P=p_child_matrix(j,:);
        M=m_child_matrix(j,:);
        N=machine_index(J,P,M);
        [part_t,mac_t]=decode(J,P,M,N);
        c_time=cal_comp_time(part_t);
        d_time=cal_def_time(J,part_t);
        t_load=cal_equ_load(part_t);
        t_cons=cal_ene_consu(Mac,mac_t,P,M,c_time);
        pro_matrix(j,:)=[P,c_time,d_time,t_load,t_cons];
        mac_matrix(j,:)=M;
    end
    n_p_m=size(pro_matrix,1);
    pro_matrix(n_p_m+1:n_p_m+10,:)=p_matrix(1:10,1:size(pro_matrix,2));%保留精英染色体到子代种群中
    mac_matrix(n_p_m+1:n_p_m+10,:)=m_matrix(1:10,:);
end
[p_matrix,m_matrix]= non_domination_sort_mod(pro_matrix,mac_matrix);
num_of_level_1=length(find(p_matrix(:,size(p_matrix,2)-1)==1));
target_p_matrix=p_matrix(1:num_of_level_1,:);
target_m_matrix=m_matrix(1:num_of_level_1,:);
best_p=target_p_matrix(1,:);%选取第一个作为最优解,可根据需求,选择AHP和熵权法或模糊决策法,选出最优解
best_m=target_m_matrix(1,:);
P=best_p(1:length(best_p)-6);
M=best_m;
N=machine_index(J,P,M);
[~,mac_t]=decode(J,P,M,N);
ganttChart1(J,best_p,M,mac_t);
 
​

3 仿真结果

img

4 参考文献

[1]鞠海华, 刘长安, 张伟,等. 基于带精英策略的NSGA-Ⅱ遗传算法的车间作业调度研究[J]. 组合机床与自动化加工技术, 2008, 000(004):15-19.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

标签:车间,matrix,pro,cal,调度,mac,源码,time,part
来源: https://blog.csdn.net/qq_59747472/article/details/120517801