1、 一个行之有效的计划系统有N个约束,1-2组假设(预测)输入,和1个输出;
2、 企业的计划系统往往是分层的,分层依据是所计划事件的周期和计划行为本身的Lead Time(此处翻译成“提前期”似乎并不准确),分层的好坏对计划系统影响很大;
3、 计划的时效性是其根本属性之一。然而收集信息、分析制订计划和输出都需要时间,缩短其时间往往是改善计划分层把上层计划的工作交给下层计划的最佳手段之一。(PS:实施ERP、MES、APS时往这个方向想,就不容易犯错误)
一个容易犯的错误是把多个约束当成假设,使预测的复杂度急剧提高,最后为了求解又把这些假设改为开关量,这时计划复杂度往往被顶到当事人能力的极限,有时甚至超出其能力,造成漏算;另外工作时间往往也较长,最重要的是计划工作时间变长以后,在计划的执行过程中,大量本来可以放在下层计划完成的工作被迫递交给上层计划,从而破坏了整个系统。
另一个容易犯的错误是同一个变量在某一个阶段是假设,而另一个阶段应该被当作约束,而在实际使用时发生了混淆。比如最近时段的销售预期(数天或一周),这个数据如果是直接来自客户,往往已经进入了订单实现过程的不可更改阶段,是很可靠的数据了,就像牛嘴里正在吃的草,你不是不能拽出来,但是何苦呢?又比如FTT,在某个阶段不过是损耗,但一旦突破质量控制的能力,或者对OEE的影响改变了瓶颈,或者对毛利率影响过大导致销售策略调整,就会发生质变。
一个典型S&OP用的销售预测过程如下:
首先寻找两组数据(计划员):
发货历史数据(也可以用首次承诺的历史数据,然而认真管理这个数据的公司不多,如果失真度高,清洗难度大,还不如发货历史数据好用)
产品生命周期
然后是一些动态数据(从市场和销售那里得到):
客户
竞品(以及替代品)
促销
突发事件
这四种数据只是例子,具体问题,现在有各种销售理论的模型可以参考。特别的,出了4P和4C模型之外,SWOT分析对预测也有价值。
经过清理后对发货历史数据进行处理,具体方法可以直接查教科书,此处仅罗列部分名称(未包括德尔菲法等非数学方法,也未写一些不常用的数学方法):
移动平均法
指数平滑法
二次指数平滑法
三次平滑法(个人认为更高的次数意义很小了,二元和自适应的变种比较有趣)
回归模型(除了短期预测之外,还可以在中期预测中使用)
二次和三次平滑法的AI方式(对中长期没有上述OR方式精确、但预测容错率更高、速度往往更快;而短期似乎更精确?)
另外,自动边界寻找虽然很重要,但大多数情况下可以被经验替代,本文还是不讨论这个话题了。
本人原创的算法(2012)可以称为自适应局部投影迭代法(一直没想到好名字,而后来独立发现的其他人也没起名字,就这样命名了吧),为避免误伤,这里不展开了。
最后是主动预测,这个也不好展开。
产品生命周期
产品生命周期本身是输入的一部分,可以和二次指数平滑法混用。但还有一个重要特性选择哪种算法或者混合哪几种算法的开关,或者特定时候的权重系数,这个对AI方式特别重要。
为了弥补上一篇过于枯燥难以理解的缺陷,下面给出一个小例子。
产品生命周期存在两个方面的影响:在产品上升期,有时存在需求急剧增加的可能,在产品下降期,则存在需求迅速消失的可能;这个工作往往在库存管理时可以识别,但那时失销或者呆滞已经发生,所以我宁可把这个功能放在需求预测,哪怕准确度不高,但除了终端产品生产者之外,大部分的Benchmark是足够低的,有很多替代方法。一种方法是给一个系数来增加或者降低需求预测;另一个方法是对平缓期选择一次预测方法;非平缓期选择二次方法(这也隐含着另一个问题:即数据清理时是否需要对上升期的数据予以处理?一般来说这个处理是有必要的)。考虑到时间的延续性,对重大的预测,甚至有必要设置一次方法和二次方法之间的过渡规则。
历史数据除了清洗工作,还有周期性数据(有的书把季节性问题和周期性问题分开,但季节难道不是一种周期吗?)可以预提取。但最复杂的是清洗,下一章专门讲历史数据的清洗,我的清洗方法与众不同,使用起来效果不一定能比传统方式好多少,但是速度快。
当上述预测作为输入完成之后,还有假设和开关量选择的人工清洗行为,这是另外的内容了。
与预测配套的关键行为是设定库存策略,这个放到后面来讲。
总结:
本文仍然强调:预测时间较短并可控,而不是一昧追求预测结果最优。当客户的数据每月输入一次的时候,使用客户的数据来做需求预测是无法得到周滚动预测的,进一步的,如果客户数据要每个月月底得到,再加上处理的时间,甚至有时再盘点或者会计周期冲突,产销协调会不得不在第一周计划未完成时仓促召开,或者拖到10日左右,问题是突破了时间栅栏的计划,还能称得上是计划吗?
此处不讲该方法的技术细节,只谈一个失败的例子。在一个19*19的棋盘上运行的围棋游戏,其复杂度号称超过了我们存在的宇宙(好像只是宇的颗粒数,如果按普朗克常数计算宙的部分,宇宙还是略大一些)。
为了降低复杂度,把该棋盘人为地分为几个区域。比如包含四个角的四个区域,其边长应该是(3*19/4-2*19/3)之间(此处省略原因),考虑到奇数解较为符合该游戏的习惯,每个区域选择了13*13,再考虑到角部变化多,13*13的四个局部投影一般也够了。这时四个小棋盘分别求解得出权重并予以投票,然后再进行迭代以获得可选的答案。然而有个术语叫“征子”,这是一个远端行为,如下图所示,四个小棋盘都考虑不到图示的“征子”问题,出现了求解盲区。这是局部投影迭代法的缺陷之一。
19*19的棋盘,对可能出现的征子,白有利
分解后的四个棋盘
上述围棋的个案可能已经被解决,但AI和OR在思路上的根本区别将使它成为一个AI刻意保留的缺陷和OR无法解决的问题而长期存在下去的通用问题。