问题标签 [drools-planner]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1026 浏览

drools - 流口水规则中的两个变量的最小值

我想找出流口水规则的 LHS(左侧)中两个变量的最小值。例如:

那么如何找出最小值,是个问题。谢谢。

0 投票
1 回答
131 浏览

java - Drools 规划器构造启发式 java.lang.ClassCastException

我尝试使用Drools Planner 5.4.Final Construction Heuristic Type BEST_FIT 初始化解决方案。

在运行时评估期间发生以下错误

有人有任何提示吗?

谢谢

这是堆栈跟踪

0 投票
1 回答
860 浏览

java - OptaPlanner CVRPTW - 持续交付

我是 OptaPlanner 的新手,我正在尝试在我的项目中对其进行配置以解决 CVRPTW 问题。我当前的配置与您在项目源代码中可以找到的示例非常相似,但我的要求不同。我的应用程序收到持续交付请求,其中:

  • 平均服务时间为 5 分钟
  • DueTime - ReadyTime = 10 分钟
  • 地点之间的平均距离(时间)约为 2.5 分钟
  • 只有1个仓库

我的想法是每次收到新请求时都重新运行求解算法。我有必要了解该请求是否可行,或者是否需要及时向前或向后移动。如果您考虑以下问题陈述(位置省略,但与仓库位置相当等距):

考虑到有 2 辆车可用,容量均为 10 辆,我得到以下解决方案(每辆车的时间表):

其中 D 是 Demand,Ar.T 是 Arrival Time,Ap.T 是 Approaching Time(需要离开前一个位置才能准时到达所选位置的时间),Prev.D 是与前一个位置的距离(时间) Next.D 是距以下位置的距离(时间)。

可以看到,客户 4 收货太早了(到货时间是 12:33:56,而准备时间是 13:25:00)。我理解规则arrivalBeforeReadyTime是一个额外的软约束,但我希望计划者建议我使用预留的交付方式向客户4 交付。将规则arrivalBeforeReadyTime设置为额外的硬约束,大多数时候我得到以下异常:

我有两个问题:

  1. 当我得到上述异常时,我是否必须将其视为“未解决的问题”?还是我必须调整我的配置?这是我不应该得到的东西吗?
  2. 我应该如何管理持续交付场景?我是否必须定义不同的大时间窗口来独立解决?但是如何定义这些窗口的边界呢?以及如何管理跨边界计划的交付?(这个解决方案对我来说似乎不正确)

编辑1:

将 OptaPlanner 版本从 6.0.0.CR3 更新到 6.0.0.CR4-Pre1 解决了 NullPointerException。文档对实时规划很清楚,我已经考虑在实时模式下运行我的规划器。但由于在上面的示例中结果并不好,我试图了解我还能做些什么来管理这种情况。我将规则arrivalBeforeReadyTime从软约束切换到硬约束,现在我没有得到NullPointerException,时间安排似乎管理得当,结果如下(例如):

问题陈述:

解决方案

如您所见,第一次交付是不可行的,因为需求的总和超出了车辆的容量。我应该假设它是正确的吗?我的意思是,在这种情况下,一个好的解决方案是使用这两种车辆来管理客户 1、2、3。我使用与示例相同的配置,将 vehicleCapacity 作为硬约束。此外,客户 2 和 1 会在准备好时间之前提供服务,如果我对其使用硬约束也是如此。

0 投票
1 回答
837 浏览

drools - OptaPlanner CVRPTW - 容量问题的解决方案

我有以下 CVRPTW 问题,我正在尝试使用 OptaPlanner 找到一个好的解决方案。时间采用 hh:mm:ss 格式。

我的 DRL 文件是这样。此外,我还定义了相对于在准备时间之前到达的硬约束。我的求解器配置是这样,不同的是终止标签:

这是问题陈述:

我有 2 辆车,可容纳 10 件物品和 1 个仓库。

这是解决方案(客户按车辆分组并按到达时间排序):

(D = 需求,Ar.T = 到达时间,Prev.D = 到前一个位置的距离,Next.D 到下一个位置的距离)

如您所见,车辆 2 必须运输 6+4+5+2+3=20 件物品,这超出了容量。我不明白,如果配置中的容量存在严格限制,为什么求解器会建议我使用这个解决方案。

考虑到我的规则,这不是一个可接受的解决方案。我错过了什么吗?是否存在求解器不提供解决方案的情况?是否考虑“求解器失败”终止?

0 投票
1 回答
1094 浏览

java - OptaPlanner CVRPTW - 优化车辆行程的规划器配置

