MATLAB实现粒子群算法优化柔性车间调度(PSO-fjsp)

柔性车间调度是典型的N-P问题,数学模型如下:

数学模型

假设有n个工件需要在m台机器上进行加工。每个工件包含一道或多道工序,每道工序可以在多台机器上进行加工,但每道工序的加工时间随机器的不同而不同。

符号定义
  • n:工件数量
  • m:机器数量
  • O_{ij}:表示工件j的第i道工序
  • p_{ijk}:表示工序O_ij在机器k上的加工时间
  • C_{max}:表示所有工件完成加工的最大完工时间(也常称为“makespan”)
  • x_{ijk}:决策变量,当工序O_ij在机器k上加工时取1,否则取0

目标函数

柔性车间调度的常见目标是最小化最大完工时间C_{max},这可以表示为:

\text{min} \quad C_{\text{max}}

其中,C_{max}的计算依赖于具体的调度方案,即每台机器上各工序的加工顺序和开始时间。

约束条件

柔性车间调度的约束条件主要包括以下几点:

  1. 同一台机器同一时刻只能加工一个工件
    \sum_{j=1}{n} \sum_{i=1}{k_j} x_{ijk} \leq 1 \quad \forall k, t
    其中,k_j是工件j的工序数量,t表示时间。这个约束确保在任何时刻t,机器k上只有一个工件在加工。

  2. 同一工件的同一道工序在同一时刻只能被一台机器加工
    \sum_{k=1}^{m} x_{ijk} = 1 \quad \forall i, j
    这个约束确保每个工序只能在一台机器上加工。

  3. 任意工序开始加工不能中断
    调度方案中已经隐含此约束。

  4. 同一工件的工序之间存在先后约束
    即工序的顺序是预先确定的。

  5. 所有工件在零时刻都可以被加工
    这个约束表示调度从时间零点开始。

粒子群算法的流程不再赘述。

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

算例数据如下:

工件号工序M1M2M3M4M5M6
11345-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
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主程序如下:

程序结果如下:

运行时间

rumtime_pso =

                 5.3394316

粒子群算法优化得到最优目标值

Valuebest =

    38

粒子群算法优化得到最优粒子

psobest =

  1 至 6 列

         0.807799087914073         0.306309227674272         0.442135525692086         0.632880346280301         0.641693389470385         0.520189722967532

  7 至 12 列

         0.704326938591365         0.596599575086721         0.696891096627419         0.429041868570891         0.585924105261037         0.362582397868678

  13 至 18 列

         0.559651034778297         0.572796589788628         0.618249276935865         0.413821157586821         0.618559667953546         0.446161435550871

  19 至 24 列

         0.686582929302922         0.578608572037444         0.420636186679292         0.666470750438744         0.201151952517725          2.93126251429749

  25 至 30 列

          1.34239826499873          2.49977875898474          2.98664700116511          2.09901832320219          1.71622326495051          1.99067345337225

  31 至 36 列

          1.16267419492853          3.15741956630322          2.39695846952555          1.71756348576486          2.22413083137163          2.22079424094148

  37 至 42 列

          1.26734250098306          2.13260511835173          1.88079389045675          2.19794951228853          2.99954380016584          2.29207015694117

  43 至 46 列

                         1          2.58484850789946           3.6176736920122           1.4633026270412


G =

     6     1     1     0     5
     1     1     2     0     4
     4     1     6     0     7
     5     1     3     0     5
     6     2     4     5    10
     3     1     3     5     8
     1     2     3     8    18
     5     2     5     5    17
     2     1     4    10    16
     4     2     2     7    16
     4     3     3    18    20
     6     3     6    10    19
     3     2     3    20    23
     3     3     4    23    27
     4     4     5    20    32
     5     3     2    17    22
     1     3     3    23    32
     2     2     2    22    30
     6     4     4    27    32
     5     4     5    32    38
     3     4     1    27    37
     2     3     3    32    37
     1     4     4    32    34


outcell = 

    '零件号'    '工序号'    '机器号'    '开始时间'    '结束时间'
    [    1]    [    1]    [    2]    [      0]    [      4]
    [    1]    [    2]    [    3]    [      8]    [     18]
    [    1]    [    3]    [    3]    [     23]    [     32]
    [    1]    [    4]    [    4]    [     32]    [     34]
    [    2]    [    1]    [    4]    [     10]    [     16]
    [    2]    [    2]    [    2]    [     22]    [     30]
    [    2]    [    3]    [    3]    [     32]    [     37]
    [    3]    [    1]    [    3]    [      5]    [      8]
    [    3]    [    2]    [    3]    [     20]    [     23]
    [    3]    [    3]    [    4]    [     23]    [     27]
    [    3]    [    4]    [    1]    [     27]    [     37]
    [    4]    [    1]    [    6]    [      0]    [      7]
    [    4]    [    2]    [    2]    [      7]    [     16]
    [    4]    [    3]    [    3]    [     18]    [     20]
    [    4]    [    4]    [    5]    [     20]    [     32]
    [    5]    [    1]    [    3]    [      0]    [      5]
    [    5]    [    2]    [    5]    [      5]    [     17]
    [    5]    [    3]    [    2]    [     17]    [     22]
    [    5]    [    4]    [    5]    [     32]    [     38]
    [    6]    [    1]    [    1]    [      0]    [      5]
    [    6]    [    2]    [    4]    [      5]    [     10]
    [    6]    [    3]    [    6]    [     10]    [     19]
    [    6]    [    4]    [    4]    [     27]    [     32]

