生产调度:flowshop问题数学建模

news2024/11/26 14:36:15

接上一篇文章,在了解生产调度问题的背景和基本概念之后,我想先从比较基础的 flowshop和 jobshop 数学模型入手,理解实际调度过程中的问题求解思路。这一篇文章主要面向 flowshop 问题进行数学建模,对于这类比较经典的问题,其实已经有很多现成的模型和求解思路了。我也在网上进行了搜索,看到了3种模型形式,本篇文章将进行列举及描述。

问题描述

n 个工件在 m 台机器上进行流水加工,每个工件在机器上的加工顺序相同。并且每个工件在同一台机器上只加工一次,每台机器在某个时刻只能加工一个工件。各工件在各机器上的加工时间和准备时间已知,求某个调度方案使得调度目标最优。

模型形式1

来自chatgpt的回复。

变量:

·pij:作业 i 在机器 j 上的加工时间。
·决策变量xijk:0-1变量,表示作业 i 是否在时间段 k 被安排在机器 j 上。
·Ci:作业 i 的完工时间。
·Cmax:最大完工时间。

目标函数:

Minimize Cmax

约束条件:

1、每个作业在每台机器上只能被加工一次:
在这里插入图片描述
2、每台机器在任意时间只能加工一个作业:
在这里插入图片描述
3、确保作业 i 在机器 j 上的完工时间大于等于其在机器 j-1上的完工时间加上加工时间:
在这里插入图片描述
4、确保作业 i 在机器 j 上的完工时间大于等于其前一个作业在同一机器上的完工时间加上加工时间:
在这里插入图片描述
5、最小化最大完工时间:
在这里插入图片描述

模型形式2

来自阿里云开发者社区。

变量:

·xij:工件 i 比工件 j 先加工时取1;否则取0。
·pim:工件 i 需要在机器 m 上的加工时间。
·smi:工件 i 在机器 m 上开始加工的时间。
·Cmax:最大完工时间,即makespan。

目标函数:

min Cmax

约束条件:

1、工件 i 比工件 j 先加工,则工件 j 必然比工件 i 后加工。即xij=1时xji=0,反之亦然。
在这里插入图片描述
2、若工件 i 比工件 j 先加工,则在任何机器上工件 j 的开始时间都不早于工件 i 的结束时间(用 Z 表示某一“足够大”的正实数)。
在这里插入图片描述

3、工件在后一机器上的开始时间不得早于前一机器上的结束时间。
在这里插入图片描述

4、最大完工时间定义。
在这里插入图片描述

5、变量的取值范围。
在这里插入图片描述

完整表达如下:

在这里插入图片描述

模型形式3

来自“运筹优化与数据科学”公众号。

变量:

·Xji:表示工件 j 被安排在位置i。
·Srj:表示机器 r 上第 i 个工序的开始加工时间。
·Trj:表示机器 r 加工工件 j 需要的时间。

目标函数:

