MATLAB实现禁忌搜索算法优化柔性车间调度fjsp

news2025/1/15 6:40:28

禁忌搜索算法的流程可以归纳为以下几个步骤:

  1. 初始化
    • 利用贪婪算法或其他局部搜索算法生成一个初始解。
    • 清空禁忌表。
    • 设置禁忌长度(即禁忌表中禁止操作的期限)。
  2. 邻域搜索产生候选解
    • 通过特定的搜索算子(如relocation、exchange、2-opt等)对当前解进行变换,产生一系列候选解。
    • 计算每个候选解的评价函数值(通常是目标函数值),以此衡量解的优劣。
  3. 选择最好的候选解
    • 从所有候选解中选出评价函数值最好的解。
    • 如果这个最好的候选解优于当前最好解,则无视其是否在禁忌表中,直接将其作为新的当前解,并更新历史最好解。
    • 如果最好的候选解并不优于当前最好解,则从非禁忌的候选解中选择最好的一个作为新的当前解。
    • 将导致当前解发生变化的操作加入到禁忌表中,避免在近期内重复这一操作。
  4. 判断终止条件
    • 检查是否满足算法终止的条件,如达到最大迭代次数、运行时间超过预设限制或解的质量在连续多次迭代中没有显著提升等。
    • 如果满足终止条件,则停止搜索并输出当前最好解;否则,返回步骤2继续搜索。
  5. 破禁准则与渴望水平
    • 在某些情况下,即使某个操作在禁忌表中,但如果该操作能导致一个非常好的解(满足渴望水平或破禁准则),那么这个操作也可以被执行,并更新当前解。
    • 渴望水平和破禁准则是为了保证搜索的多样性和全局寻优能力。
  6. 更新禁忌表
    • 随着迭代的进行,不断更新禁忌表,将最近执行的操作加入表中。
    • 经过一定的迭代次数后,早期加入禁忌表的操作会被解禁,重新成为可选的搜索方向。

柔性车间调度的模型如下:


1.目标函数:
柔性车间调度的目标函数通常包括多个方面,如最大完工时间最小、总完工时间最小、最大负荷的机器负荷最小等。这些目标可以根据实际需求进行选择或组合。一般采用最大完工时间最小:
f_1 = \min(C_{\max})
其中,C_{\max} 表示所有工件中的最晚完工时间。

其中,C_i 表示第i个工件的完工时间,n是工件的总数。

2.约束条件:
柔性车间调度的约束条件通常包括以下几点:

(1)同一台机器同一时刻只能加工一个工件。
(2)同一工件的同一道工序在同一时刻被加工的机器数是一。即,一个工序不能同时在多台机器上进行。
(3)任意工序开始加工后不能中断。这意味着一旦一个工序开始,就必须连续进行直到完成。
(4)各个工件之间不存在优先级的差别。除非特别指定,否则所有工件都被视为具有相同的优先级。
(5)同一工件的工序之间存在先后约束。即,一个工件的一个工序必须在它之前的工序完成后才能开始。
(6)所有工件在零时刻都可以被加工。这意味着没有工件在开始时就有延迟。
这些约束条件确保了调度方案的可行性和实际性。在实际应用中,可能还需要考虑其他特定的约束条件,如机器的可用性、工件的交货期等。

完整代码见:https://download.csdn.net/download/corn1949/89173140

算例数据如下:

初始加工明细表
工件号工序M1M2M3M4M5M6
11346-1-1-1
12-1-110-1-1-1
13-11298-15
14-17-123-1
21-111-167-1
22-18-1-1-16
23-1-1511-113
24788-1-1-1
31-1-13-1-1-1
32233-1-1-1
33-1-11045-1
3410-111-13-1
41-1-112-1-17
42899-112-1
43-1-12-1-1-1
44-1-1-11112-1
51-1-158-19
52-1-1-113128
53356-1-1-1
54-1-1-156-1
61579-1-1-1
62-1-1115-110
63-1-1-1439
64-1-1-1510-1

MATLAB主程序如下:

程序结果如下:

禁忌搜索优化得到的最优目标函数值

bestvalue =

    35

禁忌搜索优化得到的最优编码

bestChrom =

  1 至 28 列

    12    20     5     2    24    13     7    15    19     8    17    10    22    16     6    11     3     4    21    23     9    14    18     1     2     1     4     3

  29 至 48 列

     2     1     3     1     1     3     2     3     2     1     1     1     1     2     2     2     1     2     1     1