>> 

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

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

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

相关文章

仓储系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,试剂管理,安全管理,存储管理 用户账户功能包括:系统首页,个人中心,试剂管理,安全管…

pytest构建和测试FastAPI CURD API

文章目录 概述目标FASTAPI 介绍CRUD API 项目设置freezepipreqs 代码介绍run APIpytest测试conftest测试用例测试报告 F&Q1.执行uvicorn app.main:app --host localhost --port 8000 --reload 报错 zsh: /usr/local/bin/uvicorn: bad interpreter2.生成requirement.txt时&a…

基于SSM+Jsp的家用电器销售网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

技术玩家实现在不支持的CPU上运行 Windows 10 22H2

最近,AMD 悄然确认,其新款 Ryzen AI 300 系列 APU 将不再为 Windows 10 制作芯片组驱动程序,因为它将终止对Windows 10操作系统的支持,尽管它完全有能力这样做。这意味着想要获得官方驱动程序支持的用户必须在其上运行 Windows 11…

8.让画面动起来

一、Unity Shader中的内置变量(时间篇) 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化的同时也可以随之变化。Unity shader提供了一系列关于时间的内置变量来允许我们方便地在Shader中访问运行时间,实现各种动画…

基于小波的多元信号降噪-基于马氏距离和EDF统计(MATLAB R2018a)

马氏距离是度量学习中一种常用的距离指标,通常被用作评定数据样本间的相似度,可以应对高维线性分布数据中各维度间非独立同分布的问题,计算方法如下。 (1)计算样本向量的平均值。 (2)计算样本向…

插卡式仪器模块:示波器模块(插卡式)

• 12 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 可实现信号分析 • 上电时序测量 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比对 • 无线充电(信号解调) 通道12输入阻抗Hi-Z, 1 MΩ…

物联网实战--平台篇之(十四)物模型(用户端)

目录 一、底层数据解析 二、物模型后端 三、物模型前端 四、数据下行 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 物联网…

LLM技术

LLM 是利用深度学习和大数据训练的人工智能系统,专门设计来理解、生成和回应自然语言。这些模型通过分析大量的文本数据来学习语言的结构和用法,从而能够执行各种语言相关任务。以 GPT 系列为代表,LLM 以其在自然语言处理领域的卓越表现&…

表达式求值的相关语法知识(C语言)

目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一!!! 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…

JavaScript 动态网页实例 —— 图像运动与事件

除图像显示外,图像运动和对事件的响应也是常见的图像效果。本章介绍图像的运动与图像对事件的响应。其中,图像事件包括:图像的拖动、按钮控制图像的显示、图像感应鼠标等;图像运动包括:图像的滑动、图像的花环效果、图像的流星效果、图像的逐渐变大、图像分块飞行和图像分条飞…

window wsl2的ubuntu如何配置代理获取docker image

最近两天,docker pull一直下不来docker image, 研究了下可以通过代理pull, 我的是window电脑下的linux子系统wsl2, 装的是ubuntu跑docker. # 创建/etc/systemd/system/docker.service.d路径 sudo mkdir -p /etc/systemd/system/docker.service.d # 创建 http-proxy…

借助ChatGPT快速仿写一篇优质论文,无痛仿写、完美创作

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。可以添加我(yida985)交流学术写作或ChatGPT等AI领域相关问题,多多交流,相互成就,共同进步 在学术写…

汽车数据应用构想(三)

上期说的,用数据去拟合停车信息的应用,那么类似的POI信息相关的场景其实都可以实现。今天讲讲用户使用频率也很高的加油/充电场景。 实际应用中,在加油场景中用户关心的通常还是价格。无论是导航还是各种加油APP/小程序,都已经很…

【云岚到家】-day02-1-区域服务后续开发及完善

【云岚到家】-day02-1-区域服务后续开发及完善 1 区域服务后续开发1.1 添加区域服务1.1.1 接口定义1.1.1.1 接口设计1.1.1.2 接口定义-json 1.1.2 接口开发1.1.2.1 mapper1.1.2.2 service1.1.2.3 controller 1.1.3 测试 1.2 修改价格1.2.1 接口定义1.2.1.1 接口设计1.2.1.2 接口…

Git发布正式

一般我们开发都是在测试环境开发,开发完成后再发布到正式环境。 一.分支代码合并到主分支1.首先切换到自己的分支(比如分支叫:dev)git checkout dev2.把本地分支拉取下来git pull 或者 git pull origin dev3.切换到主分支mastergit checkout master4.更新…

地图商家数据怎么查看?揭秘采集软件工作原理!

地图商家数据怎么查看?其实主要就是两种方法: 1. 直接使用地图服务提供的API:大多数地图提供商(如Google地图,百度地图等)都会提供一些API,通过这些API,可以获取到它们所拥有的商家…

FlashBrowser

本例:windows10 下载FlashBrowser 解决flash失效问题,更换浏览器 https://www.flash.cn/ 下载FlashBrowser浏览器

Uber 提升 Presto 集群稳定性的 GC 调优方法

Presto at Uber Uber 利用开源的 Presto 查询各种数据源,无论是流式还是归档数据。Presto 的多功能性赋予我们做出基于数据的明智商业决策的能力。我们在两个地区运行了大约20个 Presto 集群,总共超过10,000个节点。我们有大约12,000个每周活跃用户&…