【车间调度】遗传算法求解车间调度问题(含甘特图)【含Matlab源码 2216期】

news2025/7/30 7:02:39

⛄一、车间调度简介

1 车间调度定义
车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源、提高企业经济效益的目的。车间调度问题从数学上可以描述为有n个待加工的零件要在m台机器上加工。问题需要满足的条件包括每个零件的各道工序使用每台机器不多于1次,每个零件都按照一定的顺序进行加工。

2 传统作业车间调度
传统作业车间带调度实例
在这里插入图片描述
有若干工件,每个工件有若干工序,有多个加工机器,但是每道工序只能在一台机器上加工。对应到上面表格中的实例就是,两个工件,工件J1有三道工序,工序Q11只能在M3上加工,加工时间是5小时。
约束是对于一个工件来说,工序的相对顺序不能变。O11->O12->O13。每时刻,每个工件只能在一台机器上加工;每个机器上只能有一个工件。
调度的任务则是安排出工序的加工顺序,加工顺序确定了,因为每道工序只有一台机器可用,加工的机器也就确定了。
调度的目的是总的完工时间最短(也可以是其他目标)。举个例子,比如确定了O21->O22->O11->O23->O12->O13的加工顺序之后,我们就可以根据加工机器的约束,计算出总的加工时间。
M2加工O21消耗6小时,工件J2当前加工时间6小时。
M1加工O22消耗9小时,工件J2当前加工时间6+9=15小时。
M3加工O11消耗5小时,工件J1当前加工时间5小时。
M4加工O23消耗7小时,工件J2加工时间15+7=22小时。
M1加工O12消耗11小时,但是要等M1加工完O22之后才开始加工O12,所以工件J1的当前加工时间为max(5,9)+11=20小时。
M5加工O13消耗8小时,工件J2加工时间20+8=28小时。
总的完工时间就是max(22,28)=28小时。

2 柔性作业车间调度
柔性作业车间带调度实例(参考自高亮老师论文
《改进遗传算法求解柔性作业车间调度问题》——机械工程学报)
在这里插入图片描述
相比于传统作业车间调度,柔性作业车间调度放宽了对加工机器的约束,更符合现实生产情况,每个工序可选加工机器变成了多个,可以由多个加工机器中的一个加工。比如上表中的实例,J1的O12工序可以选择M2和M4加工,加工时间分别是8小时和4小时,但是并不一定选择M4加工,最后得出来的总的完工时间就更短,所以,需要调度算法求解优化。

相比于传统作业车间,柔性车间作业调度的调度任务不仅要确定工序的加工顺序,而且需要确定每道工序的机器分配。比如,确定了O21->O22->O11->O23->O12->O13的加工顺序,我们并不能相应工序的加工机器,所以还应该确定对应的[M1、M3、M5]->[M1、M2、M3]->[M1、M2、M3、M4、M5]->[M2、M3、M4、M5]->[M2、M4]->[M1、M3、M4、M5]的机器组合。调度的目的还是总的完工时间最短(也可以是其他目标,比如机器最大负荷最短、总的机器负荷最短)

⛄二、遗传算法简介

1 遗传算法概述
遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。