G =

     3     1     3     0     3
     5     1     3     3     8
     2     1     4     0     6
     1     1     2     0     4
     6     1     1     0     5
     4     1     6     0     7
     2     2     2     6    14
     4     2     1     7    15
     5     2     5     8    20
     2     3     6    14    27
     5     3     2    20    25
     3     2     3     8    11
     6     2     4     6    11
     4     3     3    15    17
     2     4     1    27    34
     3     3     4    11    15
     1     2     3    17    27
     1     3     6    27    32
     6     3     4    15    19
     6     4     4    19    24
     3     4     5    20    23
     4     4     4    24    35
     5     4     5    25    31
     1     4     5    32    35


outcell = 

    '零件号'    '工序号'    '机器号'    '开始时间'    '结束时间'
    [    1]    [    1]    [    2]    [      0]    [      4]
    [    1]    [    2]    [    3]    [     17]    [     27]
    [    1]    [    3]    [    6]    [     27]    [     32]
    [    1]    [    4]    [    5]    [     32]    [     35]
    [    2]    [    1]    [    4]    [      0]    [      6]
    [    2]    [    2]    [    2]    [      6]    [     14]
    [    2]    [    3]    [    6]    [     14]    [     27]
    [    2]    [    4]    [    1]    [     27]    [     34]
    [    3]    [    1]    [    3]    [      0]    [      3]
    [    3]    [    2]    [    3]    [      8]    [     11]
    [    3]    [    3]    [    4]    [     11]    [     15]
    [    3]    [    4]    [    5]    [     20]    [     23]
    [    4]    [    1]    [    6]    [      0]    [      7]
    [    4]    [    2]    [    1]    [      7]    [     15]
    [    4]    [    3]    [    3]    [     15]    [     17]
    [    4]    [    4]    [    4]    [     24]    [     35]
    [    5]    [    1]    [    3]    [      3]    [      8]
    [    5]    [    2]    [    5]    [      8]    [     20]
    [    5]    [    3]    [    2]    [     20]    [     25]
    [    5]    [    4]    [    5]    [     25]    [     31]
    [    6]    [    1]    [    1]    [      0]    [      5]
    [    6]    [    2]    [    4]    [      6]    [     11]
    [    6]    [    3]    [    4]    [     15]    [     19]
    [    6]    [    4]    [    4]    [     19]    [     24]

>> 

 完整代码见:https://download.csdn.net/download/corn1949/89173140

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

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

相关文章

微信小程序地图polyline坐标太多异常显示BUG

描述 微信小程序map地图上显示polyline线,点位超过1250个出现bug,(仅真机上出现,模拟器上正常) 这里以加载四川省边界为例, 以下是示例代码 // 读取geojson数据 uni.request({url: https://geo.datav.aliyun.com/a…

用 element ui 实现季度选择器

由于在数据项目中经常以各种时间条件查询数据,所以时间选择器(DatePicker)组件是很常用的组件。但是在我使用的 Element UI 中,缺少了季度选择器的功能。 简易实现 一开始我根据时间范围使用 select 去遍历,如 2024-Q1、2023-Q4…

Node.js 基础学习

文章目录 1. Node.js1.1 是什么?1.2 作用 2. 命令行工具2.1 命令的结构2.2 常用命令 3. Node.js 注意点3.1 Node.js 中不能使用DOM 和BOM 的API3.2 Node.js 中顶级对象叫做global 4. Buffer4.1 Buffer 特点4.2 Buffer 创建方式4.3 Buffer 操作与注意点 5. 计算机基础…

Rust入门-引用借用

