当前位置: 首页 > 知识库问答 >
问题:

防止在链接规划中触发不必要的阴影变量更新

秦昂然
2023-03-14

我们已经将我们的车辆路径问题建模为一个链式规划问题,即取货和送货问题。最重要的是,我们有一个定制的移动实现,它从车队中解开一对收货-送货对,并将其插入其他地方。

我们已经实现了一个早期退出:如果在链更新期间没有更新特定的阴影变量,我们将跳过链的其余部分。然而,只有当我们偶然地首先处理来自第一个实体的链时,这才起作用。

我们如何确保每次移动只更新链一次,从第一个更改的实体开始?

共有1个答案

戚浩淼
2023-03-14

通过调试和迭代更改向score director宣布变量更改的顺序,我们设法摆脱了多余的链式更新。

TL;DR:似乎Optaplanner触发链更新的顺序是计划变量更新被宣布给得分指导者。

考虑一个插入移动,它将取货-送货对插入到现有的访问链中(应用Optaplanner示例中的术语):

v1 <- v2 <- v3 <- v4
// insert p between v1&v2, d between v2&v3. Result:
v1 <- p <- v2 <- d <- v3 <- v4
    null
  1. p(链中最早接触的实体)的计划变量更新需要在所有其他计划变量更新之前通知scoreDirector
  2. 一旦影子变量在整个过程中保持不变,迭代链更新就会停止

在我们的例子中,正确地实现这些步骤可以将更新链所花费的CPU时间减少50%以上。

 类似资料:
  • 在制定时间表时,你必须遵守法律(硬性要求),该法律规定,作为一名员工,你每七天只能工作一定的时间。它没有说日历周的原因是在创建时间表时为雇主提供一些回旋空间(通常是提前4-16周)。一旦设置了此计划期的开始日期,在您想要进行完整的重新规划之前,该日期无法更改,但您需要通知员工。所以它可以被视为一个变量,直到你接受了时间表,然后它就变成了一个常数。当然,这是每个员工的个人情况。该开始日期将由您的第一

  • 首先,对于我的分数计算,我使用Java EasyScoreCalculator接口,并使用Java API创建我的求解器(因为我在Java OSGI插件中从xml或drl文件加载配置/约束时遇到了问题) 我的问题: 我想解决的,一个多技术工人任务调度问题。 任务的开始日期和结束日期应在给定的日期范围内计划。 解决方案:我要优化所有工人的总体工作量(分钟)。 目前我确实有三个规划变量: null 在

  • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然

  • 我用增量java解决了optaPlanner的一个问题,其中有一个规划变量和一个规划实体,但是现在在我们的项目中有很多规划变量的需求,比如我们要找到最好的房间(容量,isAC等),汽车(totalSeatsLeft,isAC等),我们不知道有多少资源,因为我们每天都需要根据用户的需求增加更多的资源,比如会议室设施等,所以给我一些想法,这样我们就可以为optaPlanner做一个域。多谢了。

  • 我正在使用Optaplanner 7.38.0.Final 我实现了一个相对简单的模型,遇到了一些问题。 问题是,我想要不时地中断链以返回仓库,我认为没有必要创建另一个类来进行这种中断,并且在需要重新启动路由时,我包含了一个带有epoch second时间戳的规划变量(时间戳介于一个相对较小的范围之间,下面代码中的)。 Optaplanner能够使用给定的xml配置创建求解器,如果我在score

  • 问题内容: 在下面,我们有一个IIFE(像任何函数一样)创建本地作用域。在该范围内有一个功能。现在,由于浏览器中已经有一个具有该名称的全局函数,因此本地函数将使全局函数黯然失色-在IIFE中,任何对本地函数的调用都会调用本地函数,而不是全局函数。(仍可以使用引用全局函数。) 是否有 法律上的名称 (ECMAScript规范)或 事实上的 (通用的)名称?遮盖?超载? 问题答案: 正确的术语是[可变