2 遗传算法的特点和应用
遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,具有以下特点:
(1)以决策变量的编码作为运算对象。传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法是使用决策变量的某种形式的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算中可借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化激励,也可以很方便地应用遗传操作算子。
(2)直接以适应度作为搜索信息。传统的优化算法不仅需要利用目标函数值,而且搜索过程往往受目标函数的连续性约束,有可能还需要满足“目标函数的导数必须存在”的要求以确定搜索方向。遗传算法仅使用由目标函数值变换来的适应度函数值就可确定进一步的搜索范围,无需目标函数的导数值等其他辅助信息。直接利用目标函数值或个体适应度值也可以将搜索范围集中到适应度较高部分的搜索空间中,从而提高搜索效率。
(3)使用多个点的搜索信息,具有隐含并行性。传统的优化算法往往是从解空间的一个初始点开始最优解的迭代搜索过程。单个点所提供的搜索信息不多,所以搜索效率不高,还有可能陷入局部最优解而停滞;遗传算法从由很多个体组成的初始种群开始最优解的搜索过程,而不是从单个个体开始搜索。对初始群体进行的、选择、交叉、变异等运算,产生出新一代群体,其中包括了许多群体信息。这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。
(4) 使用概率搜索而非确定性规则。传统的优化算法往往使用确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方向和转移关系,这种确定性可能使得搜索达不到最优店,限制了算法的应用范围。遗传算法是一种自适应搜索技术,其选择、交叉、变异等运算都是以一种概率方式进行的,增加了搜索过程的灵活性,而且能以较大概率收敛于最优解,具有较好的全局优化求解能力。但,交叉概率、变异概率等参数也会影响算法的搜索结果和搜索效率,所以如何选择遗传算法的参数在其应用中是一个比较重要的问题。
综上,由于遗传算法的整体搜索策略和优化搜索方式在计算时不依赖于梯度信息或其他辅助知识,只需要求解影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架。它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于各种领域,包括:函数优化、组合优化生产调度问题、自动控制
、机器人学、图像处理(图像恢复、图像边缘特征提取…)、人工生命、遗传编程、机器学习。

3 遗传算法的基本流程及实现技术
基本遗传算法(Simple Genetic Algorithms,SGA)只使用选择算子、交叉算子和变异算子这三种遗传算子,进化过程简单,是其他遗传算法的基础。

3.1 遗传算法的基本流程
通过随机方式产生若干由确定长度(长度与待求解问题的精度有关)编码的初始群体;
通过适应度函数对每个个体进行评价,选择适应度值高的个体参与遗传操作,适应度低的个体被淘汰;
经遗传操作(复制、交叉、变异)的个体集合形成新一代种群,直到满足停止准则(进化代数GEN>=?);
将后代中变现最好的个体作为遗传算法的执行结果。
在这里插入图片描述
其中,GEN是当前代数;M是种群规模,i代表种群数量。

3.2 遗传算法的实现技术
基本遗传算法(SGA)由编码、适应度函数、遗传算子(选择、交叉、变异)及运行参数组成。
3.2.1 编码
(1)二进制编码
二进制编码的字符串长度与问题所求解的精度有关。需要保证所求解空间内的每一个个体都可以被编码。
优点:编、解码操作简单,遗传、交叉便于实现
缺点:长度大
(2)其他编码方法
格雷码、浮点数编码、符号编码、多参数编码等
3.2.2 适应度函数
适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距。
3.2.3选择算子
在这里插入图片描述
3.2.4 交叉算子
交叉运算是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体;交叉运算是遗传算法区别于其他进化算法的重要特征,是产生新个体的主要方法。在交叉之前需要将群体中的个体进行配对,一般采取随机配对原则。
常用的交叉方式:
单点交叉
双点交叉(多点交叉,交叉点数越多,个体的结构被破坏的可能性越大,一般不采用多点交叉的方式)
均匀交叉
算术交叉
3.2.5 变异算子
遗传算法中的变异运算是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成一个新的个体。

就遗传算法运算过程中产生新个体的能力方面来说,交叉运算是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异运算只是产生新个体的辅助方法,但也是必不可少的一个运算步骤,它决定了遗传算法的局部搜索能力。交叉算子与变异算子的共同配合完成了其对搜索空间的全局搜索和局部搜索,从而使遗传算法能以良好的搜索性能完成最优化问题的寻优过程。

3.2.6 运行参数
在这里插入图片描述
4 遗传算法的基本原理
4.1 模式定理
在这里插入图片描述
4.2 积木块假设
具有低阶、定义长度短,且适应度值高于群体平均适应度值的模式称为基因块或积木块。
积木块假设:个体的基因块通过选择、交叉、变异等遗传算子的作用,能够相互拼接在一起,形成适应度更高的个体编码串。
积木块假设说明了用遗传算法求解各类问题的基本思想,即通过积木块直接相互拼接在一起能够产生更好的解。

