【优化调度】遗传算法求解工件的并行调度组合优化问题【含Matlab源码 2234期】

news2025/8/12 18:31:37

⛄ 一、 遗传算法简介

1 问题描述
假定一个加工系统有m台机器和n件工件,每个工件包含一道或多道工序,工件的加工顺序是确定的,但每个工件可能有几条可行的加工路线,即每道工序可在多台不同的机床上加工,工序的加工时间和加工费用随机床的性能不同而变化。作业调度的任务是确定机器上工序的加工顺序,使得某个性能指标(如最大流程时间)取得最优值。下面是针对该调度模型的假设:

(1)每台机床一次只能加工一个工件。

(2)工序一旦进行不能中断。

(3)假定工件之间具备相同的优先级。

(4)不同工件的工序之间没有先后约束。

(5)工序在某台机床的加工时间是确定的。

(6)在零时刻,所有的工件都可被加工。

2 算法描述
遗传算法(Genetic Algorithms)是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。它最早由美国密歇根大学的Holland教授为研究自然与人工系统的自适应行为而提出的一种算法。近年来,遗传算法从理论到实际都已取得了许多重要成果。基于遗传算法求解NP问题的研究也相当活跃,对于求解NP问题,遗传算法已显示出了巨大的优势。

传统遗传算法从一组随机产生的初始解(种群)开始搜索。种群中的每个个体是问题的一个解(染色体),这些染色体在后续迭代中不断进化,称为遗传。在每一代中用“适值”来测量染色体的好坏。生成的下一代染色体,称为子代。后代是由前一代染色体通过交叉或者变异操作形成的,在子代的形成过程中,根据适值的大小选择部分后代,淘汰部分后代,始终保持种群的大小是常数。适值高的染色体被选中的概率较高,体现了“适者生存”的进化机制。这样,经过若干代之后,算法收敛于最好的染色体,它很可能就是问题的最优解。

(1)编码
每个染色体编码为双链,第一条链为优先分配规则的序列,第二条链表示每个工件的每个工序所使用的资源。在第一条链中只记录工件号,其中工件号可以重复,其重复数为此工件的工序数。至于工件的工序号是由工件号在第一条链中相对本工件号的位置决定的。比如工件号2在第一条链中第2次出现,那么它就代表工件2的第2道工序。在第二条链中只记录设备号,如果没有使用设备就记录为0,其记录规则是根据工件号和工件的工序号的先后顺序记录工序所使用的设备号。即,首先记录工件1第1道工序所使用的设备号,接着记录工件1第2道工序所使用的设备号,直到最后记录工件n第m道工序所使用的设备号。因为对于每一道工序染色体都要记录它选择的资源,因此染色体是一个二维数组,它的长度是每个工件工序数之和。

例1:现有3个工件,它们的工序数分别是3,2,4,其中第1个工件的第1,2道工序分别有邀1妖,邀1,2,3妖可利用资源,其中第3道工序不需要资源;第2个工件的第1,2道工序分别具有邀1,2妖,邀2,3妖可利用资源;第3个工件的第1,2,3,4道工序分别具有邀1妖,邀1,2,3妖,邀1,3妖,邀3妖可利用资源。此问题对应的染色体的长度为:3+2+4=9。

它的编码如图1。
在这里插入图片描述
图1 染色体1
这里第一条链的编码表示排产过程中优先分配规则进行设备调度的工序顺序:第1个工件的第1道工序、第2个工件的第1道工序、第1个工件的第2道工序、第3个工件的第1道工序、第3个工件的第2道工序、第2个工件的第2道工序、第3个工件的第3道工序、第1个工件的第3道工序、第3个工件的第4道工序。第二条链的编码表示排产过程中每道工序所使用的设备:第1个工件的第1道工序使用第1台设备、第1个工件的第2道工序使用第3台设备、第1个工件的第3道工序不使用设备、第2个工件的第1道工序使用第1台设备、第2个工件的第2道工序使用第3台设备、第3个工件的第1道工序使用第1台设备、第3个工件的第2道工序使用第2台设备、第3个工件的第3道工序使用第1台设备、第3个工件的第4道工序使用第3台设备。

(2)杂交设计
对于一般的染色体的基因由于相互之间不存在影响,具有正交性,所以通常的交叉运算只需在染色体中选定某一个或几个随机的交叉点进行交叉即可。而该文定义的染色体是双链,并且在第一条链中工件号出现的个数与第二条链中设备号的选择都存在约束,因此本算法采用一种改进的单亲演化算法来进行杂交。