最小化所有工件在最后一台机器上的完工时间(其实我并没有理解这里的表达式,有待后续深入
在这里插入图片描述

约束条件:

1、一个工件位置只有一台机器。
在这里插入图片描述

2、一台机器上只能安排一个工件位置。
在这里插入图片描述

3、第一台机器第一个工件的开始时间为0。
在这里插入图片描述

4、在第一台机器上,一个工件的开始时间等于上一个工件的完成时间。
在这里插入图片描述

5、在第 r+1 台机器上,第一个工件开始的时间等于第 r 台机器第一个工件的完成时间。
在这里插入图片描述
6&7、机器上某个工件开始的时间为 max{当前机器上一个工件的完成时间,上一个机器当前工件的完成时间}。
在这里插入图片描述
8、决策变量为0-1变量,Xji=1表示工件 j 被安排在位置 i。
在这里插入图片描述

9、机器 r 上第 i 个工件的开始加工时间为非负值。
在这里插入图片描述

总结

通过梳理这3种模型形式,我发现第2种形式是更为简洁的。对于flowshop问题来说,工件加工的机器顺序已经确定,就是要求解一组工件的先后顺序,从决策变量定义上看模型形式2更切中要害、易于理解。

参考资料

[1] 面对Flow-shop调度问题如何优化?可用MindOpt来决策
[2] 利用Pyhton+Gurobi求解置换Flowshop问题入门

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

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

相关文章

通用的职位招聘小程序ui模板

蓝色简单的校园招聘,行业招聘,职位招聘手机小程序页面模板。包含:职位列表、职位详情、基本信息填写、登录、个人主页、消息页面等功能 通用的职位招聘小程序ui模板

Hadoop-YARN-Tutorial

Hadoop-YARN-Tutorial 1 What is YARN? Yarn is the acronym for yet another resource negotiator. Yarn是yet another resource negotiator的缩写。 Yarn is a resource manager created by separating the processing engine and the management function of mapreduce. …

Java 基础--File - IO流(2)

I/O流 定义 数据从硬盘流向内存为输入流,数据从内存流向硬盘为输出流。输入也叫读取数据,输出也叫写出数据。 IO分类 1.按照数据的流向分为:输入流和输出流 ①输入流:把数据从其他设备上读取到内存中的流 ②输出流&#xff1…

fork创建子进程详解

一.前言 在上一篇文章-进程的概念,最后我们提到了创建进程的方式有两种方式,一种是手动的创建出进程,还有一种就是我们今天要学习的使用代码的方式创建出子进程-fork。 而学习fork创建出进程的过程中,我们会遇到以下问题&#x…

[数据结构] 基于选择的排序 选择排序堆排序

标题:[数据结构] 基于选择的排序 选择排序&&堆排序 水墨不写bug (图片来源于网络) 目录 (一)选择排序 实现:(默认从小到大排序) 优化后实现方法: (二)堆排序…

【帧中继实验-ensp】

实验要求 在R1上开启一个点对点子接口,用于连接 R1–R2,两端IP地址为12.1.1.x 。开启一个多点子接口 ,用于连接R1–R3,R4,两段IP地址为134.1.1.x。 具体DLCI分配和映射关系如下: R1 102 R2 201—动态映射…

微软正在放弃React

最近,微软Edge团队撰写了一篇文章,介绍了微软团队如何努力提升Edge浏览器的性能。但在文中,微软对React提出了批评,并宣布他们将不再在Edge浏览器的开发中使用React。 我将详细解析他们的整篇文章内容,探讨这一决定对…

QML:Settings介绍

用途 提供持久的独立于平台的应用程序设置。 用户通常希望应用程序在会话中记住其设置(窗口大小、位置、选项等)。Settings能够以最小的工作量保存和恢复此类应用程序设置。 通过在Settings元素中声明属性来指定各个设置值。仅支持由QSettings识别的值…

Gemma2——Google 新开源大型语言模型完整应用指南

0.引言 Gemma 2以前代产品为基础,提供增强的性能和效率,以及一系列创新功能,使其在研究和实际应用中都具有特别的吸引力。Gemma 2 的与众不同之处在于,它能够提供与更大的专有模型相当的性能,但其软件包专为更广泛的可…

《梦醒蝶飞:释放Excel函数与公式的力量》9.3.1PV 函数

9.3.1 函数简介 PV函数用于计算一系列未来付款的现值,考虑了一定的利率。现值是未来金额的贴现值,表示在当前时刻相当于未来某一时间点的总价值。 9.3.2 语法 PV函数的语法如下: PV(rate, nper, pmt, [fv], [type]) rate:每期…

JavaEE初阶-网络原理1

文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议,最主要就是学习的报文格式,对于UDP来说,应用层数据到达UDP之后,会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…

中英双语介绍美国苹果公司(Apple Inc.)

中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…

算法刷题笔记 滑动窗口(C++实现,非常详细)

文章目录 题目描述基本思路实现代码 题目描述 给定一个大小为n ≤ 10^6的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7]&…

SAP PS学习笔记02 - 网络,活动,PS文本,PS文书(凭证),里程碑

上一章讲了PS 的概要,以及创建Project,创建WBS。 SAP PS学习笔记01 - PS概述,创建Project和WBS-CSDN博客 本章继续讲PS的后续内容。包括下面的概念和基本操作,以及一些Customize: - 网络(Network&#xf…

CC工具箱使用指南:【相交占比分析】

一、简介 需求场景如下,有【待分析地块】和【面积占比参考】2个图层。2个图层之间存在空间上的重叠。工具的目的是为了分析出【待分析地块】的每1个图斑中,和【面积占比参考】相交的面积,以及和总面积的占比。 举一个应用场景为例&#xff0…

java信号量(Semaphore)

Java中的信号量(Semaphore)是一种用于控制多个线程对共享资源的访问的同步工具。它可以用来限制可以同时访问某些资源的线程数量。Semaphore 提供了一个计数器来管理许可证的获取和释放,每个许可证代表对资源的一次访问权限。 import java…

阶段三:项目开发---搭建项目前后端系统基础架构:任务11:搭建项目后台系统基础架构

任务描述 1、了解搭建民航后端框架 2、使用IDEA创建基于SpringBoot、MyBatis、MySQL、Redis的Java项目 3、以原项目为参照搭建项目所涉及到的各个业务和底层服务 4、以原项目为例,具体介绍各个目录情况并参照创建相关文件夹 任务指导 1、讲框架的选择和原理 …

解决Unable to Correct Problems ‘You have Held Broken Packages’

进入 Software & Updates 后下拉 Download from,点击 Other… 点击 Select Best Server 等待测试服务器 测试完成后会默认标红测试出的最好的那个服务器,直接点击 Choose Server,可能需要输入系统用户密码5. 输入然后返回上级界面 点击 C…

实现ubuntu的任务计划反弹shell

1.实验目的 使用Ubuntu定时任务反弹shell 2实验环境 ubuntu:ip地址:192.168.80.133 kali:ip地址:192.168.80.134 3.编写crontab计划任务 在ubuntu的系统中使用crontab -e命令编写计划任务 作用:是将一个交互式的…

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同…