当前位置: 首页 > news >正文

(转载)基于多层编码遗传算法的车间调度算法(matlab实现)

        以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。

1 理论基础

        遗传算法具有较强的问题求解能力,能够解决非线性优化问题。遗传算法中的每个染色体表示问题中的一个潜在最优解,对于简单的问题来说,染色体可以方便地表达问题的潜在解,然而,对于较为复杂的优化问题,一个染色体难以准确表达问题的解。多层编码遗传算法把个体编码分为多层,每层编码均表示不同的含义,多层编码共同完整表达了问题的解,从而用一个染色体准确表达出了复杂问题的解。多层编码遗传算法扩展了遗传算法的使用领域,使得遗传算法可以方便用于复杂问题的求解。

2 案例背景

2.1 问题描述

        车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源、提高企业经济效益的目的。车间调度问题从数学上可以描述为有n个待加工的零件要在m台机器上加工,车间调度的数学模型如下:

2.2 模型建立

        基于多层编码遗传算法的车间调度算法流程如图11-1所示。其中,种群初始化模块初始化种群构成问题的初始解集;适应度值计算模块计算染色体的适应度值;选择操作采用轮盘赌法选择优秀个体;交叉操作采用整数交叉法得到优秀个体;变异操作采用整数变异法得到优秀个体。

 

2.3 算法实现

1.个体编码
5.变异操作
        种群通过变异操作获得新的个体,从而推动整个种群向前进化。变异算子首先从种群中随机选取变异个体,然后选择变异位置posl和pos2,最后把个体中pos1和pos2位的加工工序以及对应的加工机器序号对换,如下所示,交叉位置为2和4。

3 MATLAB程序实现

        根据多层编码遗传算法原理,在MATLAB中编程实现基于多层编码遗传算法的车间调度算法,算法全部代码如下。

3.1 主函数

        主函数首先进行个体初始化,然后采用选择、交叉和变异操作搜索最佳个体,得到最优的车间调度方法,主要代码如下:
%% 清空环境
clc;clear%% 下载数据
load scheduleData Jm T JmNumber
%工序 时间%% 基本参数
NIND=40;        %个体数目
MAXGEN=50;      %最大遗传代数
GGAP=0.9;       %代沟
XOVR=0.8;       %交叉率
MUTR=0.6;       %变异率
gen=0;          %代计数器
%PNumber 工件个数 MNumber  工序个数
[PNumber MNumber]=size(Jm);  
trace=zeros(2, MAXGEN);      %寻优结果的初始值
WNumber=PNumber*MNumber;     %工序总个数%% 初始化
Number=zeros(1,PNumber);     % PNumber 工件个数
for i=1:PNumberNumber(i)=MNumber;         %MNumber工序个数
end% 代码2层,第一层工序,第二层机器
Chrom=zeros(NIND,2*WNumber);
for j=1:NINDWPNumberTemp=Number;for i=1:WNumber%随机产成工序val=unidrnd(PNumber);while WPNumberTemp(val)==0val=unidrnd(PNumber);end%第一层代码表示工序Chrom(j,i)= val;WPNumberTemp(val)=WPNumberTemp(val)-1;%第2层代码表示机器Temp=Jm{val,MNumber-WPNumberTemp(val)};SizeTemp=length(Temp);%随机产成工序机器Chrom(j,i+WNumber)= unidrnd(SizeTemp);end
end%计算目标函数值
[PVal ObjV P S]=cal(Chrom,JmNumber,T,Jm);  %% 循环寻找
while gen<MAXGEN%分配适应度值FitnV=ranking(ObjV);  %选择操作SelCh=select('rws', Chrom, FitnV, GGAP);       %交叉操作SelCh=across(SelCh,XOVR,Jm,T);          %变异操作SelCh=aberranceJm(SelCh,MUTR,Jm,T);            %计算目标适应度值[PVal ObjVSel P S]=cal(SelCh,JmNumber,T,Jm);   %重新插入新种群[Chrom ObjV] =reins(Chrom, SelCh,1, 1, ObjV, ObjVSel);       %代计数器增加gen=gen+1;       %保存最优值trace(1, gen)=min(ObjV);       trace(2, gen)=mean(ObjV);  % 记录最佳值if gen==1Val1=PVal;Val2=P;MinVal=min(ObjV);%最小时间STemp=S;end%记录 最小的工序if MinVal> trace(1,gen)Val1=PVal;Val2=P;MinVal=trace(1,gen);STemp=S;endend% 当前最佳值
PVal=Val1; %工序时间
P=Val2;  %工序 
S=STemp; %调度基因含机器基因%% 描绘解的变化
figure(1)
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid;
legend('解的变化','种群均值的变化');%% 显示最优解
figure(2);
MP=S(1,PNumber*MNumber+1:PNumber*MNumber*2);
for i=1:WNumber  val= P(1,i);a=(mod(val,100)); %工序b=((val-a)/100); %工件Temp=Jm{b,a};mText=Temp(MP(1,i));x1=PVal(1,i);x2=PVal(2,i);y1=mText-1;y2=mText;PlotRec(x1,x2,mText);PlotRec(PVal(1,i),PVal(2,i),mText);hold on;fill([x1,x2,x2,x1],[y1,y1,y2,y2],[1-1/b,1/b,b/PNumber]);text((x1+x2)/2,mText-0.25,num2str(P(i)));
end

