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

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

  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.mfbz.cn/a/558660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀,伙伴们!你听说了吗?最近AWS托管了大热模型:Claude 3 Opus!想要一探究竟吗?那就赶紧来注册AWS账号吧!别担心,现在注册还免费呢!而且在AWS上还有更多的大…

【北京迅为】《iTOP-3588开发板系统编程手册》-第10章 存储映射 I/O

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

Spark-Scala语言实战(17)

我带着大家一起来到Linux集群环境下,学习我们的spark。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(16&#x…

基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

微信小程序日期增加时间完成订单失效倒计时(有效果图)

效果图 .wxml <view class"TimeSeond">{{second}}</view>.js Page({data: {tiem_one:,second:,//倒计时deadline:,},onLoad(){this.countdown();},countdown(){let timestamp Date.parse(new Date()) / 1000;//当前时间戳let time this.addtime(2024…

数据结构- 顺序表-单链表-双链表 --【求个关注!】

文章目录 一 顺序表代码&#xff1a; 二 链表单链表双向链表 一 顺序表 顺序表是线性表的一种 所谓线性表指一串数据的组织存储在逻辑上是线性的&#xff0c;而在物理上不一定是线性的 顺序表的底层实现是数组&#xff0c;其由一群数据类型相同的元素组成&#xff0c;其在逻辑…

JVM知识点总结二

参考文章&#xff1a;【Java面试题汇总】JVM篇&#xff08;2023版&#xff09;_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型&#xff1a; JVM由三部分组成&#xff1a;类加载子系统、运行时数据区、执行引擎 JVM内存模型&#xff1a; 内存模型里的运行时数据区&#…

STM32实现硬件I2C通讯,读取MPU6050的ID号

今天学习了使用硬件I2C的方式成功读取MPU6050的ID号&#xff0c;特此记录一下过程&#xff1a; 首先需要学习的是MPU6050的初始化&#xff1a; 第一步&#xff1a;打开GPIOB的时钟&#xff08;因为I2C2的引脚10,11在GPIOB上&#xff09; 第二步&#xff1a;打开I2C2的时钟 …

LLAMA 3的测试之旅:在GPT-4的阴影下前行

Meta终于发布了他们长期期待的LLAMA 3模型&#xff0c;这是一个开源模型&#xff0c;实际上提供了一系列新的功能&#xff0c;使得模型在回答问题时表现得更好。这对AI社区来说是一个真正的里程碑事件。 Meta正在发布新版本的Meta AI&#xff0c;这是一种可以在他们的应用程序和…

用Python在PDF文档中插入单图像水印和平铺图像水印

PDF文档因其跨平台兼容性和内容保真度成为信息交换的标准载体&#xff0c;为应对版权侵犯、内容篡改以及未经授权的传播等风险&#xff0c;向PDF中插入图片水印成为一种强化文档安全性、彰显所有权及实施访问控制的有效手段。图片水印不仅能以直观的方式标示文档来源、强化版权…

Git学习笔记(三)Git分支

Git分支是Git中非常重要的一个概念&#xff0c;无论是个人开发还是多人协作中&#xff0c;分支都起着至关重要的作用。几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响…

Discuz! X3.4 升级至 Discuz! X3.5 详细教程

第一步&#xff1a;从其他以前的 Discuz! X 版本升级Discuz! X3.4 请先升级到Discuz! X3.4&#xff0c;升级教程网上比较普遍&#xff0c;在此不再论述。 第二步&#xff1a;Discuz! X3.4 升级至 Discuz! X3.5 &#xff08;Discuz 从 X3.5 以后&#xff0c;不在发布GBK版本&…

K8S基础概念

一、MASTER Kubernetes里的Master指的是集群控制节点&#xff0c;在每个Kubernetes集群里都需要有一个Master来负责整个集 群的管理和控制&#xff0c;基本上 Kubernetes的所有控制命令都发给它&#xff0c;它负责具体的执行过程&#xff0c;我们后 面执行的所有命 令基本都…

测试数据整理--chatgpt 构造sql语句导出数据库数据

在测试过程中&#xff0c;我们有时候需要准备一些测试数据&#xff0c;若从系统中直接导出Excel数据&#xff0c;数据往往庞大且需要整合&#xff0c;不好整理&#xff0c;于是我们直接去数据库中查询一些表&#xff0c;数据整合后直接导出结果会更方便。 我们今天就 用 chatg…

云原生Kubernetes: K8S 1.29版本 部署Jenkins

目录 一、实验 1.环境 2.K8S 1.29版本 部署Jenkins 服务 3.jenkins安装Kubernetes插件 二、问题 1.创建pod失败 2.journalctl如何查看日志信息 2.容器内如何查询jenkins初始密码 3.jenkins离线安装中文包报错 4.jenkins插件报错 一、实验 1.环境 &#xff08;1&…

npm最新淘宝镜像站已经更新registry(2024-04-19)

1、npm替换地址 旧的 https://registry.npm.taobao.org 已替换为 https://registry.npmmirror.com 淘宝镜像的淘宝官方提供的方法&#xff08;最新的源配置&#xff09; npm config set registry https://registry.npmmirror.com 镜像站网址&#xff1a; npmm…

ELK日志采集系统

1.什么是ELK ELK 是一套流行的数据搜索、分析和可视化解决方案&#xff0c;由三个开源项目组成&#xff0c;每个项目的首字母合起来形成了“ELK”这一术语&#xff1a; Elasticsearch (ES): Elasticsearch 是一个基于 Apache Lucene 构建的分布式、实时搜索与分析引擎。它能够…

小程序AI智能名片S2B2C商城系统:做内容、造IP、玩社群打造私域流量的新营销秘籍

在数字化浪潮汹涌的新时代&#xff0c;小程序AI智能名片S2B2C商城系统正以其独特的魅力&#xff0c;引领着营销领域的新变革。这套系统不仅将人工智能与小程序技术完美结合&#xff0c;更通过创新的S2B2C模式&#xff0c;为企业打开了一扇通往成功的大门。 面对激烈的市场竞争&…

Jenkins 的构建时执行时间问题

我们希望我的项目能够在特定的时间自动执行&#xff0c;我们需要设定一个定时任务。 Jenkins 的定时任务是通过 Cron 任务来实现的&#xff0c;但是由有点不一样。 H/2 * * * * 比如说上面的设置就是每 2 分钟执行一次。 希望每分钟执行一次 Jenkins 的每分钟执行一次的设置…

c++头文件string函数的用法

目录 前言&#xff1a; 字符串截取 字符串插入与替换 字符串区间删除 字符串排序与相加和查找 如后续需文字描述&#xff0c;&#xff0c;请评论区告诉我&#xff0c;我看到后会进行添加一些文字描述。 前言&#xff1a; 因本人女朋友在学习c过程中在一些知识网页上学了st…
最新文章