天天看點

淺嘗一個排程引擎Optaplanner - 前序

  當碼農有10多年了,由建築行業軟體,各種MIS,通用物流定制平台,CCTV用戶端(是閉路電視,不是央視喔)啥都做過。最後小試一下創業,不過那都是鬧着玩的,不到一年就回到碼農的隊列,重拾搬磚的行當。近些年一直在制造業,做過ERP,當過小組負責人。有人問為什麼不轉純管理?是能力不足,氣質不佳還是人品低下?我覺得都有些且不全吧。反正無論是當管理還是做技術,我還是覺得手裡拿點實在的東西心裡才踏實。并不是說管理不是一個好技能,而是本人遇機問題,機會不多,是以大多數時間都是在做搬磚,磚搬多了,當然想試一下,看能不能搞個自動化機械出來,總不能搬到退休那天吧,碼農到底多少歲退休呀?看來如果再不練就點拿得出手來的東西,到時候我就隻能退,無法休了。那些奮鬥于500強,30歲而立之年已賺足退休資本的農場主們不在此列。

  好了,唠叨了半于,回來說說粘點邊的。上面說了,老農啥都搞,那也就是說沒啥精的了。跟同行們說我是在制造業裡做IT的,可人家習慣性地府視俺:工廠裡的IT?說是ERP,不就是進銷存嘛,能有啥技術含量?。嗯,覺得也是,不過要知道,當你深入到一個行業裡去,無論是做什麼,你都會覺得,你進的是天坑,你遇到的都是世界難題。畢竟那些說這個簡單那個沒技術的人,通常都隻是在隔山觀火走馬觀花(這兩成語是這麼用嗎?體育老師還要兼顧數學,是以本農的國文水準有限呀。)在企業裡我做過營業子產品,也做過生産子產品,其實當你深入其中,去跟各種業務邏輯細節搏鬥時,你就會感覺到:媽的,今年的諾貝爾軟體獎舍我其誰?其實世界上沒有好做的軟體,覺得好做,隻是你的系統簡單而已,而不是哪個行業簡單。好了,既然ERP這麼簡單,老農我也覺得這不是我的菜呀(其實是能力不足,沒辦法深入到ERP的業務裡罷了).好在現在整個中國都在鬧智能制造,我覺得也可以在制造業做點大家覺得有小許牛B的事了(原諒我做了點小夢)。先不說這一輪的人工智能熱潮會不會如2000年的網際網路熱一樣,火一下就沒了。但有些進步是大家都能看得到的,起碼谷哥他家的狗在圍棋上把人類給秒了。

  關于智能制造,在其中一個環節,就是讓計算機把一些以前還是需要有經驗,IQ還可以的人才能做的東西,幫忙給做了;而不僅僅是通過網絡控制機器手來代替人手。能被機器手代替的,更多的是重複勞動,另外就是機器手的高精度操作遠超人類。但是,例如做生産計劃這類需要很高“智能”才能做的事情,在人工智能的背景下,應該也會慢慢有成果出現了。說到生産計劃,可能大家遇到最多的都是MPS(主生産計劃),它隻是一個很高層次的計劃,隻能計劃到工廠中的房間(頂多是産線),時間上最多隻能精确到天;更多的算是企業層面的計劃,不太具有實操性。要滿足智能制造中,實作對機台進行分鐘級(甚至秒級)的生産指令下達。光靠MPS肯定不可行的,事實上MPS下達到工廠中的房間後,會有相應的排程部門來對MPS進分解,形成調試指令。把工單再配置設定給操作班/組,而這個生産指令在很多情況下,還不是精确的完全可執行的資訊,很多還隻是“主體資訊”,到了機台的操作班/組,還需要班/組長根據機台的實際情況進行一些額外的處理,才能形成真正的操作指令。是以,一些很複雜的細節邏輯,其實是下壓給了排程部門和機台班組。但要實作智能制造,要提高生産自動化程度,這一系列的複雜轉換,就不可能由人逐層地下發。因為:1.在速度上來說,人對複雜問題的處理速度遠跟不上計算機,特别是涉及大量計算、判斷的資訊處理時;2. 能做出一套好的MPS就已經是不錯的生産計劃員了,已經需要對業務非常熟悉,對各種情況的預判準确率要達到一定的程度;這是需要豐富的經驗和試錯經曆的。3. 當完成了MPS要分解成調試指令甚至是操作指令時,這個過程就不可能隻靠人類來實作,因為裡面涉及的計算和邏輯判斷太多,太複雜,遠超過人類可以處理的範圍。4.就算花大量的人力物辦做出一套可行的調試指令,但要在可行的基礎上實作相對最優,那就不是人可以做到的了,這就涉及一個數學上的NPC問題,我在下一篇文章裡會說明。

  是以,要實作上面說的那些複雜、不可能靠人力實作的工作,就需要依賴計算機了。但計算機也隻是按人的指令要求進行計算和判斷而已呀,是以歸根到底還是需要人的智慧。而在這個場景下,實際上是需要依賴人類對數學的運用來實作這麼一些複雜的系統。Google那隻會下圍棋的狗(現在人家已經站在這個星球的圍棋頂端開卷孤獨求敗了),其實不就是人類給它實作了一大堆的數學邏輯嘛。可我并沒有這個水準,我們怎麼辦呢?怎麼樣能完成上面看起來很牛的工作呢?其實作在業界已經在研究并且有些比較成功的應用了,那就是APS,APS的核心就是在有限的資源條件下,實作相對最優的資源配置。為什麼我老是講相對最優,而不說最優呢?還是得下篇來說。APS這個核心是怎麼實作的呢?那就需要一個很牛的引擎。也許會有同學問,業務規則我都知道呀,條件限制我都得到了,那我自己按業務規則寫出來,然後就用這個來跑,把結果跑出來,形成一系列的調試指令不就行了吧?扯什麼引擎,什麼相對最優呢?沒錯,如果是這樣的話,估計這部分同學也是覺得别人的系統很簡單,沒啥技術含量了。事實上業務規則分兩種,很多個層次。層次先不說,我們先說種類。一種是硬規則(相對應的制約,後面的篇章裡會叫做硬限制),和種是軟體規則(相對應的制約,後面的篇章裡會叫做軟限制)。硬規則就是一些不能違反的規則,例如一個産品所使用的原料必然是指定範圍内的,需要使用指定的機台進行生産,否則就不可能生産出來,或出來的必然是報廢品。而有一些是軟規則,就是一些規則老闆們希望都不要違反,違反了會讓他掉錢的,但客觀事實出現了一些情況,沒辦法完全保證所有規則都 遵循,部分規則也隻能放棄堅守了,也就是相害相遇取其輕。例如:同樣的産品,可以用兩種機台生産,有一個機台的成本非常高,是用來生産專用産品的,普通産品在正常情況下是不會用那個機台生産的,如果普通産品放上去,必然虧本。但如果現在正是旺季,而一個很重要的客戶給訂單過來,要一個生産普通産品,如果不用這個天價機台生産,那鐵定是無法按期交貨了,會影響後以後的合作,這時候老闆也隻能虧一次,起用這個天價機台了。但是生産得越多虧得越多,老闆就要求排程員們絞盡腦汁,力求盡量少用這個天價機台。每天都有天量的生産要求要處理,你當計劃員、排程員們是神呀?是以篇到一個認為差不多可以了的生産方案就往上報呗,老闆也如願以償地保住了客戶虧了不少錢。可是過兩天老闆會發現,其實有更好的方案可以更少地使用天價機台,甚至還有一個無需使用天價機台的方案,他會去把計劃員、排程員們捉來殺掉拜旗嗎?(隻有碼農才有這個待遇嗎?).問題是:1、在短時間内,人類能找到這個方案嗎?不一定,其實是很難,非常難。2. 計劃員、排程員們找到的方案有人去挑戰嗎?不一定(基本上沒人有這個能力),因為你也不知道他們出的方案是不是最優?甚至他們自己也不知道。除非他們把所有可能的情況都列舉一次,在現實情況下,不要說他就這一個方案做到退休能不能窮舉,就算全公司的人一起來列舉計算,算到地球毀滅那一天,也不一定能找到。這個時候排程引擎就派上用場了。而其中的核心就是一些數學算法。就如上面所說的,這麼多的情況,計算機也隻是一個一個去試,一個一個去計算呀,那如果可能的情況足夠多,你把全世界都用來挖礦(比特B)的電腦都拿來跑也不一定能跑完呀。這就對了,引擎的作用就是當可能情況無限大的時候,并不會無序地一個一個試,而是內建一些算法,有政策地找,雖然也不一定能找到,但在相同的時間内找到相對最優方案的機會,相對人來說,還是超N個數量級的。其中就內建了一些例如Tabu search算法,遺傳算法,退火算法和爬山算法等。我們的主角Optaplanner就是這麼一個內建了這麼多資料工具的一套開源軟體。一下篇我們就開始對Optaplanner進行學習。驚不驚喜?意不意外?:) 

  首次發文,文筆不通,有磚盡管砸,老農受得了!

一個IT老農,先盡力好當兒子、丈夫和父親的責任,然後做點有趣的事。

繼續閱讀