关于OptaPlanner的使用(一)——简介

简介: 关于OptaPlanner的使用(一)——简介

最近项目中有个要给司机排班的需求,自己写了一个可用的算法。看到网上介绍说有这个可以实现统筹规划的规则引擎OptaPlanner,学习一下,看能否满足需求进而可以替换掉自己写的算法。


可以用的地方就是需要一些排班,调度等方面的时候,当情况比较复杂,使用人力无法轻易得到一个相对最优的计划时,可以使用计算机的高处理速度,在当前的资源条件下,得到一个细致的执行命令,实现相对最优的资源配置。


先来说一下业务规则的种类:一种是硬规则,另一种是软规则。硬规则就是一些必定不能违反的规则,例如一个产品所使用的原料必然是指定范围内的,需要使用指定的机台进行生产,否则就不可能生产出来,或出来的必然是报废品。而有一些是软规则,就是一些规则老板们希望都不要违反,违反了会让他掉钱的,但客观事实出现了一些情况,没办法完全保证所有规则都 遵循,部分规则也只能放弃部分规则了,也就是两害相遇取其轻。


OptaPlanner所解决的问题几乎可以都被视为NPC问题,什么是NPC问题呢?

概括来说,就是一些没有办法使用确定性算法来得到结果的问题,而对于这类问题,又分为NP问题和NPC问题,但都只能通过遍历的办法才能找到。

NP问题:一种无法通过确定性算法直接获得解,但对获得的解是可验证的,比如只要求做出一个可行的生产计划,成本、效率什么的都不管,那么这就是一个NP问题。要做出这个计划,是没有直接的、确定的方法或算法来做的;更多的是靠计划人的经验、对实际情况的有限掌握、对未来情况的预判和感觉等。但是做出来的计划是可以验证的。也就是说这个生产计划是确定可以执行的,而不会出现缺少原材料等违反硬规则的情况, 所以做一个可行计划,可以被视作是NP问题。


NPC问题:则是那种不旦无法通过确定性算法获得解,对所得的解,也没有一个确定的办法去验证的问题。比如要求做一个所有情况下除了可行,还要成本最低、效率最高的生产计划。那么这个成本低效率高的情况是无法验证的,除非把所有的可能的生产计划都列出来,但有的时候一个计划的条件和情况会比较多比较复杂,哪怕是靠计算机,如果一个个去遍历的话,也要花很多时间。而OptaPlanner的进行的遍历是有条件有方法的,通过很多算法的组合(Tabu search算法,遗传算法,退火算法和爬山算法,禁忌搜索等),得到比一个个遍历效率更高的计划出来。

可以下载Optaplanner的例子和文档看一下。例子在examples文件夹的runExamples.bat。

执行后会出现下列界面,是各种情况下的排序案例。可以先点着看看。这一章先到这,下一章执行一个案例看看效果。

目录
打赏
0
0
0
0
2
分享
相关文章
月薪3W+ 多亏发现GitHub开源的百万星Java神技-中高级核心知识解析
一提到高薪职业,大多数人最先想到的就是程序员。前几天,阿嘴正好刷到一条关于“程序员薪资”的帖子,一位网友问:想听个实话,程序员真的很容易月薪三四万吗? 这条帖子快速吸引了许多人的关注,短短几日内评论量上涨到300+,程序员的薪资待遇真的有那么好吗?大家是怎么回答的?和阿嘴一起来看看吧!
Java开发手册——嵩山版(清幽现云山,虚静出内功)-4
Java开发手册——嵩山版(清幽现云山,虚静出内功)
1513 1
【潜意识Java】使用 Ruoyi 框架开发企业级应用,从零开始的实践指南和分析问题
本文介绍了基于Spring Boot的开源企业级框架Ruoyi,涵盖环境搭建、项目初始化及用户管理模块的创建。
274 4
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
【7月更文挑战第8天】这篇教程介绍了如何使用Logback将Java应用的日志输出到文件中。首先,通过创建`logback.xml`配置文件,设置`FileAppender`来指定日志文件路径和格式。然后,提供了一个`RollingFileAppender`的例子,用于每日生成新的日志文件并保留一定天数的历史记录。文中包含配置文件的XML代码示例,并展示了控制台输出和生成的日志文件内容。教程最后提到了一些可能遇到的问题及解决建议。
85 0
《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)
《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
【6月更文挑战第16天】本文介绍了TestNG中`@DataProvider`的两种使用方法。本文通过实例展示了TestNG如何利用`@DataProvider`结合方法名和`ITestContext`来灵活地为测试方法传递参数。
49 1
【JAVA进阶篇教学】第五篇:Java多线程编程
【JAVA进阶篇教学】第五篇:Java多线程编程
关于OptaPlanner的使用(二)——运行案例
关于OptaPlanner的使用(二)——运行案例
273 0
GitHub上超屌的Java进阶教程,Java核心技术及大公司架构案例汇总
汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识
C++从入门到精通(第三篇) :C++的基础和灵魂:类和对象(中篇)
如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。
136 0
C++从入门到精通(第三篇) :C++的基础和灵魂:类和对象(中篇)
Java开发手册——嵩山版(清幽现云山,虚静出内功)-1
Java开发手册——嵩山版(清幽现云山,虚静出内功)
197 0
Java开发手册——嵩山版(清幽现云山,虚静出内功)-1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等