排程系统中关于任务优先级的需求延伸与设计构思

无论是面向销售订单的MPS,还是基于多工序制约关系的APS,还是具体车间生产中针对单一工序的任务作业调度优化,都存在基于被排程对象(例如销售订单、生产工单、工序任务)的优先级进行优化的需求场景。当我们仅在宏观、较高层次的角度考虑,任务优先级是相当简单的。无非是实现“确保高优先级的任务(以下将所有排程对象统称为任务),更优先于低优先级的任务执行,即优先级越高越早执行”这一简单的要求。

尽管上述的需求描述容易理解,且可以大概设想实现起来并不复杂。但当我们在具体的项目中遇到该需求时,则有可能需要针对该需求的不同分支情况作深入展开,并需要针对不同分支作情况作不同层次、权重分析后,才能在OptaPlanner/Timefold中更好实现。本文将归纳我们在具体项目过程中,面对任务优先级这一需求时,考虑到的情况分支与设计思想。在系统中具体实现,特别该需求OptaPlanner/TimeFold中对应的具体模型与约束实现逻辑及相应代码,则属于我们产品与项目的内容,无法在此完全公开。而在我们的《OptaPlanner/Timefold实践课程》中会提供相应的设计资料与示例代码。

优先级的简单理解 = 误解

所谓的“任务优先级”需求,我们在进行系统设计初期,对其并不太重视,因为这基本上算是一种任务排序要求,例如我们需要对一些任务进行排序,优先级越高的越靠前,反映在时间上就越早执行。在SQL或Java中仅需一个Order By子句或一个JavaStream的Collections.sort方法即可实现。但当我们细心分配用户的需求时才发现,情况远没有我们设想的那么简单。因为“通过排序来实现任务优先级”,仅局限于所有任务均处于同一任务序列内的情况,例如,对于同一个设备的待执行任务序列,通过对序列按优先级排序,即可轻松实现优先级越高,越早执行。

实际需求需要视情况按不同的分支处理

但事实是,我们真正需要面对的场景,并非如此简单,可以归纳如下:

1.多个任务序列并行,且争抢资源,甚至资源冲突

我们的排程系统面对的往往是多个序列,还是以生产设备与待加工任务序列的场景为例,有可能我们的系统面对的是多个设备,也就是存在多个并行的序列,优先级需求指的是在多个设备上实现,而非单一设备上。即需要考虑将大批量的任务分配到多个设备上时,在分配方案上如何实现跨设备的任务优先级需求。

图片

2. 资源不足场景下的资源优先级

此外,有可能因为产能问题,并无法保证所有任务均可以分配到合理设备;即资源不足时,任务优先级的高低问题。这种情况就不再是根据优先级安排任务的执行选择次序问题,而是需要在有限制的资源条件下,尽可能保证高优先级的任务获得资源;即若资源确实不足的情况下,需要放弃部分任务的资源分配时,尽可能先放弃低优先级的任务。因此,这是一个根据任务优先级进行任务取舍问题,而不是任务的执行时间问题,与我们初始考虑的情况有本质区别。但从业务上,它仍然是任务优先级问题。

图片

3. 若因为产能问题,有部分无法保证交付时间时,优先级的作用

当可用资源量不足,但可以通过往后延迟任务的执行时间,来将所有任务都分配到合适的资源。可以理解为,资源的空间维度(数量)不足,通过时间维度来实现分配到位。若任务均存在要求交付时间时,那么面对任务优先级需求时,则反映为,尽可能保证高优先级的任务不被延误(即保证高优先级任务在交付时间前完成)。从另一个角度看,就是若必须有部分任务无法保证交期,则优先级越低的任务越优先放弃交期保证。

图片

4. 任务优先级与其它需求的冲突

在实际的排产项目需求中,不可能只基于优先级进行资源分配与任务时间安排,还需要考虑众多其它因素,例如:成本 - 某些生产资源尽可能满足了任务优先级要求,但该加工次序将会引起具体的换摸成本。又如:基于任务优先级排好的资源,有可能无法实现最优的“任务-资源”匹配原则。诸如此类问题,会使得整个优化模型形成一个多目标优化模型。因此,第4点不仅在任务优先级的需求中遇到。不在本文讨论重点。后续我们会针对排产及相关问题中,多目标优化的场景独立一篇出来讨论。

