记得两年前,因为项目需要第一次接触Drools,优秀的文档,强大的机能记忆犹新。之后一直留意Drools的发展。
这两天项目间隙,突然兴起,研究了一下Drools planner(以下简称planner) ,发现这也是一个非常实用的用于规划的开发框架。以前怎么没注意这位小兄弟? 以前看的多写的少,今天也将心得分享一下。
(一)预备知识
1) TSP(旅行者问题)
这是一个运筹学经常提及的课题,内容是这样的:旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。
咋一看,这很简单嘛,只要n确定了,城市间的距离也知道了,遍历所有的组合就行了。但是当n很大时,该组合会出现指数型增长,计算量会变得非常大,对于有限的时间和空间来说,可以认为不可计算。
这种问题在数学上就叫做 NP-complete(NPC)问题。
注:关于P/NP/NPC/NPH等概念,网上有解释很多,感兴趣的朋友可查下维基,这里不占用篇幅。
2)关于启发式算法
要解决上述问题,常规的确定性算法(如:暴力求解)就行不通了,这时需要用 不确定性算法 才能解决。
显然,planner的设计者都是这方面的行家,planner中使用了大量算法,其中重要的一类是启发算法(heuristic algorithm)。
启发式算法的发展: (以下内容转自 csdn aris_zzy的博客)
启发式算法的计算量都比较大,所以启发式算法伴随着计算机技术的发展,取得了巨大的成就。
40年代:由于实际需要,提出了启发式算法(快速有效)。
50年代:逐步繁荣,其中 贪婪算法和局部搜索 等到人们的关注。
60年代: 反思,发现以前提出的启发式算法速度很快,但是解得质量不能保证,而且对大规模的问题仍然无能为力(收敛速度慢)。
70年代:计算复杂性理论的提出,NP问题。许多实际问题不可能在合理的时间范围内找到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内找解,等到的解没有全局最优性。
由此必须引入新的搜索机制和策略………..
Holland的遗传算法出现了(Genetic Algorithm)再次引发了人们研究启发式算法的兴趣。
80年代以后:
模拟退火算法(Simulated Annealing Algorithm),人工神经网络(Artificial Neural Network),禁忌搜索(Tabu Search)相继出现。
最近比较热或刚热过去的:
演化算法(Evolutionary Algorithm), 蚁群算法(Ant Algorithms), 拟人拟物算法,量子算法等。
好了就到这儿吧,言归正传。
(二)什么是 Drools planner?
planner是一个轻量级,可嵌入规划引擎,优化规划问题的框架。
它适用于解决以下问题:
员工轮班:排班护士,修理工,…
议程安排:安排会议,约会,维修工作,广告,…
教学时间表:排课,课程,考试,会议介绍,…
车辆路径:规划车辆(卡车,火车,船只,飞机,……)运费和(或)人
装箱问题:灌装容器,卡车,船只和储存仓库,以及云计算机节点,…
作业车间调度:策划汽车装配线规划,机器的队列,劳动力的任务规划,…
下料问题:同时最大限度地减少浪费:剪纸,钢,地毯,…
运动计划:计划的足球联赛,棒球联盟,…
金融投资组合优化:优化,风险分散,…
。。。
(只要涉及规划计划之类的通吃啊)
planner 结合了优化算法(包括如禁忌搜索算法和模拟退火)与规则引擎提供的分数计算的能力,让Java程序员高效地解决规划问题。
注意这里提到的分数计算用到了规则引擎Drools,除此之外,应当说它是一个比较独立的应用。
(三)planner 中的算法
下面列出了planner 中涉及的算法。算法是整个框架的灵魂。
分类 | 算法名 | planner 实现情况 |
Exact algorithms(精确算法) | ||
Brute force(强力算法) | 已实现 | |
Branch and bound(分枝界限法) | 未实现 | |
Construction heuristics(建设启发式算法) | ||
First Fit(首次适应算法) | 已实现 | |
First Fit Decreasing(首次适应递减算法) | 已实现 | |
Best Fit(最佳适应算法) | 已实现 | |
Best Fit Decreasing(最佳适应递减算法) | 已实现 | |
Cheapest Insertion(增量最小插入法) | 未实现 | |
Metaheuristics(现代启发式算法) | ||
Local search(局部搜索算法) | ||
Hill-climbing(爬山法) | 已实现 | |
Tabu search(禁忌搜索算法) | 已实现 | |
Evolutionary algorithms(进化算法) | ||
Simulated annealing(模拟退火法) | 未实现 | |
Evolutionary strategies(进化策略) | 未实现 | |
Genetic algorithms(遗传算法) | 未实现 |
注:(本文使用最新版:5.4.0Final) ○ 算法已实现 × 算法未实现
由上表可见,planner还处于成长期,一些复杂算法还有待实现。
下面给出一些已实现算法的介绍:
Brute force(强力算法):
暴力的人生无需解释。。。
First Fit(首次适应算法):
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
First Fit Decreasing(首次适应降序算法):
顾名思义,在First Fit 基础上加入了排序,以提高匹配效率
Best Fit(最佳适应算法):
从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
Best Fit Decreasing(最佳适应降序算法):
同样为Best Fit 的改良版
Hill-climbing(爬山法):
是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。
Tabu search(禁忌搜索算法):
局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。
它从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试 探,选择实现让特定的目标函数值变化最多的移动。为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进行记录和选 择,指导下一步的搜索方向,这就是Tabu表的建立。
如果不是数学专业的看到这里会有压力。好在这些算法planner已经实现了,剩下的问题是如何选择的问题。 当然如何选择也不简单。
好了今天收工了,下回接着写开发流程。
相关推荐
Drools Planner是JBoss Drools团队开发的一个基于规则引擎的计划问题求解器。这个求解器被设计用来处理各种复杂的规划问题,比如资源分配、任务调度、路线规划、排班等。Drools Planner被广泛应用于许多领域,例如...
drools 是一个强大的规则引擎和业务规则管理系统,用于在Java应用程序中实现复杂的业务逻辑。它基于规则推理,允许用户以声明式的方式定义规则,并在运行时执行这些规则。drools 提供了一个高效的决策自动化框架,...
Jbpm的Guvnor知识库操作文档 Drools Introduction Drools Fusion Drools Flow Drools Guvnor Drools Planner
### Drools Planner 知识点概述 #### 一、Drools Planner 简介 - **Drools Planner** 是一个开源优化框架,用于解决复杂的规划问题。 - 它基于 **Drools** 规则引擎,由 JBoss Drools 团队维护。 - **规划问题** ...
这个系统由多个组件组成,包括 Drools Expert、Drools Guvnor、jBPM 和 Drools Fusion,以及 Drools Planner。 1. **Drools Expert**:这是 Drools 的核心组件,它是一个规则引擎,负责执行规则。通过 Drools ...
5. **Drools Planner**:是一个优化问题求解框架,可用于解决如车辆调度、任务分配等组合优化问题。 6. **Drools Expert**:专为领域特定语言(DSL)设计,使得非技术人员也能编写规则。 7. **Maven Integration**...
Drools是一款强大的业务规则管理系统(BRMS),它基于Java平台,主要用于实现复杂业务规则的管理和执行。Drools7.25是该系统的一个重要版本,提供了许多新特性和性能改进,使得开发者能够更高效地处理和执行业务规则...
Drools是一款强大的Java规则引擎,它为业务规则管理提供了高效、灵活且可扩展的解决方案。作为基于模型的决策自动化工具,Drools允许开发者将复杂的业务逻辑编码为一系列易于理解和维护的规则,这些规则可以独立于...
**规则引擎Drools.NET移植版** Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行...
在本文中,我们将深入探讨如何部署Drools Workbench和Kie Server,这两个组件是Drools6.5——一个强大的规则引擎平台的关键部分。Drools Workbench提供了一个直观的用户界面,用于创建、测试和管理业务规则,而Kie ...
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...
《 Drools 深度探索:实例代码解析与实践指南》 Drools,作为一款强大的规则引擎,广泛应用于业务逻辑复杂、决策流程多变的IT系统中。它基于Java平台,采用领域特定语言(DSL)来编写业务规则,使得业务人员也能...
Drools工作台(Drools Workbench)是一款基于规则引擎Drools的集成开发环境,主要用于创建、测试和管理业务规则。它提供了一个图形化的用户界面,使得业务分析师和开发人员可以方便地进行规则的编写和管理。在这个...
在介绍部分,作者Mark Proctor强调了Drools 5.0的重大突破,将其分为五个独立的模块:Guvnor(BRMS/BPMS)、Expert(Rules)、Fusion(CEP)、Flow(Process/Workflow)和Planner。Guvnor作为一个基于Web的管理系统...
这个"5.6drools基础包"包含了Drools的核心组件——drools-distribution-5.6.0.Final.zip和Drools的开发工具集——droolsjbpm-tools-distribution-5.6.0.Final.zip。尽管由于文件大小限制,可能缺少了一些额外的包,...
在本文中,我们将深入探讨如何将Drools 7与Spring Boot 2集成,实现动态更新规则的功能。Drools是一款强大的业务规则管理系统,而Spring Boot是Java领域广泛使用的微服务开发框架。通过结合这两者,我们可以构建一个...
SpringBoot和Drools的整合应用为业务规则的管理和执行提供了强大的灵活性。SpringBoot作为一个轻量级的Java开发框架,简化了Spring应用的初始化和配置,使得开发过程更加高效。而Drools则是一个强大的规则引擎,它...
drools动态生成规则文件是基于Java的业务规则管理系统,它允许开发者在运行时创建、修改和执行业务规则。 Drools是Red Hat JBoss BRMS(Business Rules Management System)的一部分,它提供了一种强大的规则引擎,...