⛄三、部分源代码

%算法主程序
function JSP_GA()
clc;clear;
%决定编码的主程序n*m,从1、2、、、n出现m次
dt=initData();%初始化数据
%dt=initDataFT10();
[rows,cols]=size(dt);
jobNum=rows;%作业数量
machNum=cols/2;%机器数量
group=80;%群体规模
chromes=createChromes(jobNum,machNum,group);%初始化种群
%种群第一代
chrome1=chromes(1,:);
sch=createSchedule(dt,chrome1);
finishSol=bestfitness(sch);

%初始化算法参数
lapRate=0.4; %交叉概率
varRate=0.6;%变异的比率
maxGeneration=100;%循环代数
nowGeneration=0;%当前代数
bestChrome=chrome1;%最优基因代数
bestSol=finishSol;%最优解

%迭代循环程序-包含终止条件
while nowGeneration<maxGeneration
    
    %遗传复制操作
    chromes=copyChromes(dt,chromes);
    %交叉操作
    %disp(['generation:' int2str(nowGeneration)]);
    %disp(chromes);
    chromes=lapChromes(chromes,lapRate);
    %变异操作
    chromes=varChromesInv(chromes,varRate);
    %判断是否替换最优解
    [nowFit,nowChrome]=findBestSolution(chromes,dt);
    if nowFit<bestSol
        bestSol=nowFit;
        bestChrome=nowChrome;
    end    
    %bestSol
    nowGeneration=nowGeneration+1;
end

%显示最优结果
disp(['最优结果:' int2str(bestSol)]);
bestSch=createSchedule(dt,bestChrome)
drawGant(bestSch);%画出甘特图

end

