在进行APS(高级计划与排程)系统开发时,绝大多数情况下是需要考虑多目标的。但面对多目标问题进行规划求解时,我们往往极容易因处理方法不当,而影响输出结果,令结果与用户期望产生较大差别。事实上很多时候用户,面对此类问题也无法给出一个确定的合理的期望,因为多个目标混合在一起的时候,产生复杂的规划逻辑,用户自身也会被迷惑,到最后就错误地提出一些所有目标都达到极致的“完美”计划要求;但客观上是不存在这种“完美”计划的。

  本文将以制造业中的生产计划为背景,介绍APS技术中的处理多目标规划问题相关知识与经验,介绍多目标规划问题的求解,是如果反映在生产计划优化系统的设计过程中的。在企业供应链的其它环节的优化过程,同样适用此本文所述的理论。

多目标规划在现实情况下的体现

  在制造业中创建生产计划时,考虑的因素非常多且繁杂。包含客观必须符合的规则,称为硬约束;以及作为计划优劣的衡量指标、可量化、可违反的规则,称为软约束。下面对这两种约束进行详细分析。

硬约束

  以制造业的生产环节为例,硬约束是指那些在制定生产计划过程中,是一种定性的制约因素,其对应的约束必须遵循;一旦违反,会令计划不可行。也就是说,对于此类制约因素,对其考量只有True(符合)/False(违反)种结论,而不考量其违反程度是大或小。例如产品的工艺要求,生产任务对机台的参数要求,生产工艺产生的环境影响因素等,都是硬性指标,一旦有违反,会令计划无法执行。再例如严重违反政策法规的制约因素,都会被定义为硬约束,力求在计划过程中无条件、零容忍地遵守。

  在对问题进行数学建模,并使用求解器进行规划求解的过程中,硬约束将会作为约束条件出现,也即所建立的数学模型中的s.t.(subject to)部分。可以设想到,若一个生产计划问题可以被认定为规划问题(不管是线性规划,还是非线性规划),其数学模型的s.t.部分将会非常复杂。事实上在实际生产环节中,绝大部分情况是难以将生产计划问题直接地抽象成数学模型的。而且对于普通的工程人员而言,将整个系统中的生产计划制约因素和优化目标都建模成数学模型,再进行规划求解,要求也是极高的。普通的软件工程人员,并未受过该方面的专业训练,并不具备这方面的能力。这也是为什么一些对业务逻辑表达方式更友好,描述语法语义更丰富,通用性强的规划引擎(其核心是一个求解器 - Solver),更容易在软件工程实践中被成功应用。

软约束

  从业务的角度看来,软约束也是制约因素的一种,其目的是让生产计划存在一些可议价的、定量的因素,令到计划生成过程中,趋向我们意愿发展。也是说,相对硬约束而言,软约束是有“商量,议价”余地的。最好的情况下,APS系统生成的生产计划,其硬约束、软约束都完全符合。但是因为实践生产环节中,存在大量客观因素,有些软约束是不可避免要被违反的,甚至系统本身设计的逻辑中,已经安排了把一些因素设计为必然会违反的约束,其目的是给规划引擎指明一个优化方向。即通过此类趋向约束,向规划引擎提供一个信息 - “尽管规划所得的解可以违反这些软约束,但你违反的程度越低,得到的解越优,也就是得到的计划越优化。”,软约束在现实业务中,通常对应于成本、机台开动率、生产效率、订单交期等。也就是说,软约束是一种定量约束,整个规划的目标首先是确保硬约束全部符合,再在此基础上再力求提高软约束的符合程度。当因客观原因,某个软约束无法完全符合时,则进一步寻找软约束违反得更少的方案。

  在对规划问题进行建模时,因为软约束是一个为规划运算指导方向的组成部分,通常会把它作为规划目标体现在数学模型中。例如进行生产计划优化程序设计时,可以把成本最小化作为规划目标。也就是说,在生成生产计划时,在保证工艺参数、安全特性等硬条件不被违反的前提下,寻找出最低成本的计划方案,就是本次规划运算的目标。在建立的数学模型中,软约束体现为目标函数。例如,成本最小化在模型中会表示为 Min f(x) (其中f为成本函数).

