【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本文探讨了使用阿里巴巴达摩院的MindOpt工具解决FlowShop流水线作业排班的数学规划问题。FlowShop涉及到多台机器、多个工序和多个作业,目标是通过优化排班最小化总生产耗时。MindOpt通过数学规划方法,如线性或混合整数线性规划,将问题建模并转化为代码,利用云建模平台MindOpt Studio和MindOpt APL建模语言进行求解。案例中详细介绍了参数定义、变量解析、约束设置和目标函数,展示了如何通过MindOpt进行建模和求解,以达到最优化的生产调度。此外,文章还提供了代码示例和结果解析,帮助读者理解如何实际应用MindOpt解决这类问题。

本文主要讲述使用MindOpt工具优化FlowShop流水线作业排班的数学规划问题。

一、案例场景

image.png

FlowShop流水线作业排班也有称为生产下料问题,它涉及到多台机器、多个工序以及多个作业调度安排。在这个问题中,我们需要对多个作业在一组流水线上的处理顺序进行安排,以使得完成所有作业的总时间最短。

应用场景包括但不限于以下几点:制造业是FlowShop排班最传统的应用场景,如汽车、电子产品、服装、食品加工等。通常需要经历一系列的加工步骤,每步由不同机器完成,合理排班可最大化生产效率,缩短交货时间。

第二,在化学品和药品的生产中,原料需要按照一定的顺序,通过反应器、混合器和分离器的设备,排班优化有助于减少制造周期时间,提高设备使用率和这个质量。

第三,半导体制造,半导体生产涉及到严格的加工设计和清洁室环境,有效的作业排班能够降低在机台上的等待时间,提高产量。

第四,机械加工,零件需要通过生产、钻厂、等多个工序,合理排班可以减少机械加工时间和代制品的储存。

第五,在印刷业场景,印刷作业需经过预处理、印刷后处理等流程,正常的排班能够保证交货期限,并降低成本。

第六,物流和供应链,在分拣中心或仓库商品的装箱运输带排序等也需要考虑作业排班优化,提高物流的效率。

二、数学规划

这个问题可用数学规划方法解决。数学规划是一种数学优化方法,主要是寻找变量的取值,在特定的约束情况下,使决策目标得到最大或者最小的决策。数学规划的方法有线性规划、混合整数线性规划以及非线性规划。需要确定问题目标,约束变量取值范围,将其建立成一个数学模型,将数学模型转化为代码进行求解,得出的结果就是最优决策。求解过程中,需要使用优化求解器,可以帮我们求解大规模数据的数学规划问题。

image.png

三、问题描述

公司生产几套产品。这些产品的规格都不一样,生产各个环节的耗时会不一致,工厂的机器资源有限,如何安排产品生产,让总生产耗时最短?

image.png

我们考虑以下四点因素:一是产品的多样性,提到生产几套不同的产品,表明每个产品有不同的加工流程和时间。

二是工序耗时不一致,每个产品在每个工序上的耗时不同,意味着需要为每个产品的工序定义不同的处理时间。

三是机器资源有限,机器数量受限,这意味着不可能为每个工序同时分配一台机器,需要进行排班来高效利用机器资源。

四是让总生产耗时最短,通常意味着需要最小化目标,就是能完成所有产品的最终操作所需要的总时间。

四、代码解析

image.png

使用工具:

4.1 参数、集合定义

image.png

首先定义了CSV文件的路径是在data路径下,然后定义了两个集合,一是产品任务的集合,二是工序机械表的集合。读取data目录下的production name csv文件。后面的1n是读取数据的方式。目前支持读取数值和字符串两种类型。1n是按照数值读取文件的第一列。skip 1表示跳过表格的第一行内容。第二个集合machines也读取第一列的数值。

下面声明的参数是读取了production time文件,表示1n、2n以及3n是读取个产品在每个工序的耗时, 比如产品1在这个工序机器1上所需加工的耗时是54,我们这两个参数定义了分别代表集合jobs产品任务列表和工序列表的基数。在数学规划或优化问题中,通过计算集合的基数可以得到关键的数值信息。

4.2 变量解析

image.png

第一个变量是x{i,k}, 这是一个二进制决策变量,表示产品i是否在序列中的位置K上进行加工,如果说I在位置K上加工,那么x{i,k}=1,如果不是,x{i,k}=0。这个变量建立了产品与加工顺序之间的关系。<I,k> in jobs定义了索引对i、k的范围。其中每个I和每个K都取自同一个集合jobs,这意味着对于每个工作任务都有一个与其他所有可能序列位置的关联。

第二个s{m,k}表示在机器m上处理序列中位置K作业时的开始时间,<m,k> in machines定义了索引对MK的范围。其中m取自机器集合machines,而K取自工作任务集合jobs,这就确保了为每个机器和每个工作任务都分配了开始。

第三个变量是e{m,k},表示在机器M上处理序列中的位置K作业时间的结束时间。定义与上面s{m,k}是相同的索引堆范围,确保了为每个机器和每个工作任务都分配了结束时间。

image.png

声明的目标是最小化最后一个工序机器上最后一个排序序号任务的加工结束时间。决策变量e是一个特定的元素,表示在最后一台机器last machines上处理最后一个作业Last jobs时的结束时间,这实际上是整个生产流程的完成时间,目标函数的选择反映了一个假设,所有作业必须在最后一个机器上完成。因此,总时间是由在最后一台机器上完成的最后一个作业的结束时间来决定的。通过最小化时间,可以确保整个作业流程尽可能高效。