嗨 OptaPlanner 专家,

我是 OptaPlanner 的新手,我请你帮忙。

据我从这个帖子中了解到,在OptaPlanner的CVRPTW示例(版本CR4)中,实体Vehiclehere)代表车辆的行程(而不是车辆),我想问一下如何管理一个真实的情况,即车辆数量有限,不能重叠行程

在提到的线程中,建议是用 VehicleTrip 替换实体 Vehicle,并创建一个新的 Vehicle 实体。我想新的 Vehicle 有一个 VehicleTrip 对象的列表(因为车辆可以在一天内进行多次旅行 - 例如)。但是如何配置规划器以最小化每辆车的 VehicleTrip 数量?

应该如何修改示例?(我不关心 Swing 部分,只关心模型和规划器的配置 - listeners/DRL/XML)

编辑

我如上所述修改了模型并int getOverlappingTime()在类中创建了方法,该方法返回相同的不同s的VrpTimeWindowedVehicleRoutingSolution重叠时间的数量。然后我创建了以下规则:VehicleTripVehicle

该方法工作正常(经过测试),但分数没有改变(似乎没有触发规则)。请问有谁可以帮助我吗?

0 投票
2 回答
916 浏览

drools-planner - 在 OptaPlanner 中实现自定义元启发式

截至目前,Opta Planner 规划器提供以下支持:

  1. 禁忌搜索。
  2. 模拟退火。

但是,如果我需要使用 Opta Planner 实现任何其他算法,例如遗传算法,那么可以在哪里以及如何使用它。我有遗传算法的代码,但是我不知道如何将它与 Opta 规划器集成。我发现很少有可能的地方。

  1. 在自定义 Score 类中。
  2. 在自定义 Move 类中。
  3. 在自定义 MoveFactory 类中。
  4. 在 XML 配置文件中。

请指导我需要在哪里进行修改。

谢谢

0 投票
1 回答
1038 浏览

java - OptaPlanner 车辆路线和客户访问之间的关系

我正在使用 OptaPlanner 优化与提供的示例非常相似的车辆路线问题。

我面临以下挑战,并会欣赏一些想法。

一些对客户的访问与其他访问有关系,例如:

  • 一次访问必须与另一次访问同时开始。
  • 一次访问必须在另一次访问结束后 2 小时开始。
  • 一次访问必须分配给分配给另一次访问的同一车辆。

挑战是:如何在移动访问时允许移动访问而不导致分数降低?

每次访问可能在不同的机器上(分配给不同的车辆),因此所有提供的移动选择器很可能会提供仅改变一次访问的移动。由于依赖性,此类移动很可能导致较低的分数,并且永远不会被选中。

相同的开始场景:任何改变一次访问开始时间的动作都会导致较低的分数。相同的车辆场景:任何将一次访问更改为不同车辆的移动都会导致较低的分数。

目前我正在使用禁忌搜索,结果令人满意。迟到可能是答案。

谢谢。

0 投票
1 回答
499 浏览

java - Drools Planner 规则分析

我们正在使用 Drools Planner 5.4.0.Final。我们想要分析我们的 java 应用程序以了解我们是否可以提高性能。有没有办法描述需要评估规则的时间?我们使用了很多 eval(....) 并且我们的“每秒平均计算计数”接近 37。删除所有 eval(...) 我们的“每秒平均计算计数”保持不变。

我们已经对应用程序进行了概要分析,我们看到大部分时间都花在了 doMove ... afterVariableChanged(...) 中。

所以我们怀疑我们的一些规则效率低下,但我们不明白问题出在哪里。

谢谢!

0 投票
1 回答
286 浏览

drools-planner - 我如何在 optaplanner 上实现新算法?

对于我的硕士论文,我想实施 optaplanner “强化学习”并用示例中建模的问题测试我的算法,但我需要一个指南或任何帮助我理解方法的文档。你能帮助我吗?

0 投票
1 回答
729 浏览

drools-planner - OptaPlanner 构建阶段 - 有没有办法定义过滤器?

在本地搜索阶段,您可以为实体、值和移动配置过滤器。如果需要,您甚至可以提供自定义移动工厂。

但是,我找不到任何关于如何在构建阶段执行相同操作的文档。唯一的配置是启发式类型和觅食者:第 8 章。构建启发式

我想在过滤器中实现一些我非常严格的规则,但是,如果没有在构建阶段进行过滤的能力,我还必须将它们定义为评分规则以避免糟糕的构建。

有没有办法为施工阶段定义过滤器?