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

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

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


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


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


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

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

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


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

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

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

目录
相关文章
|
6月前
|
设计模式 前端开发 Java
KnowStreaming系列教程第二篇——项目整体架构分析
KnowStreaming系列教程第二篇——项目整体架构分析
84 0
|
5月前
|
算法 安全 Java
技术经验分享:JavaSecurity:Java加密框架(JCA)简要说明
技术经验分享:JavaSecurity:Java加密框架(JCA)简要说明
|
6月前
|
存储 人工智能 搜索推荐
【LangChain系列】第六篇:内存管理简介及实践
【5月更文挑战第20天】【LangChain系列】第六篇:内存管理简介及实践
193 0
【LangChain系列】第六篇:内存管理简介及实践
|
6月前
第一章:LINGO 快速入门案例:生产计划问题
第一章:LINGO 快速入门案例:生产计划问题
154 0
|
机器学习/深度学习 人工智能 算法
这篇科普让你Get所有大模型的基础核心知识点
本文介绍了AI大模型的概念和发展历程。AI大模型是指具有1亿以上参数的机器学习模型,通过在大规模数据集上进行预训练,可以直接支撑各类应用。大模型的发展经历了从萌芽期到AI1.0时期,再到AI2.0时期的飞跃,目前最新发布的大模型参数已经达到了千亿甚至万亿级别。国内外的公司都在积极研发和应用大模型,如OpenAI、Google、Facebook、Microsoft等。国内也有百度、阿里巴巴、万维、商汤科技等公司发布了自己的大模型产品。大模型的建造离不开算力资源、算法人才、数据积累等核心要素。此外,文章还列举了一些与大模型相关的专业名词,如算法、模型参数、训练数据、Token等。
关于OptaPlanner的使用(二)——运行案例
关于OptaPlanner的使用(二)——运行案例
216 0
|
C# 决策智能 Perl
运筹优化学习20:C#调用Cpex入门指南
运筹优化学习20:C#调用Cpex入门指南
运筹优化学习20:C#调用Cpex入门指南
|
程序员 编译器 C++
C++(入门、核心、提高三篇)总结及补充
C++(入门、核心、提高三篇)总结及补充
111 0
C++(入门、核心、提高三篇)总结及补充
|
算法 Java 调度
Optaplanner - 入门介绍
OptaPlanner背景   在上一篇里喷了不少水,这一篇准备放点干货;其实也没办法完全干,因为很多预备知道在交待一下。好了,说一下关于OptaPlanner的背景、应用兼容性及其原理。   这一篇先说一下OptaPlanner是何方神圣,再看看它适用于哪种平台(.NET能用吗?老旧系统能用吗?),再从原理上探究一下,它是如何帮我们把一个看上去几乎不可能实现的工作,努力做到比经验丰富的老师傅更好的。
1987 0
|
开发框架 JSON 移动开发
基于.NET平台常用的框架整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库。
1030 0
下一篇
无影云桌面