首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OptaPlanner实用技术 - 批量规划和实时规划(1)

,发现该文仅从具体的技术细节上描述使用SolverManager及其相关接口实现在批量规划过程中的实时响应。...关于批量规划的实现,在OptaPlanner刚推出SolverManager可实现批量规划时,本人曾写过一篇简介文章:OptaPlanner 7.32.0.Final版本彩蛋 - SolverManager...以下用一个VRP示例讨论各个不同阶段出现新的访问节点,通过OptaPlanner的实时规划进行应对的情况。...当有一个数据集传入时,进行对该数据集进行规划运算,在此过程中,通过对bestSolutionChanged事件的侦听来获取规划结果。当进程符合结束条件时,引擎将会停止运算,回到待命过程。...无论是在运算过程还是待状态,当一个数据集有变更时,通过ProblemFactChanged接口(旧版本使用,新的版本将会整合到一个新的接口)接收变更,并触发引擎处理此变更。

1.5K30

设计Optaplanner下实时规划服务的失败经历

在本文我着重介绍一下,我在尝试使用OptaPlanner的Real-Time Planning功能时遇到的问题,最终确认问题出自OptaPlanner引擎自身, 并通过JIRA向OptaPlanner...平时我们使用OptaPlanner时,不外乎以下几个, 构建Problem对象 + 构建Solver对象-> 启动引擎 -> 执行规划 -> 结束规划 -> 获得方案-> 获取结果方案,如下图。   ...;当它满足规划结束条件时(例如找到符合条件的方案,或到达规划时限),会进入值守状态,不占用CPU资源。...这里提供一下最重要的三个代码块,对应的场景是,当一个新的任务(Task)需要被添加进引擎的Problem中参与规则时,应该如何添加,添加完成之后,如何获得规划的结果。...主线程向外提供Restful webservice,当有Web请求到达时,就启动一个线程用于执行OptaPlanner的ProblemFactChange对象中的doChange方法,对现有solution

