0. 前言
本人本身是一個碼農,已經服務了共和國各項事業(好像是說得有點漂,沒辦法段子看多了)大約一半工作時候了(按60歲退休的話),從一線的小碼農,到現在成了老農,出産了不少或優或劣的各種碼,幾乎啥都做過。近幾年慢慢沉澱到制造業資訊化方面,主要是APS在生産計劃方面的應用,APS - Advance Planning and Scheduling. 進階計劃與排程;其實也就是做計劃,隻不過使用了一些優化算法,另計劃的品質更高一些。從最開始被調去做ERP資料适配APS項目實施,到現在自己在為公司開發排産引擎(當然規劃引擎用的是開源的,我可不是數學方面的專家)。從中也接觸過不少排程産品,掉過不少坑,身上算是留下了點APS的戰鬥痕迹吧。下面先講一下我在這方面的一些看法。等我有時間了,我再把這一年來,為解決APS系統的引擎問題使用optaplanner規劃引擎的一些小積累分享一下,但這個時間嘛,還真的不容易擠呀,這一年來基本上每天晚上9點30前沒離開過辦公室,11點後跟晚班勞工一起下班是常事(沒錯,我在一個制造企業上班,對APS有一個天然的實戰環境,這是公司給我的最大條件優勢)。
1. 排産的現狀
關于制造業排産的系統,目前人們關注得更多的是MPS(主生産計劃系統)的排期,即是公司甚至整個集團層面,根據産品的産工藝參數,結合訂單的數量與交期要求,生成以生産訂單為基本機關的生産計劃,通常稱作主生産計劃(Master Planning).所謂的排期,或稱排計劃,更多的是對這些生産工單進行編排。例如根據這些工單的工藝要求配置設定到不同的生産機關(分廠、工廠中的房間或承包商),并根據各個工序的生産時間需求,定出一個要求的完成日期,而這個日期其實是有水份的(下面會有解釋)。但這些工單去到具體的生産機關後(特别是公司自己的工廠中的房間作為生産機關時),其具體的生産計劃就較少涉及了。原因有二.
a. 複雜度與可變性太高。到了工廠中的房間這一層,再下一層就是産線甚至機台了,即工廠中的房間的生産控制部門獲得上級下發來的生産要求之後,會結合在制品、資源與工單的具體要求,向上級單作出一個回報,即回複是否可按計劃的要求完,雙方讨價還價确定了一個新的計劃版本之後,工廠中的房間生産控制部門就會制定一個适合本工廠中的房間的生産計劃,再把該計劃下發給生産排程部門進行生産。生産排程部門再會根據具體情況,按生産計劃進行生産。無論是工廠中的房間生産計劃部門,還是排程部門,他們面臨的都是一些涉及一些非常複雜的細節規則,例如生産工單的工藝要求,投放到工廠中的房間哪個産線,例如哪種甚至哪台機器進行生産,生産過程中需要注意的具體細節等。都需要生産計劃部門有所考慮,當然到了排程部門有可能還會有一些更細節的實際情況及限制進行考慮,進而在生産過程中作出臨時調整。
無論是工廠中的房間的生産計劃部門還是生産排程部門,需要處理的邏輯細節都是很複雜繁多的。而作為人類面對種類繁多,複雜且多變的規則,各種業務制約與各種要求,是無法滴水不漏地顧及的。更多的是通過經驗積累給出一些大概的,基于估量的安排。是以,工廠中的房間各級部門給出的這個計劃其不确定性是非常高的,甚至有些情況下,在經驗老道的生産計劃人員及排程人員排出來的生産計劃,如果有足夠多的時候去推敲,即使是按目前的生産情況不變,到最後也是不可行,或者說計劃的品質要求(例如對成本、交期、産能使用率等要求)是非常低的。但往往在制定出來的初始階段基本上是沒人能推斷出來的,更不用說計劃推動了一段時間後,随着過程中的各種條件變更發生,越往後就越偏離原來的初充了。是以,要能最大程度上做出一個好的計劃,是非常困難的,更多的是以經驗生成一個初始計劃,在生産過程中根據實際出現的情況,及在初始階段未能考慮的問題慢慢明确,再持續地作出調整。是以給别人的印象就是,工廠中的房間的生産計劃毫無章法,品質太差,甚至有公司高層認為,工廠中的房間根本無計劃可言。但這是人思維的局限性,而對遠超過其處理能力問題時,必然會出來的情況。是以工廠中的房間層面的生産計劃會面臨一個嚴重的複雜度與可變性太高的問題。
b. 工廠中的房間生産計劃被視作操作細節,被人為未達到戰略層次,未得到足夠的重視與認識。因為作為公司級别的主生産計劃,它是直接作為公司供應鍊的一環而存在的,這個環節的目标達成率高低是需要下面各個更細層次生産計劃的支援的。但作為公司層面,往往要求的是,隻要公司的主生産計劃保持在一定的達成率,那麼就可以滿足供應鍊其它環境的要求了。但事實上這個達成率是需要有備援的,也就是主生産計劃給制定工廠中的房間生産計劃的時間,已經預計到一定的不可确定性存在,是以往往會留下一定的緩沖期。但這個緩沖期長短,是否合理,往往都是通過以往經驗得出。而同樣道理整個供應鍊對主生産計劃也會留有緩沖期,那麼可以想像,為了能滿足要求,往往這些緩沖期加起來就會很長,往往比實際執行制造生産的CT還要長。這樣就會造成極大的效率低下,及産能資源浪費。但就是因為越往明細的生産計劃,不可控、不确定性越大。是以,公司通常都隻能夠棄小保大。久而久之,大家的焦點都隻關注在MPS的層面上了。
綜上所述,目前我們所說的排産,或說生産計劃,更多的還隻是停留在主生産計劃這個層次較高,較虛泛的範疇。而真真正正到了生産控制層次的,往往關注的是MES(生産執行系統)了,而計劃因為工廠中的房間、産線層面的生産排程計劃存在太多的難點,及很多方面技術上尚未成熟,令各大企業資訊化産品對此較小涉及。大家也會留意到,無論多大、多出名的ERP系統,它關注的都是公司供應鍊層面的資源調配,而不會涉及具體生産環境,或者具體到庫存物流,或具體的訂單執行層面的内容。而目前這方面通常引入APS作為支撐慢慢有些成功可用的方案在市場上推廣了。
下面就來看看APS(Advance Planning and Scheduling - 進階計劃與排程)技術,在生産制造業的一些應用.
2. 什麼是APS.
上面說了,APS就是一種進階計劃與排程技術,那麼為什麼叫做進階呢?我的了解是,它是相對于以往的MPS的,它除了滿足一些生産制造過程中關于工藝、交期等等的硬性要求,還要在滿足這此硬性要求的基礎上,根據既定的一些設定、或稱政策進行不斷優化,進而得出最接近政策目标的計劃方案。這樣說可能比較虛,下面舉個例子說明一下。一個主生産計劃下發到工廠中的房間,目前正處于工廠的和産旺季,那麼生産政策通常會被整理為"保證交期"(可能談季的時候,因為資源相對充足,交期的保證不再是難事,政策往往會是"降低成本"。),那麼工廠中的房間生産計劃部門收到計劃,細分為各工廠中的房間、産線甚至機台的計生計劃時,就會把生産計劃的政策大體上區分為兩種,一種是保證硬性的要求不違反,例如産品品質要求、生産安全要求等。在此基礎上,就會設法安排這些生産訂,令其可以更快完成生産,進而可以保證産品所在訂單的交期,又可以為後面更多的生産單盡早騰出資源,目标就是提高效率。對于前面的品質、安全的要求,是一些硬性的定性要求;而對于第二種效率的要求,是一種軟性的定量要求。對于定性的要求,那麼就會有好壞,或說能達到多好的程度評價。在人的角度上來講,經驗越豐富,他排出來的計劃效率越高,越符合這個軟性要求。這個就是APS的威力所在的,當然大家關注人工智能中的深度學習的資訊,可能會發現,這個有一點人工智能的味道,确實是的,但目前還沒有聽說過這方面的研究。APS技術目前使用的還不是人工智能,而是基于有限資源、固定條件限制下的最優方案分搜尋技術。它的原理就如上面的例子,會把人們對計劃的要求劃會為硬性限制與軟性限制。通過尋優算法(禁忌搜尋、遺傳算法、模拟退火等)在浩瀚的組合方案中,在有限的時間内,找出的方案,需要在滿足硬性要求的前提下,最大程度上滿足軟性要求的方案。尋找這些方案的一些原理、算法,就涉及一些數學上的概念,例如NC問題,NPC問題等,在此就不再熬述了。如果有機會我另寫一些相關的文章講解一下。
總而言之,APS就是通過一些數學算法,在計算機的強大運算能力支援下,找出一些可能比人類排産老師傅更佳的生産排程計劃。
3. APS的适用場景.
正如上面提到,現在制造業更多的關注于主生産計劃,而具體明細的工廠中的房間産線層面的生産計劃、排程計劃,還是處于放養式的存在。而主生産計劃由于有足夠的關注,往往有更多的投入對其進行研究,而且它面對的問題更宏觀;綜合來講,相對工廠中的房間層面的生産排程計劃就沒那麼多繁雜的制約因素了。是以,目前市上各種APS産品和技術,主要還是針對工廠中的房間、産線甚至機台的生産排程計劃,希望在這個層面的生産計劃有一些開創性的成果。但其實我們可以想象,APS可以處理工廠中的房間、産線層面的生産計劃,那麼面對制約因素少得多,或寬松得多的主生産計劃,是完全卓卓有餘的。是以,雖然各大商家都把自己的APS産品瞄準工廠中的房間、産線層面的生産計劃,其實如果在主生産計劃上面所需求,它也是可以對現有的主生産計劃作出些非常大的改善的。因為盡管主生産計劃比較宏觀,但還是由公司計劃部門的人來制定的,那麼就必然有一定的局限性。例如上面提到的計劃品質、緩沖期是否合理等等,APS在這方面可以作出很大的提升。當然,把APS應用于主生産計劃,其實還是需要下面層面的工廠中的房間、産線生産計劃的支援的,畢竟在主生産計劃中,對各種資源與時間的預判,都要由工廠中的房間、産線層面的生産計劃進行實作。而不是毫無根據地猜一個資源可用量,或完成時間的。
當然,目前在制造業裡面臨的最大問題還是工廠中的房間、産線面層的生産排程計劃,目前各個APS産品與技術,都是号稱可以解決這類問題,都是沖着工廠中的房間、産線這個層面去的。是以目前見得最多的APS适用場面,還是在工廠中的房間、産線甚至機台層面,針對已配置設定的工單,對各個工廠中的房間、産線甚至機台,在已有的可用資源條件下,基于具體的業務制約因素,将生産任務适當配置設定到合理的生産機關(工廠中的房間、産線甚至機台,工位),并根據計劃中各任務的關後關聯關系,确定每個生産任務的具體開始與結束時間。這個也是APS的核心價值所在。因為目前在工廠中的房間排程工作中,對于資源的把控也許會相對準确一些,畢竟有條件的工廠,在自身産能不足,但訂單要求有硬性規定的時候,可以通過引入外發加工來解決資源不足的問題。而生産時間的安排就沒那麼容易了。因為這是一個運算量非常大,考慮各種綜合因素,考慮工序的前後關系,還要考慮工廠實作的班次等因素,綜合起來的計算結果。人類是無法快速運算、畢竟種個方案的。這樣的話,APS系統就可以基于自己核心所使用的各種最優解搜尋算法,基于各種限制;再利用計算的高速運算,快速地計算出各個方案的優劣,進而在短時間内對海量組合方案進行計算對比,進而往往能找出比人類更優的生産排程計劃,甚至是對于生産任務的開始結束時間,甚至是精确到分鐘的。是以,針對人類這方面的不足,通過大運算量,去生成的生産排程計劃,是目前APS的主要應用場景。
4. APS産品及引擎的選用
目前世界上可用的APS産品其實還是不多的,畢竟這是一個數學上都還在不斷探索的問題,目前APS産品或技術,主要有偏重于MRP方面的,例如英國FastRact, 還有一些是結合規劃引擎與實際排程經驗的産例如日本的Asprova. 還有國内也有一些新秀産品,而這些接觸不多。另外還有一種不算是産品,而是基于一些規劃引擎,結合企業自身的業務場景,自身以項目形式開發的APS系統。目前我所在的企業正是處于這種APS發展狀态。我們是基于Optaplanner + Drools作為規劃與規則核心引擎,結合自身業務規則,将業務場景中的各類實體抽象,并将呼類繁多的業務規則抽象總結翻譯為硬限制與軟體限制。再通過程式使用Optaplanner中的适當模式進行生産計劃的自動生成。目前我接觸過Asprova與Fastract(這個隻是接觸過他們的顧問提供的資訊,不沒有進行過項目實施).覺得Asprova确定是相對比較成熟的産品,雖然它的技術已經非常老舊,但基核心價值是引擎可以根據實際的排産經驗作出運算優化。如果覺得自己公司的業務相對比較複雜、奇葩,且自己公司具有一定的技術開發實力,建議還是使用Optaplanner進行定制吧。但還是要注意,在作技術選型時,還要充分了解自己業務上的情況,例如排産規則,自己業務跟各個引擎常用的模式有多大差異。這樣才能選擇一個真正适用的産品或技術。
上述都是自己這些年在APS上遇到各種坑後的總結,不一定對,歡迎大家拍磚。
謝謝。
End.