一、引用借用,是什么、为什么、怎么用 所有权上篇我们已经讨论过了,所以这篇我们讨论Rust的引用借用 1、引用借用 是什么? Rust 通过借用(Borrowing) 这个概念来达成上述的目的,获取变量的引用,称之为借用(borrowin…

CERLAB无人机自主框架: 1-环境搭建

前言:更多更新文章详见我的个人博客主页【MGodmonkeyの世界】 描述:欢迎来到CERLAB无人机自主框架,这是一个用于自主无人飞行器 (UAV) 的多功能模块化框架。该框架包括不同的组件 (模拟器,感知,映射,规划和…

【数据结构-串-数组-广义表】

目录 1 串-理解1.1 串的抽象定义:-理解1.2 串的存储结构-不断掌握1.2.1 顺序存储结构:1.2.2 链式存储结构: 1.3 串的模式匹配算法:-掌握1.3.1 BF暴力求解算法-代码 -掌握1.3.2 KMP求解算法-代码--掌握 2 数组-不断掌握2.1 顺序存储…

vue-cli2 与vue-cli3,vue2与vue3 初始化项目,本地vue项目,详细解析区别(2024-04-19)

目录 1、区别(vue-cli2 与 vue-cli3 ) 2、例子1(vue2项目) 2.1 版本与命令行 2.2 项目本地截图 2.3 项目文件解析 (1)package.json 文件 (2)webpack.dev.conf.js文件 &#…

PTA图论的搜索题

目录 7-1 列出连通集 题目 输入格式: 输出格式: 输入样例: 输出样例: AC代码 7-2 六度空间 题目 输入格式: 输出格式: 输入样例: 输出样例: 思路 AC代码 7-3 地下迷宫探索 题目 输入格式: 输出格式: 输入样例1: 输出样例1: 输入样例2: 输出样例2: 思路 …

股票战法课程之主力的痕迹

文章目录 1. 主力的操作痕迹2. 主力的建仓2.1 建仓的三种方式2.2 建仓的五个特点2.3 建仓的迹象2.4 建仓的成交量特征 1. 主力的操作痕迹 序号痕迹原因1不跟随大盘节奏筹码都在主力手中2突发利空消息,股价不跌反涨主力被套,不希望散户抛盘3很小的成交量…

【初识Qt】如何使用QtCreator创建项目

文章目录 1 :peach:Qt Creator 概览:peach:2 :peach:使⽤ Qt Creator 新建项目:peach:2.1 :apple:新建项目:apple:2.2 :apple:使用标签实现 Hello World 程序:apple:2.2.1 :lemon:纯代码方式实现:lemon:2.2.2 :lemon:可视化操作实现:lemon: 2.3 :apple:使用按钮实现 Hello Worl…

vue element-ui 表格横向滚动条在合计项下方

目前效果 需求效果 1.隐藏bodyWrapper滚动条,显示footerWrapper滚动条 css代码如下: div ::v-deep .el-table--scrollable-x .el-table__body-wrapper{overflow-x: hidden!important;z-index: 2!important;} div ::v-deep .el-table__footer-wrapper …

WWW ‘24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题

WWW 24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题 原创 QuantML QuantML 2024-04-16 09:04 上海 Content 本文主要探讨了如何利用强化学习(Reinforcement Learning, RL)来处理可定制股票池(Customizable Stock …

关于RA8900CE时钟芯片的使用注意事项

在快节奏的现代社会&#xff0c;时间变得越来越宝贵。对于时钟的电子设计&#xff0c;高精度且低功耗逐渐成为主流。我们就有一个汽车显示屏的时钟显示项目&#xff0c;要求时钟一天的误差控制在1s以内。要想达到此要求&#xff0c;则必须满足晶振的频率偏差PPM<1/60/60/24*…

【Hadoop大数据技术】——Sqoop数据迁移(学习笔记)

&#x1f4d6; 前言&#xff1a;在实际开发中&#xff0c;有时候需要将HDFS或Hive上的数据导出到传统关系型数据库中&#xff08;如MySQL、Oracle等&#xff09;&#xff0c;或者将传统关系型数据库中的数据导入到HDFS或Hive上&#xff0c;如果通过人工手动进行数据迁移的话&am…

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化&#xff0c;LDA&#xff08;树图&#xff09;、关系图、词云、时间趋势&#xff08;折线图&#xff09;、热度地图、词典情感分析&#xff08;饼图和3D柱状图&#xff09;、词向量神经网络情感分析、tfidf聚类、词向量聚类…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容&#xff0c;默认情况下显示文件的最后 10 行。tail 命令 非常有用&#xff0c;特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

搭建sql-lab出现的php不兼容

下载不了的时候&#xff0c;直接打开该网址下载5.xphp版本&#xff0c;解压到C:\php_studyv8\phpstudy\phpstudy_pro\Extensions\php&#xff08;可能路径都不一样&#xff0c;找到Extensions\php放到该目录下&#xff09;

Excel模板导入、导出工具类

1.引入maven依赖&#xff0c;利用hutool的excel读取 Hutool-poi对excel读取、写入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> <depen…

期权小知识科普

期权的交易时间 上交所期权合约的交易时间为每个交易日9:15至9:25、9:30至11:30、13&#xff1a;00至15:00。 其中&#xff0c;9:15至9:25为开盘集合竞价时间&#xff0c;14:57-15:00为收盘集合竞价时间&#xff0c;其余时段为连续竞价时间&#xff0c;交易所规则另有规定的除…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…