3.2 仿真结果

        采用多层编码遗传算法求解车间调度问题,共有6个工件,在10台机器上加工,每个工件都要经过6道加工工序,每个工序可选择机器序号如表11-1所列。每道工序的加工时间如表11-2所列。

 

        算法的基本参数为:种群数目为40,最大迭代次数为50,交叉概率为0.8,变异概率为0.6,算法搜索得到的全部工件完成的最短时间为47s,算法搜索过程如图11-2所示。

 

4 素例扩展

4.1 模糊目标

        在实际的车间调度问题中,工件的加工时间往往需要在客户要求的时间窗口内。因此,对工件加工完成时间进行改进,采用了遵循顾客提货期要求的模糊提交时间。对于工件pi的交货期,梯形模糊数如图11-4所示。模糊分布函数为

 

 

 

 

 

http://www.lryc.cn/news/89401.html

相关文章:

  • Redis的常用数据结构之哈希类型
  • 计算机组成原理-存储系统-缓存存储器(Cache)
  • 打开c语言生成exe文件,出现闪退的解决方法
  • 算法基础学习笔记——⑩DFS与BFS\树与图
  • chatgpt赋能python:Python中可迭代对象的介绍
  • 报表控件FastReport使用指南——如何打开WebP格式的图片
  • 【鲁棒、状态估计】用于电力系统动态状态估计的鲁棒迭代扩展卡尔曼滤波器研究(Matlab代码实现)
  • 整理6个超好用的在线编辑器!
  • ArcGIS10.8下载及安装教程(附安装步骤)
  • AI智能照片编辑:AI Photo for Mac
  • Tuxera for Mac2023中文版读写硬盘U盘工具
  • 项目遇到的实际需求: java从信任所有证书到对server证书进行校验
  • 使用JS来实现轮播图的效果
  • Springboot +spring security,自定义认证和授权异常处理器
  • Dockerfile(1) - FROM 指令详解
  • 【嵌入式Linux】源码菜单配置 | 编译 | 菜单配置的实现 | 源码编译的实现
  • python自动化爬虫实战
  • LVGL-最新版本及其版本定义标准
  • ORB_SLAM2算法中如何计算右目和左目两个特征点的是否匹配?
  • Android 12.0系统Settings主页去掉搜索框
  • 电脑数据丢失如何恢复
  • 大数据分析案例-基于决策树算法构建世界杯比赛预测模型
  • Python 图形界面框架 PyQt5 使用指南
  • 代码随想录算法训练营第四十二天 | 二维dp数组01背包, 力扣 416. 分割等和子集
  • 【1110. 删点成林】
  • 第三章 JVM内存概述
  • 基于SpringBoot的企业客户信息反馈平台的设计与实现
  • 【SA8295P 源码分析】01 - SA8295P 芯片介绍
  • 扩展1:Ray Core详细介绍
  • day08 Spring MVC