`
duanhengbin
  • 浏览: 384889 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Drools planner探险

阅读更多

记得两年前,因为项目需要第一次接触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 User Guide.pdf

    Drools Planner是JBoss Drools团队开发的一个基于规则引擎的计划问题求解器。这个求解器被设计用来处理各种复杂的规划问题,比如资源分配、任务调度、路线规划、排班等。Drools Planner被广泛应用于许多领域,例如...

    drools drools drools drools drools

    drools 是一个强大的规则引擎和业务规则管理系统,用于在Java应用程序中实现复杂的业务逻辑。它基于规则推理,允许用户以声明式的方式定义规则,并在运行时执行这些规则。drools 提供了一个高效的决策自动化框架,...

    drools-5.1.1-docs文档

    Jbpm的Guvnor知识库操作文档 Drools Introduction Drools Fusion Drools Flow Drools Guvnor Drools Planner

    帮助文档有

    ### Drools Planner 知识点概述 #### 一、Drools Planner 简介 - **Drools Planner** 是一个开源优化框架,用于解决复杂的规划问题。 - 它基于 **Drools** 规则引擎,由 JBoss Drools 团队维护。 - **规划问题** ...

    Drools入门-环境搭建,分析及示例.docx

    这个系统由多个组件组成,包括 Drools Expert、Drools Guvnor、jBPM 和 Drools Fusion,以及 Drools Planner。 1. **Drools Expert**:这是 Drools 的核心组件,它是一个规则引擎,负责执行规则。通过 Drools ...

    Drools Workbench7.8 lib.rar

    5. **Drools Planner**:是一个优化问题求解框架,可用于解决如车辆调度、任务分配等组合优化问题。 6. **Drools Expert**:专为领域特定语言(DSL)设计,使得非技术人员也能编写规则。 7. **Maven Integration**...

    drools7.25中文文档+drools技术指南.zip

    Drools是一款强大的业务规则管理系统(BRMS),它基于Java平台,主要用于实现复杂业务规则的管理和执行。Drools7.25是该系统的一个重要版本,提供了许多新特性和性能改进,使得开发者能够更高效地处理和执行业务规则...

    Drools

    Drools是一款强大的Java规则引擎,它为业务规则管理提供了高效、灵活且可扩展的解决方案。作为基于模型的决策自动化工具,Drools允许开发者将复杂的业务逻辑编码为一系列易于理解和维护的规则,这些规则可以独立于...

    规则引擎Drools.NET移植版

    **规则引擎Drools.NET移植版** Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行...

    Drools6.5 部署Drools Workbench和Kie Server笔记

    在本文中,我们将深入探讨如何部署Drools Workbench和Kie Server,这两个组件是Drools6.5——一个强大的规则引擎平台的关键部分。Drools Workbench提供了一个直观的用户界面,用于创建、测试和管理业务规则,而Kie ...

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...

    droolsdroolsdrools

    《 Drools 深度探索:实例代码解析与实践指南》 Drools,作为一款强大的规则引擎,广泛应用于业务逻辑复杂、决策流程多变的IT系统中。它基于Java平台,采用领域特定语言(DSL)来编写业务规则,使得业务人员也能...

    Drools workbench文件及DEMO项目代码

    Drools工作台(Drools Workbench)是一款基于规则引擎Drools的集成开发环境,主要用于创建、测试和管理业务规则。它提供了一个图形化的用户界面,使得业务分析师和开发人员可以方便地进行规则的编写和管理。在这个...

    drools5.1_开发中文文档

    在介绍部分,作者Mark Proctor强调了Drools 5.0的重大突破,将其分为五个独立的模块:Guvnor(BRMS/BPMS)、Expert(Rules)、Fusion(CEP)、Flow(Process/Workflow)和Planner。Guvnor作为一个基于Web的管理系统...

    5.6drools基础包

    这个"5.6drools基础包"包含了Drools的核心组件——drools-distribution-5.6.0.Final.zip和Drools的开发工具集——droolsjbpm-tools-distribution-5.6.0.Final.zip。尽管由于文件大小限制,可能缺少了一些额外的包,...

    Drools7 + Springboot2 动态更新规则

    在本文中,我们将深入探讨如何将Drools 7与Spring Boot 2集成,实现动态更新规则的功能。Drools是一款强大的业务规则管理系统,而Spring Boot是Java领域广泛使用的微服务开发框架。通过结合这两者,我们可以构建一个...

    springboot+drools动态模板引擎

    SpringBoot和Drools的整合应用为业务规则的管理和执行提供了强大的灵活性。SpringBoot作为一个轻量级的Java开发框架,简化了Spring应用的初始化和配置,使得开发过程更加高效。而Drools则是一个强大的规则引擎,它...

    drools动态生成规则文件

    drools动态生成规则文件是基于Java的业务规则管理系统,它允许开发者在运行时创建、修改和执行业务规则。 Drools是Red Hat JBoss BRMS(Business Rules Management System)的一部分,它提供了一种强大的规则引擎,...

Global site tag (gtag.js) - Google Analytics