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


這是一篇關於OptaPlanner一開篇,當時只想分享一下嘗試到的求解器技術,想不到越寫越多,現在所有寫過的關於這個求解器及APS應用相關的文章都集成在知乎此專欄中,以便大家無需四處查找。

 

 當碼農有10多年了,由建築行業軟件,各種MIS,通用物流定制平台,CCTV客戶端(是閉路電視,不是央視喔)啥都做過。最后小試一下創業,不過那都是鬧着玩的,不到一年就回到碼農的隊列,重拾搬磚的行當。近些年一直在制造業,做過ERP,當過小組負責人。有人問為什么不轉純管理?是能力不足,氣質不佳還是人品低下?我覺得都有些且不全吧。反正無論是當管理還是做技術,我還是覺得手里拿點實在的東西心里才踏實。並不是說管理不是一個好技能,而是本人遇機問題,機會不多,所以大多數時間都是在做搬磚,磚搬多了,當然想試一下,看能不能找個專門領域更學入一點的研究,總不能每天不是寫CURD就是寫業務邏輯。

  老碼農啥都搞,那也就是說沒啥精的了。跟同行們說我是在制造業里做IT的,可人家習慣性地府視俺:工廠里的IT?說是ERP,不就是進銷存嘛,能有啥技術含量?。嗯,覺得也是,不過要知道,當你深入到一個行業里去,無論是做什么,你都會覺得,你進的是天坑,你遇到的都是世界難題。畢竟那些說這個簡單那個沒技術的人,通常都只是在隔山觀火走馬觀花而已。在企業里我做過營業模塊,也做過生產模塊,其實當你深入其中,去細擼各種業務邏輯細節時,你就會感覺到:媽的,今年的諾貝爾軟件獎舍我其誰?其實世界上沒有好做的軟件,覺得好做,只是你的系統簡單而已,而不是哪個行業簡單。好了,既然ERP這么簡單,老農我也覺得這不是我的菜呀(其實是能力不足,沒辦法深入到ERP的業務里罷了).好在現在整個中國都在鬧智能制造, 我覺得也可以在制造業做點大家覺得有小許牛B的事了(原諒我做了點小夢)。先不說這一輪的人工智能熱潮會不會如2000年的互聯網熱一樣,火一下就沒了。但有些進步是大家都能看得到的,起碼谷哥他家的狗在圍棋上把人類給秒了。

  關於智能制造,在其中一個領域,就是讓計算機程序把一些以前還是需要有經驗,IQ還可以的人才能做的東西,幫忙給學着做了,而且還是學習、總結經驗,越做越好;而不僅僅是通過網絡控制機器手來代替人手。能被機器手代替的,更多的是重復勞動;另外就是機器手的高精度操作遠超人類。但是,例如做生產計划這類需要很高“智能”才能做的事情,在人工智能的背景下,也許也會慢慢有成果出現。說到生產計划,可能大家遇到最多的都是MPS(主生產計划),它是一個很高層次相對不太細化的計划,空間維度上只能做到到車間計划,時間維度上最多只能精確到天;更多的算是企業層面的計划,對於具體的行產制造作業而言不太具有實操性。要滿足智能制造中,實現對機台進行分鍾級(甚至秒級)的生產指令下達。光靠MPS是不可行的,事實上MPS下達到車間后,會有相應的調度部門來對MPS進分解,形成作業調度指令,把工單對應的更細化的生產指令分配給操作班/組。這些作業指令在很多情況下,還不是精確的完全可執行的信息,很多還只是“主體信息”,到了機台的操作班/組,還需要班/組長根據機台的實際情況進行一些額外的處理,才能形成真正的操作指令。所以,一些很復雜的細節邏輯,其實是下壓給了調度部門和機台班組。但要實現智能制造,要提高生產自動化程度,這一系列的復雜轉換,就不可能由人逐層地下發。因為:

  1. 在速度上來說,人對復雜問題的處理速度遠跟不上計算機,特別是涉及大量計算、判斷的信息處理時;
  2. 能做出一套好的MPS就已經是不錯的生產計划員了,已經需要對業務非常熟悉,對各種情況的預判准確率要達到一定的程度;這是需要豐富的經驗和試錯經歷的。
  3. 當完成了MPS要分解成調試指令甚至是操作指令時,這個過程就不可能只靠人類來實現,因為里面涉及的計算和邏輯判斷太多,太復雜,遠超過人類可以處理的范圍。
  4. 就算花大量的人力物辦做出一套可行的調試指令,但要在可行的基礎上實現相對最優,那就不是人可以做到的了,這就涉及一個數學上的NPC問題,我在下一篇文章里會說明。

  因此,要實現上面說的那些復雜、不可能靠人力實現的工作,就需要依賴計算機的強大運算能力。但計算機也只是按人的指令要求進行計算和判斷而已,所以歸根到底還是需要人的智慧。而在這個場景下,實際上是需要依賴人類對數學的運用來實現這么一些復雜的系統。Google那只會下圍棋的狗(現在此狗已經站在這個星球的圍棋頂端開卷孤獨求敗了),其實就是人類給它實現了一大堆的數學邏輯,令它具體有學習圍棋能力。可我們並沒有這個水平,我們怎么辦呢?怎么樣能完成上面看起來很牛的工作呢?其實現在業界已經在研究,並且有些比較成功的應用,那就是APS。APS的核心就是在有限的資源條件下,實現相對最優的資源配置。為什么我老是講相對最優,而不說最優呢?這里涉及一個數學領域NPC, NP-Hard問題的概念,還得接下來文章中細說。

