天天看點

OptaPlanner 這十年

十年前的一個假期,我開始開發一個小項目,沒有太多意義,隻是按照自己的興趣愛好來,也沒有打算做得很大很專業。在漫長開發中,我慢慢試圖建構一些很酷的工具。今天,java 規劃引擎:optaplanner,應用在很多項目當中,與同領域軟體相比處于領先地位。optaplanner 優化了商業資源排程和規劃。

十年,讓我們來看看,我的項目是如何成功的?期間,我做對了什麼,我做錯了什麼?

需要說明的一點

2003畢業後,我曾當了2年的java顧問,負責multi-agent系統(mas)的研究。我的同僚,都是一些想改變世界的人,後來證明,他們沒能做到。當時,我的一個同僚正在優化護士排班問題(nurse rostering problem),對我們的研究小組提出了他的方法。他的解決方案是采用tabu算法(一個優化算法在80年代發明的)。他的工作進展得很順利。然而,他花了很多時間和精力去手工實作增量計算每個限制适應度函數。寫代碼很困難,耗時長且容易出錯,但都會取得好成績。

一年前,我曾在javapolis大會聽過mark proctor的演講(現在叫devoxxbe),解釋 drools規則引擎和rete算法。一個易于通路企業政策、易于調整以及易于管理的開源業務規則引擎,符合業内标準,速度快、效率高。

我提議在規則引擎中使用tabu搜尋算法,他們嘲笑我,那時候我沒有一點算法優化經驗。

不能空空其談,是以,2006年暑假期間,我實作了一個簡單課程排程問題的概念認證。我叫它taseree,這是一個簡化tabu搜尋規則引擎的規範。同年晚些時候,我添加了兩個例子(n queens and ttp) ,并且開源到sourceforge。

沒有人用過taseree,更不用說用它在生産環境中。事實證明,如果你不開源它,沒有人使用它。

研究比賽

按理說,事情到這就應該結束了,就像我的許多其他項目一樣。但是我聽說過一些學術研究競賽:給出一個優化問題,5分鐘内找到最好的解決方案。是以在2007我參加了這個競賽,在200參賽者中,我第四個完成了。

是以我确定我是在做正确的事。但是我也做錯了很多事情。我們開源了各自代碼,我們開始讨論和比較我們的實作,我們彼此學到了很多。其實有很多方法可以實作tabu搜尋。是以我開始采用替代算法實作。促使我(和lukaš)寫的基準工具包,比較這些算法統計,評估那個算法性能更好、更适合長足發展。了解這些算法需要一個小時,但10 000小時掌握它們,是以我花了很多時間。

動機是關鍵。找到一種方法來激勵自己建構下一個特性,特别是在沒有工資的情況下。愛好驅動我繼續前進。

另一個優勢是,每場比賽都會誕生一個新的例子。我最終做了很多架構改變對我來說更容易實作這些用例。這是一個重要的、舊的項目管理原則:那些創造了痛苦,應該感到疼痛。

沒有人是一座孤島

大約在同一時間我聯系到drools的團隊,通過加入他們的irc頻道。我開始發表我的看法,同時,一邊學習。2007年9月,馬克邀請我讓taseree成為drools的一個子項目,我們稱之為drools solver。是以我清理代碼,删除了spring核心依賴和寫第一章的參考手冊。它被作為drools 5.0的一部分釋放。

到2007年12月,在javapolis大會上,我給20開發人員第一次講解了drools solver。

在2008年,我聽說第一個使用drools solver的産品。

毅力

也正是2008年,我開始有了較多的業餘時間,我可以在每周花幾個小時在drools solver上。然而,我和我妻子也買了一所舊房子,我必須得花時間在房子翻修的事情上,是以,項目開始停滞,幾乎一個月隻能更新一次。

在這期間,我萌生了好幾次放棄該項目的想法。不知何故,我覺得我不能。是以我堅持了下來。最後,一切穩步推進。

具有諷刺意味的是,項目開始變得受歡迎,下載下傳量逐漸變多,論壇也變得活躍,我收獲越來越多的建議。也正是這樣,越來越多的bug也随之而來。是以,我投入大量的時間進行單元測試、內建測試。到了2009年底,項目改名為drools planner。

幸運的是,red hat - drools項目發起人已經注意到我對項目源源不斷的貢獻。他們很早邀請我為drools工作,但在2013年才配置設定我全權負責。red hat開始支付工資給項目的貢獻者,并且支援該項目進行業務銷售、咨詢。

産品化:走向企業

到了2012年底,drools planner已經不在是一個小項目,變得很龐大。它包括具有較高覆寫率的單元測試、內建和壓力測試,完整的參考手冊,完備的典例,javadocs和不斷壯大的社群。當一家世界500強的企業考慮将它應用在重要的生産環境中時,我們發現它的服務是跟不上的。技術上的卓越還是遠遠不夠的。

是以,red hat建立了一個專門的qa團隊,支援團隊,顧問團隊,保障團隊和産品化建設/文檔團隊。這使客戶能夠在大規模生産的情況下,自信地部署我們的開源軟體。2013,我們開始這個過程,稱為産品化。

通過各個服務團隊的加入,産品化日趨成熟。項目成為一個頂級項目,是以我們又重命名了一次,也是最後一次,叫optaplanner。同時,也創立了optaplanner.org 。

2014年3月,在紅帽的支援下,我們釋出了第一個技術預覽版本,作為brms訂閱的一部分。2015年3月,我們全面更新企業支援,銷售量增長。今年早些時候,我們雇傭一些核心工程師開發optaplanner工作台。與此同時,我們所有的代碼仍然是開源的,在apache許可下,成千上萬的項目正使用它。一個雙赢的局面。

我們堅信,未來是光明的。