m基于NSGAII的多机器多任务调度排序优化matlab仿真,考虑机器任务完成时间、机器总负荷和最大负荷

简介: m基于NSGAII的多机器多任务调度排序优化matlab仿真,考虑机器任务完成时间、机器总负荷和最大负荷

1.算法描述

   NSGA-II是基于的非支配排序的方法,在NSGA上进行改进,也是多目标进化优化领域一个里程碑式的一个算法。

  NSGA-Ⅱ算法是 Srinivas 和 Deb 于 2000 年在 NSGA 的基础上提出的,它比 NSGA算法更加优越:它采用了快速非支配排序算法,计算复杂度比 NSGA 大大的降低;采用了拥挤度和拥挤度比较算子,代替了需要指定的共享半径 shareQ,并在快速排序后的同级比较中作为胜出标准,使准 Pareto 域中的个体能扩展到整个 Pareto 域,并均匀分布,保持了种群的多样性;引入了精英策略,扩大了采样空间,防止最佳个体的丢失,提高了算法的运算速度和鲁棒性。

   NSGA-Ⅱ就是在第一代非支配排序遗传算法的基础上改进而来,其改进主要是针对如上所述的三个方面:

①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了最为优秀的所有个体;

②引进精英策略,保证某些优良的种群个体在进化过程中不会被丢弃,从而提高了优化结果的精度;

③采用拥挤度和拥挤度比较算子,不但克服了NSGA中需要人为指定共享参数的缺陷,而且将其作为种群中个体间的比较标准,使得准Pareto域中的个体能均匀地扩展到整个Pareto域,保证了种群的多样性。

  在NSGA-中,将进化群体按支配时关系分为若干层,第一层为进化群体的非支配个体集合,第二层为在进化群体中去掉第一层个体后所求得的非支配个体集合,第三层为在进化群体中去掉第一层和第二层个体后所求得的非支配个体集合,依此类推。选择操作首先考虑第一层非支配集,按照某种策略从第一层中选取个体;然后再考虑在第二层非支配个体集合中选择个体,依此类推,直至满足新进化群体的大小要求。

2.仿真效果预览
matlab2022a仿真结果如下:

1.png
2.png
3.png

3.MATLAB核心程序

pc     = 0.8;       
ncross = 2*round(npop*pc/2);  
%变异概率
pm     = 0.2;       
nmut   = round(npop*pm);   
 
 
empty.pos   = [];
empty.cost  = [];
empty.dcount= []; 
empty.dset  = [];     
empty.rank  = [];      
empty.cdis  = [];      
pop         = repmat(empty,npop,1);
 
for i=1:npop
    pop(i).pos  = lb + rand(1,nvar).*(ub-lb);
    pop(i).cost = fitness(pop(i).pos);
end
 
[pop,F] = func_sorting(pop);
pop     = func_crowding_distance(pop,F);
pop     = func_2sorting(pop);
bests1  = []; 
bests2  = []; 
bests3  = []; 
for iter=1:maxiter
    iter
    %crossover
    crosspop = repmat(empty,ncross,1);
    crosspop = func_crossover(crosspop,pop,ncross,F,nvar);%%%%%%%%%%%%
     
     %mutation
    mutpop   = repmat(empty,nmut,1);
    mutpop   = func_mutation(mutpop,pop,nmut,lb,ub,nvar);
     
    pop      = [pop;crosspop;mutpop];
    
    [pop,F]  = func_sorting(pop);
    pop      = func_crowding_distance(pop,F);
    pop      = func_2sorting(pop);
    pop      = pop(1:npop);
    [pop,F]  = func_sorting(pop);
    pop      = func_crowding_distance(pop,F);
    pop      = func_2sorting(pop);
    C        =[pop.cost]';
    bests1   =[bests1,mean(C(:,1))]; 
    bests2   =[bests2,mean(C(:,2))]; 
    bests3   =[bests3,mean(C(:,3))]; 
 
    Y1       = C(:,1);
    Y2       = C(:,2);
    Y3       = C(:,3);
    tmps     = [pop.pos];
    
    
    figure(1);
    plot3(Y1,Y2,Y3,'bo');
    xlabel('任务完成时间');
    ylabel('所有任务计算完成时间之和');
    zlabel('单个任务样本完成的最大时间');
    grid on;
    axis([0.98*min(Y1),1.02*max(Y1),0.98*min(Y2),1.02*max(Y2),0.98*min(Y3),1.02*max(Y3)]);
    pause(0.0001);
end
 
figure;
plot(bests1);
xlabel('迭代过程');
ylabel('任务完成时间');
figure;
plot(bests2);
xlabel('迭代过程');
ylabel('所有任务计算完成时间之和');
figure;
plot(bests3);
xlabel('迭代过程');
ylabel('单个任务样本完成的最大时间');
% [VV,II]    = min(Y1+Y2+Y3);
II=8;
Total_time = Y1(II);
Total_WT   = Y2(II);
max_WT     = Y3(II);
X          = tmps(nvar*(II-1)+1:nvar*II);
% Z=fitness(X)
%显示甘特图
[V,I] = sort(X(1:end-1));
 
seq1 = sort(I(1:N1));
seq2 = sort(I(N1+1:N1+N2));
seq3 = sort(I(N1+N2+1:N1+N2+N3));
x1   = mach(seq1);
x2   = mach(seq2);
x3   = mach(seq3);
for i = 1:N1
    c1(1,i) = time1(x1(i)); 
end
for i = 1:N2
    c2(1,i) = time2(x2(i)); 
end
for i = 1:N3
    c3(1,i) = time3(x3(i)); 
end
xx  = [x1,x2,x3]
seq = [seq1,seq2,seq3] 
cc  = [c1,c2,c3] 
02_077m
相关文章
|
16天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
17天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
15天前
|
算法
基于HASM模型的高精度建模matlab仿真
本课题使用HASM进行高精度建模,介绍HASM模型及其简化实现方法。HASM模型基于层次化与自适应统计思想,通过多层结构捕捉不同尺度特征,自适应调整参数,适用于大规模、高维度数据的分析与预测。MATLAB2022A版本运行测试,展示运行结果。
|
16天前
|
运维 算法
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
|
17天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
202 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
129 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
91 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章

下一篇
无影云桌面