此改进的单亲演化算法只对第一条链进行杂交,在杂交过程中第二条链保持不变。对于一个染色体的第一条链(R1、R2、......、Rn),首先随机的产生2个数s和t(0<s<t<n+1),然后把染色体第一条链中的Rs、......、Rt片段进行翻转得到一个新的染色体。

⛄ 二、部分源代码

clc, clear, close all
load(‘usborder.mat’,‘x’,‘y’,‘xx’,‘yy’);

cities = 40;
locations = zeros(cities,2);
n = 1;
while (n <= cities)
xp = rand*1.5;
yp = rand;
if inpolygon(xp,yp,xx,yy)
locations(n,1) = xp;
locations(n,2) = yp;
n = n+1;
end
end
plot(locations(:,1),locations(:,2),‘bo’);
xlabel(‘城市的横坐标x’); ylabel(‘城市的纵坐标y’);
grid on

%% 计算城市距离

distances = zeros(cities);
for count1=1:cities
for count2=1:count1
x1 = locations(count1,1);
y1 = locations(count1,2);
x2 = locations(count2,1);
y2 = locations(count2,2);
distances(count1,count2)=sqrt((x1-x2)2+(y1-y2)2);
distances(count2,count1)=distances(count1,count2);
end
end

x1 = x
%% 定义目标函数
FitnessFcn = @(x) traveling_salesman_fitness(x,distances);

my_plot = @(options,state,flag) traveling_salesman_plot(options, …
state,flag,locations);

⛄ 三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄ 四、 matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]彭翔,戴祝英.关于车间作业调度的组合优化算法[J].现代计算机(专业版). 2004,(05)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

并查集解析

文章目录&#x1f6a9;并查集的理解&#x1f6a9;并查集的结构与原理&#x1f6a9;并查集的实现&#x1f341;整体框架&#x1f341;路径压缩&#x1f6a9;总结&#x1f6a9;并查集的理解 并查集是基于数组操作的一个特殊数据结构&#xff0c;和以前学习[数组的堆排序]时有点相…

分析设备树文件

1.设备树是干嘛的 硬件资源有很多&#xff0c;想要实现分类管理&#xff0c;方便驱动去控制它&#xff0c;则需要设备树来管理硬件信息。 所以&#xff0c;设备树主要存放了一些设备节点信息&#xff0c;键值对&#xff0c;和属性&#xff1b;节点中也可以包含子节点。 2.设…

安全架构中的前端安全防护研究

国家互联网应急中心发布的被篡改网站数据让很多人触目惊心&#xff0c;近年来各种Web网站攻击事件频频发生&#xff0c;网站SQL注入&#xff0c;网页被篡改、信息失窃、甚至被利用成传播木马的载体Web安全形势日益严峻&#xff0c;越来越受到人们的关注。 Gartner 对安全架构的…

创建计划协议、维护创建计划、收货

创建计划协议事务码&#xff1a;ME31L创建计划协议 &#xff08;ME32L 修改计划协议 ME33L查询计划协议 ME2L查询采购订单&#xff09; 输入&#xff1a;供应商、协议类型、协议日期、采购组织、采购组、工厂、存储地点等信息后回车。 然后输入有效截至日期&#xff0c; 再点击…

计算机毕业设计java+springboot宠物商城系统

一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot Maven mybatis Vue 等等组成&#xff0c;B…

【JVM】垃圾回收:垃圾收集器

一、语境中的并行与并发 并行 并行描述的时多条垃圾收集器线程之间的关系&#xff0c;说明同一时间有多条这样的线程在协同工作&#xff0c;通常默认此时用户线程是处于等待状态。 并发 并发描述的是垃圾收集器线程与用户线程之间的关系&#xff0c;说明同一时间垃圾收集器线程…

简单实现一个虚拟形象系统

前言 上周启动居家开会的时候&#xff0c;看到有人通过「虚拟形象」功能&#xff0c;给自己带上了口罩、眼镜之类&#xff0c;于是想到了是不是也可以搞一个简单的虚拟形象系统。 大致想来&#xff0c;分为以下几个部分&#xff1a; 卷积神经网络(CNN) 下面讲解一下三层CN…

视频格式转换器哪个好用?万兴优转-好用的视频格式转换器

视频格式转换器是用于转换视频格式的软件&#xff0c;是指用于视频转换、音频转换、CD轨抓取、音视频混合转换、音视频剪切、连接转换、视频水印叠加、滚动字幕、个性化文字、图片叠加、视频相框叠加的音视频转换工具。 也就是说&#xff0c;视频有非常多的格式如AVI、VCD、SVC…