1.2K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    OptaPlanner 7.32.0.Final版本彩蛋 - SolverManager之异步求解

    与此同时Geoffrey大神带领的KIE项目团队并没有闲下来,尽管在工业可用性、易用性和使用门槛方面,OptaPlanner相对传统的求解器已经做得相当出色;特别是在规划过程交互、和各种操作接口方面,更是目前最为容易使用的规划求解器...而在作为OptaPlanner直接使用者的我们而言,第7版的所有子版本中,目前本人认为最大最有意义的更新有2个。...部署成独立的服务除了有利于降低系统模块间低耦合外,另一个重要原因是有利于运算资源的扩展。当问题规划增大时,程序所需的CPU运算能力也会大副提升;独立存在的规划服务更有利于硬件资源的更新。...SolverManager 对一个问题进行求解时,与Solver对象的solve方法有以下区别: 异步执行,当solve方法被调用后,方法会马上返回,而不待引擎运行结果。...关于SolverManager接口的详细介绍见以下使用说明: https://docs.optaplanner.org/7.33.0.Final/optaplanner-docs/html_single

    85040

    OptaPlanner 7.32.0.Final版本彩蛋 - SolverManager之批量求解

    上一篇介绍了OptaPlanner 7.32.0.Final版本中的SolverManager接口可以实现异步求解功能。本篇将继续介绍SolverManager的另一大特性 - 批量求解。...至于原因,可以参考我前面关于OptaPlanner入门文章中关于NPC, NP-Hard问题规模的说明。 因此,在一些规模大、时间要求不高的场景下,我们可以让引擎在空余时间自动运算。...SolverManager批量规划特性 详细一下SolverManager接口,你应该会发现,与Solver对象的solve方法不同,使用SolverManager的sovle方法对一个问题进行求解时,...即当SolverManger启动求解运算时,会将parallelSolverCount设定的数量的问题载入运算空间并行求解。...因此,除非你对问题的复杂程度,CPU的核心和运算能力非常清晰,否则上述两个功能,还是设置为自动更好,引擎会根据计算资源运算时的工况,动态地自动确定并行求解的问题个数,及每个问题求解过程中应启动的线程个数

    81140

    人类的规划能力有多强大?

    让他们连接图上所有点,以找出最短连通路径,并回到原点。 参与者们笑了,他们说这不是一场小孩游戏吗?没错,除了每个点没有编号之外,你也不是在点上找米老鼠(也没有特定的连接要求)。...在纸上计算旅行距离是不现实的,因此,他们基于OptaPlanner中的TSP示例,来研究他们自己的访问方案(即连接方案),以便自动计算路线间的距离。...通过使用自动规划引擎,例如OptaPlanner, 我们可以在更短的时候内击败人类,可以处理更多的约束和更大的数据值(即处理更多城市的TSP问题)。...类似地,一个自动求解器(包括OptaPlanner)可以优化一个规划工作,但其前提是需要人们告诉它应该优化些什么东西。 在一个非凡的企业里,定义什么业务需要或想要优化,并非易事。...此外,人们还需保持对规划程的控制。 但我们自问一下,以下两个竞争者,谁能更有机会赢得最终知识测验? 地球上最聪明的人。 一个平均水平,但可以访问互联网和维基百科的毕业生。

    85140

    探究Optaplanner示例,初步认识规划引擎的运行步骤

    一、推荐使用Maven   在上一篇,我们已经从Optaplanner的官网下载了它的压缩包,它里面几乎包含了Optaplanner的所有东西,基本上有了这个包,我们离线都可以做一个应用Optaplanner...如果Optaplanner引擎有版本更新了,你又想使用的话,那只能重新下载、配置。所以,现在Optaplanner官网通常都是推荐通过Maven的方式来建议项目。...,并自动匹配版本了,当有Optaplanner有版本更新的时候,你所使用的包也可以更新为最新版本,而无需人工下载。...在一上篇里,我们已经下载了Optaplanner的发布包了,它里面包含了Optaplanner引擎的所有东西,包括可以直接使用的字节码程序,源代码,用户手册(包括所有API的Java Doc),所有示例程序和所有示例程序的源代码...eclipse会自动根据pom.xml中的依赖项更新依赖包,若没有自动更新,点一下文件菜单中的刷新菜单项 依赖项更新完成后,示例代码的原始包信息都会被应用,自动创建好包结构。

    2.3K30

    OptaPlanner - 把example运行起来

    经过上面篇长篇大论的理论之后,在开始讲解Optaplanner相关基本概念及用法之前,我们先把他们提供的示例运行起来,好先让大家看看它是如何工作的。...以下我们就先把这些示例运行起来,先看看整体的情况,下一往篇我们再把示例的源码导进Eclipse,拿一个简单经典的示例,讲解一下Optaplanner规划引擎工作时需要哪些要素,它是如何工作的。...我在使用Optaplanner做项目的时候,他们的讨论组上向他提过一些问题,他为人相当nice且有耐心,给我解答了不少问题。...先说明一下这个示例,这个示例是模拟在云端进行进程管理(或称进程调度,或称任务调度吧),也就是进程分配到不同的计算资源(也就是计算机)的方案,演示Optaplanner规划引擎是如何在保证每个进程都满足运行要求的情况下...ps:当多个Process被分配到同一个Computer时,它的CPU,内存和带宽资源占用是累加的,也就是说,当台Computer只有2G内存,若已经有一个内存需求是1G的Process被分配在它上面,

    1.6K50

    OptaPlanner - 从探究示例中的hello world 初步认识规划引擎的运行步骤

    一、推荐使用Maven   在上一篇,我们已经从Optaplanner的官网下载了它的压缩包,它里面几乎包含了Optaplanner的所有东西,基本上有了这个包,我们离线都可以做一个应用Optaplanner...如果Optaplanner引擎有版本更新了,你又想使用的话,那只能重新下载、配置。所以,现在Optaplanner官网通常都是推荐通过Maven的方式来建议项目。...,并自动匹配版本了,当有Optaplanner有版本更新的时候,你所使用的包也可以更新为最新版本,而无需人工下载。...在一上篇里,我们已经下载了Optaplanner的发布包了,它里面包含了Optaplanner引擎的所有东西,包括可以直接使用的字节码程序,源代码,用户手册(包括所有API的Java Doc),所有示例程序和所有示例程序的源代码...即恢复原来的包信息. ? eclipse会自动根据pom.xml中的依赖项更新依赖包,若没有自动更新,点一下文件菜单中的刷新菜单项 ?

    1.6K30

    OptaPlanner规划引擎的工作原理及简单示例(1)

    无论是使用正方向评分还是反方向评分(或称负方向评分),在OptaPlanner里都是可以实现的,只不过按我们日常的逻辑,在定义方案时,通常我们只会根据业务定义出一些规则,方案是需要守这些规则,当一个方案出现有违反规则时...因为我们的现实世界里,"好"是可能无限好的,当问题足够复杂,数据量足够大,即问题规模够大时,描述一个方案如何个好法,其实很难是一个定数。...所以,在OptaPlanner的世界里,常见的做法是,定义一些约束,并设定相应的惩罚分数标准(即将约束量化),用来描述这个方案的制约因素,当这个约束被打破时,就作出惩罚性记分,那么到最后,扣分越少的方案就越好...在评分机制中,当出现一个方案违反了某个硬约束时,就给这个方案扣除这个约束相应的分数;同样地,当该方案违反了一种软约束时,就对该方案扣除该软约束相应的分数。这两个分数是分开处理的。...对于硬约束,除了上述讲到,当出现有可能确实需要使用不可行方案作为执行计划的情况外,在OptaPlanner进行规则的过程中,其实也起到非常大作用的。

    1.9K00

    OptaPlanner规划引擎的工作原理及简单示例(2)

    本文将会假设我们需要对一个车间,需要制定生产计划.我们为生产计划员们设计一套智能的、自动的计划系统;并通过OptaPlanner把这个自动计划系统开发出来。...因此,这次我们只用一个简单的小程序即可以演绎一个自动计划系统,来呈现规划引擎OptaPlanner在自动计划上的魅力。...所以作为计划定制人员,如果这是一个计划的重要指标的话,在制定计划时,就需要考虑应该如何统计一个机台的成本。...这个在关于NPC或NP-Hard问题的文章中已有介绍,这里不再重复。 面对这类NP问题时,人类是如何解决的呢。...其实 OptaPlanner不需要对Java过份精通即可使用,因为它使用到的都是Java最基本的知道,但还是需要有基本的Java知识才行,希望大家找我研究讨论时,如果Java, Maven等方面仍接触较少

    3.9K11

    多工序、多机台(产线)环境下的排程要点

    在生产实践中,此类生产计划通常是对产品工序路线中,众多工序中的一个较重要的工序进行制定计划时使用。需要进行优化的主要是对资源的使用分配,例如各机之间实现负荷平衡等需求。...即按照一定的原则来对各个工序进行资源安排。例如:各种资源使用成本各不相同,在制定计划时,为了降低生产成本,应该在确保其它更高优先级的约束或硬性约束的前提下,尽量使用低成本的资源进行生产。...对于一个资源(例如机台)上的生产效率而言,如何可以实现更多的同工序连接生产,因为即使是使用同一资源,通常在该资源上,不同工序的生产任务之间的切换,会产生成本的,有可能是时间成本,也有可能是具体的货币成本...那么当同时对多个产品进行排产时,各个产品的工序路线形成的工序生产序列和资源分配方案,很容易就形成了胶着状态,甚至在多个资源之间会出现死锁状态。   ...而当个产品被分配到各个机台上进行生产作业时,因为生产路线上存在时间先后次序,会令到一个机台上多个任务需要按次序生产的时候,每个任务的作业时间段可能并不是紧密连接。

    2.4K92

    OptaPlanner笔记3

    由于此用例具有硬约束和软约束, 可以使用HardSoftScore类来表示分数: 不能打破硬约束。例如:一个房间最多可以同时上一节课。 不应打破软约束。例如:教师更喜欢在相同的房间里教学。...无论每种约束的权重如何,硬约束的权重总是超过软约束。...,这不能很好地扩展,因为它是非增量的:每次将一节课分配到不同的时间段或房间时,都需要重新评估所有课程以计算新分数。...timeslotList字段具有**@ValueRangeProvider**注解,通过匹配规划变量的类型与值域提供者的类型,可以连接对应的@PlanningVariable。 2.2.7.2....问题事实和规划实体属性 此外,OptaPlanner 还需要知道它可以更改哪些 Lesson 实例以及如何通过 TimeTableConstraintProvider 获取用于计算得分的 Timeslot

    41421

    普通企业的规划类项目中,OptaPlanner更适合作为APS的规划优化引擎

    因为这些有运筹学或应用数学背景的高级人才,在学习、研究阶段已对这些求解器有一定应用基础,当他们毕业后从事相关领域工作时,这些他们熟悉的商用软件也相应地更有优势,更容易占领市场。...其二,必须具备丰富的分析与抽象经验,掌握各种业务场景下的规则与要求,知道各种业务案例与要求,应该如何归纳成APS系统中的业务实体,规则约束和优化目标。...那么从业务上识别出哪些是硬性约束,哪些是优化目标后,应该如何通过约束实现不同的规则与优化目标,则需要对OptaPlanner中的评分体系有一定的理解,否则会较容易超出OptaPlanner的一些设计限制...无论如何,虽然OptaPlanner不需要我们把业务模型转化成数学模型,但能准确把业务模型中的各个实体、约束和优化目标转化成Java实体,约束表达脚本,还是需要一定的学习成本的。...毕竟使用OptaPlanner我们面对的都是一些软件设计的问题,这对于有丰富经验的软件开发人员,并不是不可逾越的鸿沟。

    2.6K00

    Java 近期新闻:Spring 项目更新、值对象(预览)JEP 以及 Quarkus 2.7.2

    新功能包括:针对 Couchbase 和 Elasticsearch 的测试注解;利用新的@AutoConfiguration注解增强自动配置的注册和排序;以及支持 OkHttp 4.9.3。...这样做的动机是让开发人员在使用 Spring Data 的时候,能够选择自己喜欢的类型。...鼓励开发者阅读这篇关于如何在不使用WebSecurityConfigurerAdapter的情况下使用 Spring Security 的博客文章,更多细节也可以在发布说明中找到。...增强之处包括:简化了 JdbcStepExecutionDao 类中的 GET_LAST_STEP_EXECUTION 字段,以使用等价连接(equi-join)而不是带有子 select 的笛卡尔连接...Quarkus Quarkus 2.7.2.Final 是第二个维护版本,它提供了对 Kogito 1.17.0.Final 和 OptaPlanner 8.17.0.Final 的依赖升级。

    65330

    体现公平性公式在规划问题中的应用

    本文中,我们使用以下案例:有15个烦人的任务,需要分配给5个员工,每个任务需时1天来完成,且每个任务都有不同的人员技能要求。 何谓公平?...因此,这种方式完全抛弃了员工之间的公平性。如果只是针对一个员工衡量其公平性还可行,但当对数据众多的员工一起衡量时就不行了。...从上表可以看,可以完美地对比各方案的公平性!那么在Optaplanner里要实现这种衡量方式,我们需要针对每个员工定一个分数级别,Optaplanner会按分数级别进行排序,来找最佳方案。...公平性违反比重,不能随着违反量的增大而逞指数式增长 另一方面,当数据量增大时,公平性的违反比重不能对其它的约束起到矮化作用。如果使用方差作为衡量方式则会出现此情况,见下表。...其它需要考虑非均待员工的因素(例如残疾或人才保留对象),也可以使用类似的方法,或使用一些单独的约束进行区分,具体办法需视现实的业务需求而定。

    71030

    人工智能包括约束求解器吗?

    因为英语及中文表达习惯的差异,以该博文发表示Optaplanner官网,其描述的问题及概念具有一定的上下文关联性;因此,为了对还不太熟悉Optaplanner的同学更容易理解,令文章更符合中文母语读者的阅读习惯...为了获得资本青睐,一些研究项目也被重新塑造,贴上人工智能技术的名头。那么,约束求解器能否也使用人工智能的标签呢?...当有15%的行驶时间节省量时,为什么要满足于1%的节省量呢(译者注:在车辆路线规划案例中,通过约束求解算法能得到15%的行驶时间节省,为什么还要退而求其次,满足于神经网络算法得到的1%节省量呢)   相反...也许是因为这些问题都不存在误差容限,但人工智能却存在,例如:你给出一张哈仕奇的图片,有人把它识别为狼;当你给出一个TSP问题,需要画出最短旅行路线时,人们会给出不同质量的确定性的结果集。   ...或者那些计算和排序算法是可以被人类理解得到的,这些算法并不是一个黑盒,它可以相当容易地知道,计算机是如何把输入数据,一个指令接着一个指令地转化为输出结果。

    1.2K30

    MethodHandle结合LambdaMetafactory-使用方法及性能测试

    # 背景 在进行实例的动态推断和构建时,我们会经常使用到反射这一技巧,然而在某些场景中反射的效率显得有些力不从心。从JDK7开始,MethodHandle被推出,用于解决反射的效率问题。...一个简单的使用方法为 step1: 创建mh lookup、根据访问权限任选其一即可 //仅访问public方法 MethodHandles.Lookup publicLookup = MethodHandles.publicLookup...访问普通方法、访问静态方法、访问构造函数、访问私有方法、访问公有成员等。...提示 OptaPlanner是一个开源的轻量级、可嵌入的约束满足引擎,可求解规划问题,100%由Java编写,可以在任何JVM上运行,也可以在Maven中央存储库中使用、支持多种平台下载。...-动态根据class带入参创建实例 该场景的主要动机造异常轮子Assert时,动态根据异常消息message和异常class构建出异常实例,从而达到抛出异常的目的,而取代通过new的方式抛出异常 改造前

    2K40

    Excel与Google Sheets中实现线性规划求解

    与此同时,除了继续使用Optaplanner来做我们的规划类项目外,还花点时间去研究了一下Google OR-Tools开源规划引擎,这是Google旗下的一个开源求解器,接下来我会专门写一些关于Google....DLL应该就是这个求解器的核心程序动态连接库。...2.根据数学模型,定义运算关系:本模型中,我们的目标是求得当z最大时变量x,y的值(x,y在运筹学的规划模型中被称为 决策变量;在Optaplanner中,它们被称作规划变量)。...由结果可知,完成规划求解后,得到的决策变量值:x=20, y=60, 目标函数z的值为1900,即表示:当产品A生产20个(B6单元格),产品B生产60(C6单元格)个时,其利润达到最大值1900(D7...在创建好的文件中,可以将文件命名为“LP_Test”文件即会自动保存到你的Google帐号。如下图。 2.

    3.8K21

    浅尝一个排程引擎Optaplanner - 前序

    反正无论是当管理还是做技术,我还是觉得手里拿点实在的东西心里才踏实。...当完成了MPS要分解成调试指令甚至是操作指令时,这个过程就不可能只靠人类来实现,因为里面涉及的计算和逻辑判断太多,太复杂,远超过人类可以处理的范围。...硬规则就是一些不能违反的规则,例如一个产品所使用的原料必然是指定范围内的,需要使用指定的机台进行生产,否则就不可能生产出来,或出来的必然是报废品。...可是过两天老板会发现,其实有更好的方案可以更少地使用天价机台,甚至还有一个无需使用天价机台的方案,他会去把计划员、调度员们捉来杀掉拜旗吗?(只有码农才有这个待遇吗?)....我们的主角Optaplanner就是这么一个集成了这么多数据工具的一套开源软件。一下篇我们就开始对Optaplanner进行学习。惊不惊喜?意不意外?

    1.6K01

    实战:构建一个车险业务的规则引擎(上篇)

    上图中: Business Resource Planner:基于上游OptaPlanner产品的企业资源计划和优化引擎。...遵循DevOps原则,开发人员参与持续集成和交付任务,使用JBoss BPM Suite自动化构建,测试和发布业务应用程序。...此体系结构中的runtime environment建在带有Intelligent Process Server的JBoss EAP之上。...三、配置外部数据源 DASBu建器支持外部数据源的配置。在本节中,我们将探究允许策略引用仪表板访问其外部数据的配置。 ? 选择data source: ?...数据源提供了对不同外部数据提供者的连接,这些外部提供者通常在JBOSS EAP的数据源中配置,并在本节中与JNDI一起使用。 编辑pquoteReportingDs ? ?

    2.3K30
    领券