APS這個核心是怎么實現的呢?那就需要一個很利害的引擎。也許會有同學問,業務規則我都知道呀,條件限制我都得到了,那我自己按業務規則寫出來,然后就用這個來跑,把結果跑出來,形成一系列的調試指令不就行了吧?扯什么引擎,什么相對最優呢?沒錯,如果是這樣的話,估計這部分同學也是覺得別人的系統很簡單,沒啥技術含量了。事實上業務規則分兩種,很多個層次。層次先不說,我們先說種類。一種是硬規則(相對應的制約,后面的篇章里會叫做硬約束,另一種是軟件規則(相對應的制約,后面的篇章里會叫做軟約束)。硬規則就是一些必定不能違反的規則,例如一個產品所使用的原料必然是指定范圍內的,需要使用指定的機台進行生產,否則就不可能生產出來,或出來的必然是報廢品。而有一些是軟規則,就是一些規則老板們希望都不要違反,違反了會讓他掉錢的,但客觀事實出現了一些情況,沒辦法完全保證所有規則都 遵循,部分規則也只能放棄部分規則了,也就是相害相遇取其輕。例如:同樣的產品,可以用兩種機台生產,有一個機台的成本非常高,是用來生產專用產品的,普通產品在正常情況下是不會用那個機台生產的,如果普通產品放上去,必然虧本。但如果現在正是旺季,而一個很重要的客戶的訂單,需要一種生產普通產品,如果不用這個高成本機台生產,那鐵定是無法按期交貨,會影響后以后的合作。這時候老板也只能虧一次,起用這個天價機台了。但是生產得越多虧得越多,老板就要求調度員們絞盡腦汁,力求盡量少用這個高成本機台。

當每天都有天量的生產要求要處理時,你以為計划員、調度員們是神呀?所以他們會根據經驗編制一個認為差不多可以了的生產方案就往上報,老板也如願以償地保住了客戶虧了不少錢。可是過兩天老板會發現,其實有更好的方案可以更少地使用高成本機台,甚至還有一個無需使用主成本機台的方案,他會去把計划員、調度員們捉來殺掉拜旗嗎?(只有碼農才有這個待遇嗎?),計划員是不可能被問責的,因為:1、在短時間內,人類能找到這個方案嗎?不一定,其實是很難,非常難。2. 計划員、調度員們找到的方案有人去挑戰嗎?不一定(基本上沒人有這個能力),因為你也不知道他們出的方案是不是最優?甚至他們自己也不知道。除非他們把所有可能的情況都列舉一次。在現實情況下,不要說他就這一個方案做到退休能不能窮舉,就算全公司的人一起來列舉計算,算到地球毀滅那一天,也不一定能找到。這個時候排程引擎就派上用場了。而其中的核心就是一些數學算法,具體地說是一些用於尋找最優方案的啟發式算法。就如上面所說,這么多的情況,計算機也只是一個一個去試,一個一個去計算呀,那如果可能的情況足夠多,你把全世界都用來挖礦(比特B)的電腦都拿來跑也不一定能跑完。引擎的作用就是當可能情況無限大的時候,並不會無序地一個一個試,而是集成一些算法,有策略地找,雖然也不一定能找到,但在相同的時間內找到相對最優方案的機會,相對人來說,還是超N個數量級的。其中就集成了一些例如Tabu search算法,遺傳算法,退火算法和爬山算法等,這些被稱為啟發式算法。我們的主角OptaPlanner就是這么一個集成了這么多數據工具的一套開源軟件。一下篇我們就開始對OptaPlanner進行學習。

 

另外,若對此文(或本系列任何內容)感興趣,歡迎轉載,但請尊重艱辛勞動,注明出處。為謝!


本系列文章在公眾號不定時連載,請關注公眾號(讓APS成為可能)及時接收,二維碼:


如需了解更多關於Optaplanner的應用,請發電郵致:kentbill@gmail.com
或到討論組發表你的意見:https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較復雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM