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

news2024/11/23 12:14:56

柔性车间调度是典型的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.coloradmin.cn/o/1827164.html

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

相关文章

【机器学习】机器学习中的人工神经元模型有哪些?

线性神经元 线性神经元(Linear Neuron)是一种基本的人工神经元模型,特点是其输出是输入的线性组合。线性神经元是神经网络中最简单的一种形式,适用于处理线性关系的问题。数学模型如下, y w ⋅ x b ∑ i 1 n w i x…

墨香戏韵,重塑经典

创意名称 墨香戏韵,重塑经典|基于AIGC对戏剧创新 创意概述 京剧作为中国传统戏曲之一,源远流长,承载了丰富的文化内涵和艺术特色。水墨画则是中国传统绘画的瑰宝,以其独特的墨色表达和极简的形式赢得了广泛的赞誉。我们的项目将…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…

自然抽样和平顶抽样

自然抽样和平顶抽样是两种信号处理和采样技术,它们在音频信号处理、信号重建以及数字信号处理中有着不同的应用。 1. 自然抽样(也称为理想抽样或无失真抽样):样值脉冲的幅度随原始信号m(t)的幅度而变; 自然抽样过程的…

VMware Workstation 安装 ESXI5.5 教程

一、创建虚拟机 VMware Workstation 16 创建虚拟机 二、挂载操作系统镜像 点击【编辑虚拟机设置】,然后选择【CD/DVD(IDE)】,点击【使用ISO映像文件】,点击【浏览】,选择需安装的操作系统镜像文件,点击【确定】 三、操作系统…

electron模板【lectron-react-boilerplate】多窗口配置【HtmlWebpackPlugin】多页面配置

如果您正在使用electron-react-boilerplate进行快速的Electron应用程序开发,您可能会遇到想要在桌面应用程序中拥有多个原生窗口的情况。 MacOS窗口图像由OpenClipart-Vectors提供,来源Pixabay。 开始之前需要提及的事情! Electron有一个主进程和渲染进程的模式。可以有多个…

Java 桥接模式(Bridge Pattern)是设计模式中的一种结构型设计模式,桥接模式的核心思想是将抽象与实现解耦

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式的核心思想是将抽象与实现解耦,使得它们可以独立扩展。 在桥接模式中,通常包含以下四个…

1)Java项目笔记搭建系统梳理相关知识

目录 前言项目结构Java部分Spring整合部分SpringBoot整合部分 模块说明规划 小结javarabbitmqmybatisspring最后推荐几本工具书 前言 工作有年头了,学到了很多技术,收获了很多。但是对与工作相关的专业技能知识的掌握杂而乱,不够全面系统。因…

博客没人看啊?我分析是这些原因

1.封面 主题封面还是个性化封面?主题封面对系列化很友好,如下图左: 在目录中什么主题一目了然,个性化封面在目录中就略显杂乱。但是通过观察CSDN主页发现热榜文章清一色个性化封面。如果使文字封面就会显得很无聊。 所以从提高浏…

数据库开发——并发控制(第十一章)

文章目录 前言并发执行例题一、封锁二、封锁协议三、可串行调度四、总结 学习目标:重点为并发控制的基本概念及几个基本协议 前言 数据库管理系统必须提供并发控制机制,保证事务的隔离性和一致性 并发执行例题 一、封锁 排他锁称为写锁,共…

实现一个渐进优化的 Linux cp 命令

1&#xff0c;第1版 copy 先写个轮廓 selfcp.c &#xff1a; #include <stdio.h>int main() {FILE *source, *destination;char ch;source fopen("H222.txt", "r");if (source NULL) {printf("Error opening source file!\n");retur…

浅谈网络通信(3)

文章目录 一、TCP[!]1.1、TCP协议报文格式1.2、TCP十大机制1.2.1、确认应答机制1.2.2、超时重传机制1.2.3、连接管理机制1.2.3.1、三次握手[其流程至关重要&#xff0c;面试必考]1.2.3.2.1、那为啥要建立连接&#xff1f;&#xff1f;建立连接的意义是啥&#xff1f;&#xff1…

c++编程(17)——deque的模拟实现(1)迭代器篇

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 博主模拟STL中的容器时&#xff0c;参考的是SGI版本的STL&#xff0c;如果你对STL的源码感兴趣&#xff0c;请私聊博主。 文章目录 deque的底层原理deque的迭代器deque迭代器的操作迭代器的随机访问操作 deque的底层…

类别不平衡

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、介绍1、过采样2、欠采样 二、过采样1、SMOTE&#xff08;常用&#xff09;1、算法流程2、算法实现3、参数介绍 2、ADASYN&#xff08;不常用&#xff09;1、算法流程…

车票信息的请求与显示

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 发送与分析车票信息的查询请求 得到了获取车票信息的网络请求地址&#xff0c;然后又分析出请求地址的必要参数以及车站名称转换的文件&#xff…

程序猿大战Python——函数——嵌套调用与变量作用域

嵌套调用及执行流程 目标&#xff1a;了解函数的嵌套调用。 函数的嵌套调用指的是&#xff1a;在一个函数中&#xff0c;调用了另一个函数。 嵌套调用语法&#xff1a; def 函数1():代码... ​ def 函数2():代码# 调用函数1函数1()... 说明&#xff1a; 在函数2中&#xff0c…

8个宝藏APP,个个都牛逼哈拉!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 目前win7已经逐渐淡出人们的视野&#xff0c;大部分人都开始使用win10&#xff0c;在日常工作和使用中&#xff0c;创客们下载神奇的软件能大幅提…

怎样快速清理电脑里的所有软件 怎么删除干净电脑软件

苹果电脑内的软件来源主要有两个&#xff0c;一是系统预装&#xff0c;二是用户自行下载。但并不是所有应用程序都是高频使用状态&#xff0c;甚至好多是从未打开过的“屏幕装饰”。小编今日独家攻略&#xff0c;内存告急如何快速清理电脑里的所有软件&#xff0c;怎么删除干净…

线程池ThreadPoolExecutor使用指南

线程池ThreadPoolExecutor使用指南 &#x1f9d0;使用线程池的好处是什么&#xff1f; 统一管理&#xff0c;减少资源获取创建的开销&#xff0c;提高利用率。 &#x1f527;线程池的参数 ​ThreadPoolExecutor​ 3 个最重要的参数&#xff1a; ​corePoolSize​ : 任务队列…

问:IP写作如何商业化?

这个问题也是很多朋友&#xff0c;或者新手小白问的最多的问题&#xff0c; 毕竟我们做副业都是为了挣钱嘛&#xff0c; 那么&#xff0c;回到问题&#xff0c;IP写作如何商业化&#xff1f; 这个问题其实对于我现在要日更的目标来说为时尚早&#xff0c;不过也可以先了解一下。…