%找出当前种群中最优解的染色体编码以及最优解的值
function [nowBestFit,nowBestChrome]=findBestSolution(inChromes,data)
%step1:计算每条染色体的适应度值,放到数组中
group=size(inChromes,1);
fitnesses=zeros(group,1);
for i=1:group
sch=createSchedule(data,inChromes(i,:));
fit=bestfitness(sch);
fitnesses(i)=fit;
end
%对适应度值进行排序
[fit2,chromeId]=sortrows(fitnesses,1);
nowBestFit=fit2(1); %适应度值中的第一个是最好的
nowBestChrome=inChromes(chromeId(1)😅;
end

%变异操作-逆序方法
function outChromes=varChromesInv(chromes,varRate)
[pop,len]=size(chromes);
for i=1:pop
nowChrome=chromes(i,:);
if rand()<varRate
%outPoint=randperm(len,1);
%inPoint=randperm(len,1);
points=sortrows(randperm(len,2)‘)’;
newChrome=nowChrome(points(1):points(2)); %提取片段
newChromeT=fliplr(newChrome); %逆序操作
chromes(i,points(1):points(2))=newChromeT;
end
outChromes=chromes;
end
end

%变异操作-插入方法
function outChromes=varChromesIns(chromes,varRate)
[pop,len]=size(chromes);
for i=1:pop
nowChrome=chromes(i,:); %拿出当前行
if rand()<varRate
%outPoint=randperm(len,1);
%inPoint=randperm(len,1);
points=randperm(len,2); %随机取两点,points(1)为插入点,points(2)为被插入点
if points(1)<points(2)
insertChrome=nowChrome(points(1):points(2)-1);
newChrome=circshift(insertChrome,-1);
chromes(i,points(1):points(2)-1)=newChrome;
else
insertChrome=nowChrome(points(2)+1:points(1));
newChrome=circshift(insertChrome,1);
chromes(i,points(2)+1:points(1))=newChrome;
end
chromes(i,:);
end
outChromes=chromes;
end
end

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(一)

导言 无线信号无处不在。无线网络为我们的移动设备&#xff0c;物联网&#xff08;IoT&#xff09;&#xff0c;智能城市&#xff0c;自动驾驶汽车等提供动力。从基本视频流到整个公用电网的所有内容现在都依赖于可靠&#xff0c;高速和不间断的连接。这一新现实给频谱监测用户…

文本攻击textattack->openattack

一 文本对抗攻击的定义 很小的扰动&#xff0c;无法映射到原始输出。那么就是对抗样本&#xff0c;生成对抗样本的过程称为对抗攻击。 1.1 类型分类 根据是攻击者否了解模型的具体细节&#xff1a; 白盒攻击【攻击者可以访问模型的完整信息&#xff0c;包括模型结构&#xff0c…

表格软件之FineReport-JS实现大数据集导出(二)

1. 示例&#xff1a;大数据集导出动态参数值 1.1 新建模板 1.1.1 新建数据集 新建普通报表&#xff0c;新建数据集&#xff0c;SQL 语句如下&#xff1a; ds1&#xff1a;SELECT * FROM 销量 where 11 and 地区 in (${area}) and 销售员 in (${stuff}) ds2&#xff1a;SEL…

178. 分数排名

文章目录1.题目2.示例3.答案①系统自带函数1.题目 表: Scores -------------------- | Column Name | Type | -------------------- | id | int | | score | decimal | -------------------- Id是该表的主键。 该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的…

LigaAI X 猴子无限 | AIGC 火了,专业设计者的福音来了!

「人工智能团队协作」还能有多少种打开方式&#xff1f; 致力于打造新一代智能研发协作平台&#xff0c;LigaAI在不断强化自身智能化能力的同时&#xff0c;也持续关注着整个「AI协作」领域的发展。 Gartner在《 2022 年重要战略技术趋势报告》中指出&#xff0c;未来三到五年…

MySQL基础命令高级操作

文章目录一、案例拓展二、数据库高级操作1、克隆表2、清空表&#xff0c;删除表内的所有数据3、创建临时表三、创建外键约束&#xff0c;保证数据的完整性和一直性1、创建主从表2、为主表zhu添加一一个主键约束。主键名建议以“PK_ "开头3、为从表cong表添加外键&#xff…

本地web服务器配置(IIS)

文章目录环境说明操作流程环境说明 Windows 10 操作流程 打开控制面板&#xff0c;输入功能&#xff0c;回车&#xff0c;选择启用或关闭 Windows 功能&#xff0c; 点击确定&#xff0c;等待配置&#xff0c;接着按照提示&#xff0c;重新启动计算机。&#xff08;此处我的…

Ansible Automation Platform - 导入外部主机清单

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 文章目录从外部向“清单”批量导入主机从 VMware vCenter 导入主机清单从外部文件导入主机清单使用“智能清单”Ansible 的 Playbook 执行目标是 “清单” 中的主机和分组。在 AAP 控制台中可以手工创建 “主机” 并通过 …

03、Spring中的静态代理JDK动态代理CGLB动态代理

本文章主要讲解以下几个点&#xff1a; 1、代理模式 2、静态代理 3、JDK的动态代理 4、CGLB动态代理 1、代理模式 1、定义 给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。 2、通俗解释 比如&#xff1a;一个人&#xff08;客户端&#xff09;需要去…

深度学习 Day 20——优化器对比实验

深度学习 Day 20——优化器对比实验 文章目录深度学习 Day 20——优化器对比实验一、前言二、我的环境三、前期工作1、设置GPU2、导入数据3、配置数据集4、数据可视化三、构建模型四、训练模型五、模型评估1、Accuracy与Loss图2、评估模型六、最后我想说一、前言 &#x1f368;…

分析linux启动内核源码

内核的启动时从main.c这个文件里面的start_kernel函数开始的&#xff0c;这个文件在linux源码里面的init文件夹下面 下面我们来看看这个函数 这个函数很长&#xff0c;可以看个大概过去 asmlinkage __visible void __init start_kernel(void) {char *command_line;char *afte…

MCE | 靶向相分离 小分子药物研发

细胞内的各种组分如何在正确的时间、地点上聚集并执行其相应的功能&#xff0c;是生命科学领域内的一大问题。近些年来&#xff0c;细胞内一些没有细胞膜结构包被的“细胞器” (Membrane-less organelles/condensates)——又称生物分子凝聚体 (Biomolecular condensates) 逐渐引…

Analyzing User-Level Privacy Attack Against Federated Learning

Analyzing User-Level Privacy Attack Against Federated Learning IEEE JSAC CCF-A期刊 宋梦凯&#xff08;武汉大学网络安全实验室&#xff09; Summary 提出了针对FL用户级隐私的基于GAN的攻击&#xff08;mGAN-AI&#xff09;&#xff0c;主要是从每个client的更新中计算…

UniPro助力半导体企业之低代码平台篇:高效协同快速响应

在《UniPro助力半导体企业之特色篇&#xff1a;缺陷管理覆盖全流程》中&#xff0c;我们介绍了UniPro如何帮助半导体企业完成在研发过程中的Bug管理&#xff0c;然而缺陷管理也并非UniPro的全部&#xff0c;除此之外&#xff0c;UniPro有着完整的项目管理体系&#xff0c;涵盖了…

相控阵天线(二):非规则直线阵列天线(稀布阵列、稀疏阵列、平方率分布阵列)

目录非规则线阵概述不均匀递变间距阵列稀布阵列稀疏阵列不均匀相位递变阵列不均匀幅度激励阵列代码示例非规则线阵概述 非规则线阵主要包括以下情况&#xff1a; 1. 不均匀间距阵列&#xff1a; a&#xff09;不均匀间距递变阵列&#xff1a;单元间距按照一定的系数递增&#…

傻白入门芯片设计,IP, MCM, SiP, SoC 和 Chiplet的区别(二)

一、IP&#xff1a; 早期的复制电路都是全定制&#xff0c;比如Intel的4004cpu&#xff0c;这种设计非常耗时。考虑到cpu的很多模块有相似的地方&#xff0c;能不能把这些东西模块化&#xff1f;于是就有了IP核的概念&#xff0c;Intelligent Property&#xff0c;即知识产权核…

智慧运维解决方案-最新全套文件

智慧运维解决方案-最新全套文件一、智能运维的必然性二、建设思路三、建设方案1、IT资产和配置管理2、自动化运维管理3、一体化运维平台四、获取 - 智慧运维全套最新解决方案合集一、智能运维的必然性 运维场景多样化。随着IT业务持续增长&#xff0c;为保证业务连续性&#xf…

相控阵天线(八):圆环阵列天线和球面阵列天线

目录圆环阵圆环阵方向图函数均匀圆环阵示例圆环阵层间距的影响非均匀圆环阵示例球面阵列球面阵方向图函数球面阵示例圆环阵 多个单元分布在一个圆环上的阵列称为圆环阵列。这是一种有实际意义的阵列结构&#xff0c;可应用于无线电测向、导航、地下探测等系统中。 圆环阵方向…

微服务介绍

目录一、系统架构演变单体应用架构垂直应用架构分布式架构SOA架构微服务架构二、微服务架构介绍微服务架构常见问题微服务架构常见概念服务治理服务调用服务网关服务容错链路追踪微服务架构常见问题解决方案ServiceComdServiceCloudServiceCloud AlibabaSpringCloud Alibaba介绍…

[论文评析-CV]MediaPipe: A Framework for Building Perception Pipelines, ArXiv,2019

MediaPipe: A Framework for Building Perception Pipelines文章信息前言框架介绍MediaPipe用于目标检测(1)Detection branch:(2)Tracking branch:MediaPipe框架重要的概念调度其他References文章信息 论文题目&#xff1a;MediaPipe: A Framework for Building Perception Pi…