硬约束与软约束存可以存在互相转换的可能

  在实际业务环境中,某些因素被定义为硬约束或软约束,是与当时具体的情形相关的。某一因素在特定情况下需要确保不违反,则需要被定义为硬约束。但相同的因素,有可能在另外的条件下,可以作出一定程度的让步,甚至放弃;则可定义为软约束。

  例如产品交期,对于某些订单而言,因为其涉及到的合同存在重大责任,或延期会影响到企业商誉,进而影响企业生存,必须保证交付不延误,不存在任何让步的空间;因此,需要被定为硬约束。但有些订单其优先级较低,延误的损失远比为了确保不延误而付出的代价高,则有可能允许一定程度的延期。又如,某些生产活动,会对环境造成某种程度上影响,当政府监管机构对该影响未作出强制消除要求时,企业只会在其它更高优先级的因素得到保证的前提下,尽量减少此类影响的发生。但若政府对这种影响作出明确要求,并以法律法规形式作出限制,要求企业在生产活动中必须消除,否则将会触犯相关法律法规时,此影响对应的制约因素,需要在制定生产计划时,作为硬约束考虑,以确保不违规。

  因此,硬约束与软约束在一定的环境条件下,存在互相转换的可能。而在我们对规划模型进行设计时,这种转则是性质上的改变。当一个因素作为硬约束存在时,它是反映在规划模型的限制条件中的。而当它转化为软约束时,建模时则需要把该因素作为优化目标考虑。

多个优化目标

  在常见的运筹优化教材中多目标优化相关的章节里,涉及规划问题的数学模型,很多例子都是由多个约束条件及一个优化目标组成的。即对应于实际规划问题中,多个硬约束和一个软约束组成。例如各种线性规划例子中出现的,某工厂的生产活动在若干项约束条件下,实现利润最大化的情况。其【利润最大化】就是该规划问题的唯一优化目标,利润函数也是唯一的目标函数。

  但是在实的规划系统(例如各APS系统)中,面对更为复杂的规划情况时,其规划目标往往不只一个,有可能多个。且这些目标往往错综复杂,有可能存在两个方向相同的目标,也可能两个目标是相反的,即互相制衡的。总之,这些目标之间没有直接的可比性。

  面对这种情况,在设计规划程序时会变得相当复杂。在运筹学上,此类问题称为多目标规划问题;其数学模型中存在多个目标函数。大家可以想象中,当存在多个目标函数时,其优化的结果往往是无法令所有目标函数都能得到极值的。因此,多目标规划问题是运筹这中较前沿、较复杂的问题。因为多个目标对应的指标有可能不存在相关性。因此,并不存在一个所有目标均达到最优的解。只能在多个目标之间做权衡取舍,或将多个目标做出某种混合关联,得到一个单一目标规划问题。

求解多目标优化的困惑

  因为多目标规划问题存在多个目标需要同时被优化,所有这些目标都有一个对应的最优解,但各个目标具有不同的方向,在规划模型中,每个目标通过一个向量表示。也即不可能存在一个所有目标都达到最优状态的解决方案存在。

  因此,我们求解此类问题时,只能根据实际情况对不同目标进行个性处理。分别:

  1. 是对目标进行优先级划分,确保优先级越高的目标,其达到优化的程度越高。
  2. 根据目标的重要程度,对各个目标设置加权值,令求解器在运算过程中,根据比例来确定各个目标的重要程度,从而得到相应的解决方案。
  3. 对多目标问题求解,令其达到帕累托最优状态,在该状态中会提供一个解决方案集,用户可以在此解决方案集中选择一个解决方案。

多目标规划问题的处理办法

  根据上述的多目标规划,常用的处理方法有三种,分别是:

  1. 按各目标的优先级,分层处理,每一层只处理一个目标。从最高优先级目标开始,找出该目标最优状态下的解决方案集。再在此集合中找出次优先级目标的最优解方案子集。如此类推直到完成所有目标的寻优运算。 获得解决方案中,即为该多目标规划问题,目标分层的解决方案。
  2. 将多个目标桉权重转化为单一目标。根据各目标对应的业务因素的重要程度,设置相应目标的权重。通过权重的计算比例,来获得一个综合了各个目标的、新的单一目标,再对此新产生的单一目标求极值,所得的解决方案作为该问题的最优解决方案。
  3. 对问题进行优化,令其达到帕累托最优状态。获得处于此状态下的非劣最优解集,供用户来决定最终选用的方案。关于帕累托最优相关的资料,大家可以自行了解。通俗地讲,因为多目标规划问题中,各个目标是除了有轻重缓急外,还有方向性的,目标可表示为一个向量。帕累托最优,表示对多目标规划问题的各个目标求最优值,当达到这么一个状态:不存在对一个目标进一步改善,而不影响其它目标,即为帕累托最优状态。大家可以设想,这种状态下的解决方案不可能只有一个,而是一个解决方案集。