【JavaWeb从零到一】会话技术CookieSessionJSP

&#x1f680;【JavaWeb从零到一】系列文章目录 &#x1f6a9;【JavaWeb从零到一】前置知识 &#x1f6a9;【JavaWeb从零到一】Mysql基础总结 &#x1f6a9;【JavaWeb从零到一】JDBC详解 &#x1f6a9;【JavaWeb从零到一】JDBC连接池&JDBCTemplate Cookie&Session&…

王学岗音视频开发(二)—————OpenGLES开发实践

矩阵以及矩阵运算 上图就是m x a 的矩阵 1x30x22x1 :为左侧第一行乘以右侧第一列。 1x10x12x0 :为左侧第一行乘以右侧第二列。 -1x33x21x1:为左侧第二行乘以右侧第一列。 -1x13x11x0:为左侧第二行乘以右侧第二列。 矩阵的行列式 伴随矩阵 A*表示伴随矩阵 OpenGL 教程----屏…

Grails SpringBoot国际化不生效

问题描述&#xff1a; grails项目使用了国际化&#xff0c;按照官方文档的说法&#xff1a; 会根据用户浏览器访问时使用的Accept-Language头自动选择合适的语言。 但无论浏览器了配置什么语言甚至配置了Tomcat启动参数 -Duser.languagexxx -Duser.regionxxx页面显示依旧是英…

[附源码]java毕业设计一点到家小区微帮服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

QPushButton按钮用法

QPushButton 简介 QPushButton是一个很常用的一个按钮控件&#xff0c;主要用于创建一个可按压的按键。它显示了一 个文本和一个图标。另外&#xff0c;你也可以在创建时&#xff0c;指定一个快捷键。 基本用法 1. 创建 QPushButton主要有两种创建方法&#xff0c;一种是直…

SQLite实现的学生管理系统

SQLite数据库 案例资源所在地址&#xff1a; https://download.csdn.net/download/weixin_41957626/87150608?spm1001.2014.3001.5503 1.简介 1.1引入 1.前面学习的文件存储和SharedPreference存储的方式只能存储一些小型的数据但是对于复杂关系以及复杂数据结构的数据仅仅靠…

交互与前端16 Tabulator 表格实践4

说明 继续给表格来加一些小功能。 内容 1 分页 在表格初始化的地方加两行配置,表格就实现了分页 pagination:true, //enable.paginationSize:20, // this option can take any positive integer value2 超链接 这个需求的来源是,一些微服务需要注释,所以我写了很多文档…

科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台

NO.1产品背景 在最近大热的自动驾驶赛道&#xff0c;大疆采用新的技术路线——双目立体视觉。具体来说&#xff0c;它就是模拟人的视觉系统&#xff0c;通过两个临近摄像头所拍摄到的画面的视差&#xff0c;来还原出三维立体结构。不需要对海量数据进行标注和训练&#xff0c;可…

Echarts 散点象限图(二)动态绘制

之前发布过一篇文章Echarts散点象限图,基于死数据来绘制的,但实际开放场景中,需要请求数据,而且可能会动态更改数据,这时候需要如何处理,有什么要注意的地方,这篇文章详细说明一下。 主要需要处理的地方就是四个象限的markArea,需要根据中心的位置来画,你可以想象成…

36 - 经典问题解析三(赋值 string)

---- 整理自狄泰软件唐佐林老师课程 1. 关于赋值的疑问 什么时候需要重载赋值操作符&#xff1f;编译器是否提供默认的赋值操作&#xff1f; 编译器为每个类 默认重载了赋值操作符默认的赋值操作符 仅完成 浅拷贝当需要进行 深拷贝 时 必须重载赋值操作符赋值操作符与拷贝构造…

Elasticsearch系列【1】概述

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录Elastic公司Elastic StackElasticsearch结构化/非结构化数据全文搜索ES 发展史ES 特点ES 应用场景ES 应用案例Beats 系列LogstashKibanaElastic公司 Elastic是一家以搜索引擎闻名世界的软件公司…

pythoin爬虫2之利用cookie进行登录

python爬虫2之利用cookie进行登录利用requests模拟post方法cookies的获取session综合实例拓展&#xff1a;实现时间间隔&#xff08;第一次抓取后间隔...秒进行下一次抓取&#xff09;利用requests模拟post方法 requests.post(url,data,hearders) url即要解析的网址data即是向服…