m基于遗传优化的复杂工序调度matlab仿真,输出甘特图和优化收敛图

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        遗传算法 (Genetic Algorithm,GA) 是一种基于规律进化的随机优化搜索算法,该算法最早是由Holland在1975年提出的。遗传算法的主要优势是通过对目标对象进行优化操作,并通过基于概率的搜索方法,获得相应的搜索空间,因此GA算法具有较强的全局搜索能力。由于遗传算法特有的全局搜索能力,其被广泛使用在各个领域,包括信号处理,机器学习以及控制域等。遗传优化的主要算法流程图如下图所示:

       遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。遗传算法的实现过程实际上就像自然界的进化过程那样。

遗传算法的一般步骤:

1.随机产生种群

2.根据策略判断个体的适应度,是否符合优化准则,若符合,输出最佳个体及其最优解,结束。否则,进行下一步

3.依据适应度选择父母,适应度高的个体被选中的概率高,适应度低的个体被淘汰

4.用父母的染色体按照一定的方法进行交叉,生成子代

5.对子代染色体进行变异

由交叉和变异产生新一代种群,返回步骤2,直到最优解产生

基本遗传算法的具体过程如下:

这里写图片描述

2.仿真效果预览

matlab2022a仿真如下:

 

3.MATLAB核心程序

.........................................................
Lens = data(:,2);

NUM  = length(Lens);%x,y
%间隔
SCALE= 45/60;%转换为小时
Sums = 29;   %每一行的最大值不大于29
Sums2= 24;   %每一行的总和不大于24
%纵坐标最大范围
Ymax = 24;
%放射变换
%根据遗传算法进行参数的拟合
MAXGEN = 400;
NIND   = 2000;
Chrom  = crtbp(NIND,NUM*10);
%49个变量的区间
Areas  = [];
for i = 1:NUM
    Areas  = [Areas,[1;Ymax]];%最多24行
end
 
FieldD = [rep([10],[1,NUM]);Areas;rep([0;0;0;0],[1,NUM])];

Error  = zeros(1,MAXGEN);
Error2 = zeros(1,MAXGEN);
for a=1:1:NIND 
    J(a,1)  = 0;
end
Objv  = (J+eps);
gen   = 0; 



while gen < MAXGEN;   
      gen
      FitnV=ranking(Objv);    
      Selch=select('sus',Chrom,FitnV);    
      Selch=recombin('xovsp', Selch,0.995);   
      Selch=mut( Selch,0.005);   
      phen1=bs2rv(Selch,FieldD);   
      
      for a=1:1:NIND  
          YY  = round(phen1(a,:));

          flag= [];
          %设置约束条件,间隔
          for i = 1:Ymax
              indx{i} = find(YY == i);%找到每一行的序列号
          end

          Xs=[];
          Ys=[];
          Ls=[];
 
          
          flag = zeros(1,Ymax);
          Numss= 0;
          for i = 1:Ymax
              NO   = indx{i};
              X0   = [];
              Ltmps= Lens(NO);
              Ytmps= YY(NO);
              for j = 1:length(NO)
                  if j == 1
                     X0(j) = 0;
                  else
                     X0(j) = X0(j-1)+Ltmps(j-1)+SCALE; 
                  end
              end
              Xs=[Xs,X0];
              Ys=[Ys,Ytmps]; 
              Ls=[Ls,Ltmps'];


              if  isempty(NO)==0
                  Numss = Numss+1; 
                  if X0(end) + Ltmps(end) <= Sums & sum(Ltmps) <= Sums2
                     flag(i)=1;
                  else
                     flag(i)=0;
                  end
              end
          end
          epls = func_obj(Xs,Ys,Ls,Ymax);
          
          
          %符合约束条件的进行输出
          E       = epls;
          JJ(a,1) = E;

          
          XX_{a}  = Xs;
          YY_{a}  = Ys;
          LL_{a}  = Ls;
      end

      Objvsel=(JJ);    
      [Chrom,Objv]=reins(Chrom,Selch,1,0,Objv,Objvsel);   
      gen=gen+1; 
      
      Error(gen)=min(JJ);
      
      if gen <= 64
         Error2(gen) = mean(Error(1:gen));
      else
         Error2(gen) = mean(Error(gen-64:gen)); 
      end
end 

figure;
plot(Error2,'b-o');
xlabel('迭代次数');
ylabel('优化目标值');
grid on


%得到最优坐标
[V,I] = min(JJ);
X_opt = XX_{I};
Y_opt = YY_{I};
L_opt = LL_{I};
%画出甘特图

for i = 1:length(L_opt)
    indx   = find(Lens==L_opt(i))
    NO2_(i)= indx(1);
end

figure;
for i=1:length(X_opt)  
    hold on;
    plotRec(X_opt(i),X_opt(i)+L_opt(i),Y_opt(i)); 
    text((X_opt(i)+X_opt(i)+L_opt(i))/2,Y_opt(i)-0.5,num2str(NO2_(i)));
end
xlabel('时间');
ylabel('序号');
title('甘特图');
02_053m

4.完整MATLAB

V

Matlab车间调度甘特图是一种用于可视化车间调度问题的工具。它可以帮助用户更好地理解和规划车间调度过程。下面是介绍Matlab车间调度甘特图的几个方面: 1. 什么是车间调度甘特图? 车间调度甘特图是一种表,用于显示车间中各个任务的开始时间、结束时间和持续时间。它以时间为横,任务为纵轴,通过条形的方式展示任务的时间安排,使用户可以清晰地了解任务之间的关系和时间分配情况。 2. Matlab中如何绘制车间调度甘特图? 在Matlab中,可以使用plot函数或者bar函数来绘制车间调度甘特图。首先,需要确定任务的开始时间、结束时间和持续时间,并将其转化为合适的数据格式。然后,使用plot函数或者bar函数将任务的时间信息以条形的形式展示出来。 3. 车间调度甘特图的应用场景有哪些? 车间调度甘特图可以应用于各种车间调度问题,例如生产线上的任务安排、机器设备的维护计划等。它可以帮助用户合理安排任务的时间,优化生产效率,提高资源利用率。 4. 如何解读车间调度甘特图? 在车间调度甘特图中,每个任务的条形表示该任务的时间安排。任务的开始时间和结束时间可以通过条形的位置和长度来确定。用户可以根据任务的时间信息,判断任务之间的先后顺序、重叠情况以及整体的时间分配情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值