多目标规划问题详解

  下面,将对上述前两种处理办法进行详细说明。因上述讲到关于对多目标规划问题进行优化,达到帕累托优化状态,进而获得非劣解集。目前各个求解器暂时仍未有成熟的方案支持,本文暂不讨论此方法。

  在求解多目标规划问题时,关于求非劣解集的方法。因目前本人尚未接触过较成熟的、可以对多目标规划问题,求得非劣最优解集的引擎技术;因此,暂未有办法对该方法展开讨论。关于通过Optaplanner求非劣解集的方法,我曾请教过该项目负责人Geoffrey先生 ,他觉得以目前项目的状态,若Optaplanner中添加此功能,需要修改的工作量相当大,暂时还未有关于此功能的具体开发计划;除非该功能真正具体相当的价值。也这是各个求解器在多目标规划方面类似的地方。因为多目标求解领域,目前在学界深入研究相对非多目标规划更少,相关的成果也没有单目标规划成熟。而且多目标规划在一定程度及范围内,确实是应该进行进一步加工,形成单目标规划,即有相应的替代方案。因此,求非劣解集功能目前并非各大求解器的主要发展方向。

将目标按优先级分块层处理

  对多目标进行分层按优先级由高到低进行寻优。此方法可理解为,对于问题中需要优化的目标,根据实际业务情况,对其进行优先级划分并从高到低排序。优先级高的目标,相对优先级低的目标,享有压倒性的优先保证权。在保证对高优先级的目标达到最优的前提下,再去考虑次优先级目标的优化取值问题。即一个目标的优化范围,是在其上一级目标优化解决方案子集内进行求解的。

  例如,在实际的智能生产计划系统设计过程中,存在三个目标,它们的优先级由高到低排列,分别是【保证交期】、【提高机台利用率】和【降低成本】。那么在对这个问题进行规划求解时,第一步可以不考虑【提高机台利用率】和【降低成本】两个目标,只对【保证交期】一目标进行首次优化。当【保证交期】目标处于相对最优状态时,将存在【提高机台利用率】与【降低成本】两个目标取值不相同的解决方案集。下一步在将在此解决方案集的基础上,求【提高机台利用率】目标的相对最优的解决方案集;获得【提高机台利用率】目标也为最优的解决方案子集。再进一步求得【降低成本】目标的相对最优方案。那么,最终得到的方案,即为按【保证交期】 -> 【提高机台利用率】 ->【降低成本】递减的相对最优方案。

  通过Optaplanner实现上述步骤时,只需将【保证交期】、提高机台利用率】和【降低成本】三个目标设计对应的软约束(大家应该知道为什么要定义为软约束),通过BendableScore评分机制,定义为由高到低的三个层次即可。Optaplanner在求解时,将会按上述逻辑,根据不同层次的约束分数的优先次序,来求得相对最优解。

将多个目标转化为单一目标处理

  有些情况下某些规划问题,因为目标之间无法划分明确的优先级,因此,无法对多目标进行分层来逐一求最优解。例如,在特定情况下,有些目标优先级相对较高,但同样的问题在另外一种情况下,它的优先级则相对较低。因此,无法呈现出目标间优先级高低关系,也即无法在规划开始之前,就确定各个目标的优先次序。

  但是,这种问题的不同目标的优先级,存在一种“由量变达成质变”的特性。一个目标无法达成,需要被扣除约束分,当扣除分值达到一定量时,它会产生质的变化,会变成一个相对其它目标更为重要的目标。还是以生产计划中的【保证交期】与【降低成本】两个目标为例。应该先对交期无法保证时(即【保证交期】目标无法达成),企业所承受的损失量化成货币价值。而生产成本也需要以货币价值体现。通常情况下,为了强制保证交期,可能需要付出相对更高的成本代价。当为了保证一个订单的交期而承受的成本价值,高于该订单延期所遭受的损失货币价值时,【保证交期】目标的优先级,将会变得比【降低成本】目标的优先级更低了。这个时候我们希望的是放弃【保证交期】目标,从而令计划的整体成本得到降低。

  要设计上述逻辑,从Optaplanner的实现方法来看,表面上是简单的。我们只需要确定好交期的货币价值与成本的货币价值即可。当引擎在优化运算时,会根据各个可能解决方案的实际的交期和成本属性,自行对比并选择较优的解决方案。但看似简单的设计逻辑,在实现起来却非常具挑战性,其难点在于如何分配这两个目标的权重。这个就需要从业务上明确地甄别出各个目标之间的权重比例。并需要经过众多实际数据、多轮的规划进行反复验证,才能得到相对最佳的权重比例。而且通过这种比例关系规划出来的结果,非常不直观,对结果的验证也需要花费相当大的精力和时间。但这是一个相对最佳的处理多目标规划的办法之一。

