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

无论是面向销售订单的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.mzph.cn/news/214841.shtml

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

相关文章

高效扫频阻垢装置广谱感应水处理设备介绍工作原理使用参数和选型

​ 1&#xff1a;高效扫频阻垢装置设备介绍 高效扫频阻垢装置是一种通过控制箱释放变频电磁信号&#xff0c;传输到信号放大装置&#xff0c;管道外侧的电磁线圈和电锤产生高频机械振动&#xff0c;在管道和水中传输&#xff0c;通过共振机理破坏水分子之间的氢键&#xff0c;产…

Java - Lombok介绍、使用、工作原理、优缺点

介绍 Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging vari…

算法Day28 二进制差异序列(格雷码)

二进制差异序列&#xff08;格雷码&#xff09; Description n 位二进制差异序列是一个由2^n个整数组成的序列&#xff0c;其中&#xff1a; 每个整数都在范围[0, 2^n - 1]内&#xff08;含0和2^n - 1&#xff09; 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数…

【网络安全】CTF入门教程(非常详细)从零基础入门到进阶,看这一篇就够了!

一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

计算机丢失msvcp140dll怎么恢复?快速解决dll缺失问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140dll丢失”。msvcp140.dll是一个动态链接库文件&#xff0c;它包含了许多C标准库函数的实现。这些动态链接库文件是程序运行所必需的&#xff0c;它们包含了许多函数和资源&#xf…

圣诞新奇惊喜:利用 AI 技术帮助圣诞老人创建手写信件

人工智能甚至正在接管北极的任务。在即将到来的圣诞节假期之前&#xff0c;圣诞老人和他的助手们迎来了一项革命性的技术支持。一群乐于助人的精灵采用了人工智能技术&#xff0c;制作出独一无二、看似亲手书写的信件&#xff0c;以确保遵守圣诞老人的「北极标准」。 这些信件通…

C语言实现选择排序

完整代码&#xff1a; #include<stdio.h>//交换函数&#xff0c;交换两个数 void swap(int *a,int *b){int temp;temp*a;*a*b;*btemp; }//选择排序&#xff0c;从小到大 //参数&#xff1a;arr[]表示待排序数组&#xff0c;len表示该数组长度 void select_sort(int arr[…

爱智EdgerOS之深入解析安全可靠的开放协议SDDC

一、协议简介 在 EdgerOS 的智慧生态场景中&#xff0c;许多智能设备或传感器的生命周期都与 SDDC 协议息息相关&#xff0c;这些设备可能是使用 libsddc 智能配网技术开发的&#xff0c;也有可能是因为主要功能上是使用其他技术如 MQTT、LoRa 等但是设备的上下线依然是使用上…

图的遍历(深度优先遍历 + 广度优先遍历)

目录 &#x1f33c;广度优先遍历 &#xff08;1&#xff09;邻接矩阵BFS &#xff08;2&#xff09;邻接表BFS &#xff08;3&#xff09;非连通图BFS &#xff08;4&#xff09;复杂度分析 &#x1f33c;深度优先遍历 &#xff08;1&#xff09;邻接矩阵的DFS &#x…

Caching the Application Engine Server 缓存应用程序引擎服务器

Caching the Application Engine Server 缓存应用程序引擎服务器 Application Engine caches metadata just like the application server. This caching enhances performance because a program can refer to the local cache for any objects that it uses. 应用程序引擎…

科技云报道:从数据到生成式AI,是该重新思考风险的时候了

科技云报道原创。 OpenAI“宫斗”大戏即将尘埃落定。 自首席执行官Sam Altman突然被董事会宣布遭解雇、董事长兼总裁Greg Brockman辞职&#xff1b;紧接着OpenAI员工以辞职威胁董事会要求Altman回归&#xff1b;再到OpenAI董事会更换成员、Altman回归OpenAI。 表面上看&…

java--LocalDate、LocalTime、LocalDateTime、ZoneId、Instant

1.为什么要学习JDK8新增的时间 LocalDate&#xff1a;代表本地日期(年、月、日、星期) LocalTime&#xff1a;代表本地时间(时、分、秒、纳秒) LocalDateTime&#xff1a;代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒) 它们获取对象的方案 2.LocalDate的常用API(…

【精选】 VulnHub (超详细解题过程)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

C# 任务的异常和延续处理

写在前面 当Task在执行过程中出现异常或被取消等例外的情况时&#xff0c;为了让执行流程能够继续进行&#xff0c;可以使用延续方法实现这种链式处理&#xff1b;还可以针对前置任务不同的执行结果&#xff0c;选择执行不同的延续分支方法。子任务执行过程中的任何异常都会被…

线程安全的哈希表ConcurrentHashMap

1. HashTable 不推荐使用&#xff0c;无脑给各种方法加锁 2.ConcurrentHashMap 多线程下推荐使用 锁粒度控制 HashTable直接在方法上加synchronized&#xff0c;相当于对哈希表对象加锁&#xff0c;一个哈希表只有一把锁。多线程环境下&#xff0c;无论线程如何操作哈希表…

深入理解Dubbo-3.高级功能剖析和原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

利用贝叶斯超参数优化,提升模型效果更科学(附Python代码)

超参数优化在大多数机器学习流水线中已成为必不可少的一步&#xff0c;而贝叶斯优化则是最为广为人知的一种“学习”超参数优化方法。 超参数优化的任务旨在帮助选择学习算法中成本&#xff08;或目标&#xff09;函数的一组最佳参数。这些参数可以是数据驱动的&#xff08;例…

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本&#xff0c;然后点击“启动 MetaHuman Creator” 等待一段时间后&#xff0c;在如下页面点击选择一个人…

Apipost版IDEA插件:Apipost-Helper

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

Tair(2):Tair安装部署

1 安装相关依赖库 yum install -y gcc gcc-c make m4 libtool boost-devel zlib-devel openssl-devel libcurl-devel yum&#xff1a;是yellowdog updater modified 的缩写&#xff0c;Linux中的包管理工具gcc&#xff1a;一开始称为GNU C Compiler&#xff0c;也就是一个C编…