在进行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难以接受,甚至而失去信心。