OptaPlanner介绍
1. 什么是OptaPlanner?
每个组织都面临着规划问题:在有限的资源(员工、资产、时间和金钱)的情况下提供产品或服务。OptaPlanner通过优化规划来用更少的资源做更多的业务。这被称为约束满足编程(是运筹学学科的一部分)。
OptaPlanner是一个轻量级的嵌入式约束满足引擎,用于优化规划问题。它解决以下用例:
-
员工排班:为护士、维修人员等制定时间表
-
日程安排:安排会议、约会、维护工作、广告等
-
教育时间表:安排课程、考试、会议演讲等
-
车辆路径规划:使用已知的地图工具规划车辆(卡车、火车、船只、飞机等)在多个目的地之间运输货物和/或乘客
-
装箱问题:将物品装入容器、卡车、船只和仓库,还可以将信息装载到计算机资源中,如云计算等
-
作业车间调度:规划汽车组装线、机器队列规划、工作任务规划等
-
裁剪材料:在裁剪纸张、钢铁、地毯等材料时尽量减少浪费
-
体育赛程安排:为足球联赛、棒球联赛等规划比赛和训练时间表
-
金融优化:投资组合优化、风险分散等
2. 什么是规划问题?
规划问题基于有限资源和特定约束条件具有最佳目标。最佳目标可以是任何事情,例如:
-
最大化利润-最佳目标产生最高可能的利润。
-
最小化生态足迹-最佳目标对环境影响最小。
-
最大化员工或客户的满意度-最佳目标优先考虑员工或客户的需求。
实现这些目标取决于可用资源的数量,例如:
-
人数。
-
时间量。
-
预算。
-
具体资源(例如机械设备、车辆、计算机、建筑物等)。
还必须考虑与这些资源相关的特定约束条件,例如一个人工作的小时数、他们使用某些机器的能力,或者设备之间的兼容性。
OptaPlanner帮助JavaTM程序员有效地解决约束满足问题。在底层,它将优化启发式算法和元启发式算法与非常高效的评分计算相结合。
2.1. 规划问题是NP完全或NP难的
上述所有用例可能都是NP完全/NP难的,这意味着以通俗的语言来说:
在合理的时间内验证给定问题的解决方案是很容易的。
找到一个问题的最佳解决方案在合理的时间内没有银弹(*)。
(*)至少,世界上最聪明的计算机科学家还没有找到这样的银弹。但是,如果他们为一个NP完全问题找到了这样的银弹,那么它将适用于每个NP完全问题。
事实上,对于任何能够证明这样的银弹是否存在的人,都会有100万美元的奖励。
这带来的影响非常严重:解决您的问题可能比您预期的要困难,因为两种常见的技术都不足以解决:
-
蛮力算法(甚至更聪明的变体)需要太长时间。
-
例如,在装箱问题中,采用先放置最大的物品的快速算法将返回远离最优的解决方案。
通过使用先进的优化算法,OptaPlanner可以在合理的时间内找到接近最优的解决方案。
2.2. 规划问题具有(硬约束和软约束)
通常,规划问题至少具有两个级别的约束条件:
-
不能违反(负面)硬约束。例如:一个老师不能同时教授两个不同的课程。
-
如果可能的话,不应违反(负面)软约束。例如:A老师不喜欢在星期五下午上课。
有些问题也有正面约束:
- 如果可能的话,应满足(积极的)软约束。例如:B老师喜欢在星期一早上上课。
一些基本问题(如N皇后问题)只有硬约束。一些问题具有三个或更多级别的约束条件,例如硬约束、中等约束和软约束。
这些约束条件定义了规划问题的评分计算(也称为适应度函数)。规划问题的每个解决方案都可以根据得分进行评估。使用OptaPlanner,评分约束以面向对象语言编写,例如JavaTM代码。这种代码易于编写、灵活且可扩展。
2.3. 规划问题具有巨大的搜索空间
规划问题有许多解决方案。有几个解决方案类别:
-
可能的解决方案是任何解决方案,无论是否违反任何数量的约束。规划问题往往有非常多的可能解决方案。其中许多解决方案是毫无价值的。
-
可行解决方案是不违反任何(负面)硬约束的解决方案。可行解决方案的数量与可能解决方案的数量相关。有时没有可行解决方案。每个可行解决方案都是一个可能解决方案。
-
最优解决方案是得分最高的解决方案。规划问题往往有1个或几个最优解决方案。至少存在一个最优解决方案,即使没有可行解决方案,最优解决方案也不可行。
-
找到的最佳解决方案是在给定时间内由实现找到的得分最高的解决方案。找到的最佳解决方案很可能是可行的,并且如果给予足够的时间,它将成为最优解决方案。
令人费解的是,即使是对于小数据集,可能的解决方案数量也是巨大的(如果计算正确&#