总结:多目标规划的本质

  尽管多目标规划问题,令运筹优化问题变得更复杂,但它却是现实世界中是无时无刻存在的。正是多目标规划问题,才能真彻地反映现实世界的情况。它反映的是事物的多样性、冲突性和真实性。虽然单目标规划问题相对容易解决,也可以求得极佳的解决方案,但它只是现实世界的很少一部分,甚至是理论世界才存在的问题。仅能作为运筹规划的基本解决方法。真正需要解决的问题,还是相当复杂的多目标规划问题。这也是为什么APS技术在工程应用中实现难度大的最重要原因之一。多目标规划问题,不仅对于专业的工程人员来说难以解决,对于普通用户来说,对于APS输出的解决方案的理解与分析,也存在相当大的挑战,从而令很多用户对APS难以接受,甚至而失去信心。

如需了解更多关于Optaplanner的应用,请发电邮致:kentbill@gmail.com
或到讨论组发表你的意见:https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)实时沟通,但因本人日常工作繁忙,通过微信,QQ等工具可能无法深入沟通,较复杂的问题,建议以邮件或讨论组方式提出。(讨论组属于google邮件列表,国内网络可能较难访问,需自行解决)

APS技术中的多目标规划问题的更多相关文章

  1. (转) Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?

    Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么? 建站有很多技术,如 HTML.HTML5.XHT ...

  2. Aps.net中基于bootstrapt图片上传插件的应用

    Aps.net中基于bootstrapt图片上传插件的应用 在最近的项目中需要使用一个图片上传的功能,而且是多张图片同时上传到服务器的文件夹中,将图片路径存放在数据库中.为了外观好看使用了bootst ...

  3. Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)

    Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...

  4. 转:显示技术中的帧、帧数、帧率、 FPS

    在视频领域,电影.电视.数字视频等可视为随时间连续变换的许多张画面,而“帧( Frame)”是指每一张画面.而我们日常口语习惯或者说不严谨的交流中,通常对于帧数( Frames)与帧率( Frame ...

  5. Xen虚拟化技术中PV和HVM的区别

    转自 这里 Xen是一个开源的type-1或者裸机管理程序,它使得一个物理主机能够同时并行运行多个相同的或者不同的操作系统实例.Xen是目前唯一的开源可得的type-1管理程序.Xen被应用于许多商业 ...

  6. 【转 | 侵删】2D 绘图技术中的坐标系统与坐标变换

    本文介绍在 2D 绘图技术中的坐标系统和坐标变换的相关知识.同时介绍 Kity 在这方面提供的 API .希望这些知识对于需要进行图形应用开发的同学会有所帮助. 锤子的故事 很久以前,有一个画家,他很 ...

  7. 【ABAP系列】SAP DOI技术中I_OI_SPREADSHEET接口的使用

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP DOI技术中I_OI_S ...

  8. 数据库技术中的触发器(Trigger)——和ContentObserver功能类似

    刚总结过ContentObserver的作用和特点,顺便总结下数据库技术中的触发器(Trigger),触 发 器 分 为 表 触 发 器 . 行 触 发 器

  9. GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)

    1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics ...

随机推荐

  1. Excel 常用属性的一小部分

    1.由于工作需要,最近积累了一些Excel中的相关知识,特此记录 Workbooks xlbooks = xlApp.Workbooks; Workbook xlbook = xlbooks.Add( ...

  2. SQL函数语句

    MyBatis实现模糊查询 1.${-}代替#{-} 2.把'%#{name}%'改为"%"#{name}"%" 3.使用sql中的字符串拼接函数 4.使用标签 ...

  3. SQLalchemy 字段类型

    常用的SQLAlchemy列选项 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigIntege ...

  4. DoTween之队列

    //引用命名空间 using DG.Tweening; // 初始化一个sequence Sequence sequence = DOTween.Sequence(); //添加动画 sequence ...

  5. python中sys模块之输入输出错误流

    import sys sys.stdout.write("msg")   # 控制台白色字体打印 普通输出流 sys.stderr.write("msg") # ...

  6. Jump跳板机的搭建和部署

    Jump跳板机简绍   概括 Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent. Jumpserver ...

  7. 函数模板前template语句的位置

    先贴个例子看看: #include<iostream> using namespace std; template <> void print() { ; i < siz ...

  8. 用户控件 RadioButtonList

    public static MvcHtmlString RadioButtonList(this HtmlHelper htmlHelper, string name, string codeCate ...

  9. SQL注入学习(一)

    注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...

  10. https://www.cnblogs.com/yudanqu/p/9467803.html

    https://www.cnblogs.com/yudanqu/p/9467803.html