进行了上述分类后,因应任务优先级需求实现,即可根本不同的场景类别分别设计对应的约束来实现。例如:

  1. 针对多个任务序列进行排程时,通过推导出来的任务完成时间与就绪时间之差作为惩罚评分基础。

  2. 对于资源(设备)不足情况,当对于未被分配到设备的任务进行惩罚时,可考虑将为每个任务设定一个因素的惩罚评分值为基础。

  3. 对于已产生延误的任务,可以考虑将其延误程度(例如完成时间与交付时间之差)作为惩罚评分的基础。

  4. 对于优先级需求与其它需求的竞争冲突的情况,并非仅属于优先级方面的问题,而是优先级需求与其它需求的权重问题。可以根本实际情况综合考虑不同约束的重要程度,设定不同的额外权重来定义不同约束的重要程度,或评分层次来实现不同需求的层次隔离。

上述第1,2,3三种情况其评分逻辑各不相同,但均需要注意:必须将满足惩罚条件任务的优先级纳入评分逻辑中,作为影响评分结果的一个重要因子之一,从而实现不同场景下的任务优先级约束

关于优先级的定义

无论是MPS还是APS中,任务的优先级需要根据实际情况来实同,排程系统只能基于这些已定义好的优先级字段值,在排程过程中进行针对性的优化。而在具体项目实践中,定义任务的优先级,也有非常多的情况。例如:根本任务的紧急程度定义优先级,如: 可见以下式子定义:p = d / (t1 - max(t2, t3))其中p为任务优先级的字段值,d为该任务的生产时长, t1为任务的交付时间,t2为任务的就绪时间,t3为当前时间. 

当然也有可能根据人工对客户、质量、时间、资源等因素的综合考虑,“人工”定义的情况。对于规划系统而言,任务的优先级是一种输入,这种存在多因素扰动、且容易变更的逻辑,应该放在规划系统外实现,至少需要在规划系统的前置处理程序(例如待排数据的展开阶段)中实现。

<完>

我们提供基于OptaPlanner/Timefold的规划服务平台,可提供APS,VRP(辆车路径规划与调度),实时作业调度等供应链及生产相关的优化运算模块。与平台相关疑问,可以添加本人微信(13631823503)探讨,或关注我们的微信公众号【让APS成为可能】及时接收相关消息。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDP报文格式详解

✏️✏️✏️各位看官好&#xff0c;今天给大家分享的是 传输层的另外一个重点协议——UDP。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff0…

网页设计的灵感从哪来?试试这15个灵感网站

设计灵感网站是许多设计师必备的工具&#xff0c;因为它们提供了一个创造性的源泉&#xff0c;可以帮助设计师找到灵感和灵感&#xff0c;从而开发出惊人的设计。 推荐15个设计灵感网站&#xff0c;涵盖了平面设计、网页设计、UI设计等不同领域的设计。 即时设计资源广场 即…

私域爆款案例拆解-元气森林

一、背景调研 二、引流策略 三、私域运营策略

代码随想录27期|Python|Day9|字符串总结|双指针总结|KMP初探(28. 实现 strStr()、 459.重复的子字符串)

字符串总结 字符串类类型的题目&#xff0c;往往想法比较简单&#xff0c;但是实现起来并不容易&#xff0c;复杂的字符串题目非常考验对代码的掌控能力。 双指针法是字符串处理的常客。 题目类型的总结可以看代码随想录&#xff08;很全面&#xff09; 字符串题目总结&…

【lesson11】数据类型之string类型

文章目录 数据类型分类string类型set类型测试 enum类型测试 string类型的内容查找找所有女生&#xff08;enum中&#xff09;找爱好有游泳的人&#xff08;set中&#xff09;找到爱好中有足球和篮球的人 数据类型分类 string类型 set类型 说明&#xff1a; set&#xff1a;集…

排序算法:【插入排序】

一、插入排序&#xff1a;时间复杂度、原地排序 原理&#xff1a;可以想象成打扑克牌时候&#xff0c;发到手里的牌&#xff0c;我们一张一张拿起来插到手里牌的适当位置。 将待排序列表的第一个元素看作是一个有序序列&#xff08;或叫有序区&#xff09;&#xff0c;然后从第…

ESP8266模块(CH340)零基础实战

USB数据线连接ESP8266模块到电脑 先按住FLASH键,再按一下RST键,然后松开 此时电脑可识别出CH340 COM接口 CH340芯片厂商网址: wch.cn 传输比特率9600 win11自带驱动 下载Arduino IDE

数据科学实践:探索数据驱动的决策

写在前面 你是否曾经困扰于如何从海量的数据中提取有价值的信息?你是否想过如何利用数据来指导你的决策,让你的决策更加科学和精确?如果你有这样的困扰和疑问,那么你来对了地方。这篇文章将引导你走进数据科学的世界,探索数据驱动的决策。 1.数据科学的基本原则 在我们…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

力扣108. 将有序数组转换为二叉搜索树(三种思路)

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 > 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5…

如何在Linux本地部署openGauss开源数据管理系统并结合内网穿透公网访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

AI:94-基于深度学习的微小目标检测与定位

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的核心代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新…