天天看点

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许可下,成千上万的项目正使用它。一个双赢的局面。

我们坚信,未来是光明的。