其次,在排程问题中,总的完成时间经常被用作性能指标,因为其能直接影响到生产成本和交货时间。在实际的应用中,这个指标可能会与其他方面考虑,比如作业的平均完成时间、延迟时间,或者机器空闲时间等结合起来共同构成更为复杂的目标函数。

4.3 约束解析

image.png

第一个约束意味着对于每一个产品I以及在整个加工顺序jobs上的分配之和,通过二进制变量x{i,k}表示。当x{i,k}=1时,表示产品i位于加工顺序的第K个位置,分配之和应等于1。也就是任何产品都不能同时出现在多个不同的加工位置上,每个产品只能被安排在一个特定的加工顺序位置。

第二个约束意味着对于每一个加工顺序位置K所有可能的产品i的二进制变量x{i,k},对于每个加工顺序的位置K及所有可能的产品I的二进制变量x{i,k}之和应等于1。也就是在任何一个特定的加工顺序位置上,只有一个产品的xIK会取值为1。表示该产品被安排在加工顺序的位置上,其他产品就不能在这个位置上。这个约束确保了每一种加工顺序只可能有一个产品对应。

image.png

第三个约束表示所有可能的产品及其组合,集合machines中每个机器m与集合jobs的每个产品k,产品k在机器m上的完成时间e{m,k}必须大于等于该机器M上的开始时间,即s{m,k}与所有产品i乘以被安排的耗时的概率之和,概率通过变量体现。换句话说,在确定了加工顺序后,这个顺序由x{i,k}决定,模型确保了产品k在机器m上的结束时间至少要考虑到从开始加工到完成整个生产过程所需要的时间,包括实际生产耗时。

image.png

第四个约束表示在对于每台机器m和除了最后一个产品之外所有产品位置k下一个位序的产品,在这个产品位置k上开始实现,也就是s{mk+1}必须大于等于当前产品K在这台机器上的结束时间,用e{m,k}表示,除了最后一个产品之外的所有产品位置k用集合jobs中剔除最后一个元素后的所有元素。这个约束保证了在流水作业中,一台机器上的加工顺序是连续且交叉的,每个产品在完成之前下一产品不能开始。

image.png

第五个约束表示去除最后一台机器之外的所有机器m和集合jobs中的K以及jobs中的所有产品位置k,产品位置k在下一机器m+1上的开始时间至少要等于该产品在当前机器m的结束时间。也就是在流水线作业的连续过程中,每个产品在完成一台机器上的加工后,才能开始在下一台机器上加工,确保了加工顺序在不同机器间是连续且无交叉的。

image.png

最后一条约束规定了当产品按照顺序开始加工时,第一个产品在第一台机器上的开始时间s{11}必须为0,也就是从零开始生产第一个产品。这意味着整个生产流程的计时起点是从第一台机器上对第一个产品的加工开始的,假设没有任何预处理或者等待时间,从该时刻开始计算每个产品的不同级以上的加工时间和完成时间。

4.4 对模型进行求解

display是我们打印决策变量的取值。本案例的变量值过多,因此我们可以输出一个CSV文件,以数据表格的形式展示内容,提高决策变量的可读性。

image.png

首先我们代码是打印了一行表头,描述了CSV文件的一些列信息,这行代码将标题打印到一个名为排班计划.csv的文件中,这些列标题包含产品、序号、各个工序的开始时间。第一个工序S到第五工序以及作业在最后一台机器上的最后结束时间,我们使用close命令关闭文件。

image.png

然后需要将数据写入排班计划表格。用forall对于集合调度的所有可能组合ik进行一个遍历,条件是x{i,k}大于等于1,也就是作业I被分配到了这个位置K的时候,对应每个作业的每个位置。我们使用print语句,将作业编号I、作业在这个调度中的位置K、每台机器上作业的开始时间s{1,k}到s{5,k}以及在最后一台机器上的结束时间e【 lastmachine ,k】格式化后追加到排班计划文件中。其中,(:.0f)表示将数字格式化为没有小数部分的整数,再使用close关闭文件。

4.5 结果解析(部分)

image.png

最小耗时1278,即我们求解得到的最小决策目标。下方为决策变量的取值,也就是我们产品1安排在了第9个位置进行加工。第一个工序S的开始时间是343,第二个开始时间是397,依次往下推。最后第一个产品的最后的结束时间是703。

五、源码获取

image.png

大家可以扫描二维码,获取源代码。

FlowShop流水线作业安排-MindOpt Studio

相关文章
|
3月前
|
缓存 运维 前端开发
阿里云云效操作报错合集之如何解决在使用流水线构建net8应用时遇到无法构建的报错
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
3月前
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
3月前
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
3月前
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。
|
3月前
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
3月前
|
jenkins 持续交付
使用 Jenkinsfile 实现流水线即代码 (Pipeline as Code)
【8月更文第31天】在现代软件开发实践中,持续集成(CI)和持续部署(CD)已经成为不可或缺的一部分。Jenkins 是一个非常流行的 CI/CD 工具,它支持多种方式来定义构建流程,其中“流水线即代码”(Pipeline as Code)是一种将构建逻辑版本化并纳入源代码管理的方法。这种方式不仅使得构建流程更加透明,也方便团队协作和版本控制。
219 0
|
3月前
|
jenkins 网络安全 持续交付
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
131 0
|
3月前
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之如何下载流水线构建过程中生成的jar
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何限制在本地的构建主机创建的流水线的并发数
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之怎么设置流水线中的全局参数
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

热门文章

最新文章