问题标签 [optaplanner]
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.
java - 在 OptaPlanner 任务调度中逃避局部最优
我基本上仍在尝试创建具有灵活的任务时间线(具有一定的持续时间),您可以说任务之间的“弹性”链接,例如任务 B 必须在任务 B 之后的 5 到 10 分钟之间。任务也可以t重叠,因为一个人每时每刻只能做一件事。
还有一些额外的功能我可能需要稍后合并,以防它们在某些时候相关或将相关:
- 任务持续时间可能在一定范围内变得灵活
- 某些任务可能会锁定到某个时间点
- 您可以添加新人,以便您可以同时完成两项任务
我的问题是我的方法很容易陷入局部最优。
我目前所做的是优化任务的开始时间,并有一个硬约束,即有多少链接超出范围以及它们是否重叠。这似乎运作良好,并且大多数情况下很快就找到了一个不会破坏任何硬约束的解决方案。我的附加软约束应该尽量减少整个过程的持续时间。例如,如果任务 B 和 C 之间的链接是 20-100 分钟,那么硬分不关心链接是 20 分钟还是 100 分钟。但是通常 20 比 100 好。但是在处理复杂的树状任务依赖关系时,最好使用 80 分钟的链接将其他任务放在该间隙中,以便稍后的三分之一任务可以更早开始。因此,仅仅最小化链接长度并不是一种可行的方法。但问题是,一旦链接在范围内,就没有动力将其移出该范围,以便以后找到更好的解决方案。我陷入了局部最优。
因此,我现在正在考虑如何解决这个问题。我一直在考虑的方法以及我希望获得反馈的地方是创建一个新的 CompositeMove,它可以移动两个链接的任务。这改善了情况,但不能很好地扩展,因为一旦三个或更多任务紧密联系在一起,我们就会陷入相同的情况。
我一直在考虑的另一件事是尝试实施一项需要一项任务、拉伸链接并将任务置于间隙中的动作。不过,我还没有真正考虑过这一点。
我也弄乱了不同的本地搜索方法,但这也没有真正帮助。但我认为他们无论如何也帮不上忙。
我还查看了OptaPlanner 车辆路线和客户访问之间的关系,但是虽然它帮助我理解了问题,但它并没有真正帮助解决问题。
groovy - 使用带有 groovy 的 Optaplanner 的 XStream 错误
我正在尝试将Drool's Cookbook第 8 章中的一个简单 Drools Planner 示例改编为 OptaPlanner 6.0.1.Final 使用 groovy(已经有一个带有 maven 的工作 java 版本),类和测试在一个 groovy 脚本中,并且在同一个文件夹是solverConfig.xml和solverRules.drl,应该如何配置XmlSolverFactory以避免:
我在用着
在脚本中使用此依赖项:
drools - 使用多个计划实体进行流口水评分
我正在尝试为 OptaPlanner 开发 Drools 分数,以最大限度地创建类似的配对运输运行。
计划实体是一个运行 - 其中 500 个:
- 运行ID
- amPmIndicator - 包含 AM 或 PM
- 地点
计划变量包含成对的运行可能性 - 其中 12,000 个:
- 运行 ID1
- 位置1
- 运行ID2
- 位置2
- amPm指标
较高的排名分数用于最大化使用 runID 的配对运行,并且该规则工作正常,因为它解析为特定的 runID。
我需要制定一个较低的排名规则,以最大化 AM 和 PM 中配对位置的平衡数量。因此,在 AM 中配对的两个位置应该在 PM 中的相同位置配对。
如何配置 Drools 分数来实现这一点?似乎需要对分配给两个计划实体的 AM 的计划变量进行计数,然后与与 AM 计划实体具有相同位置的类似 PM 计划变量的计数进行比较。
或者有更好的建模方法吗?
非常感谢任何帮助。
我相信我的问题更多是关于 DRL 语言功能以及如何执行聚合。这是我写的规则,但它只确保 PM 中只存在一对。
optaplanner - Optaplanner 输入文件
我正在尝试将 Optaplanner 用于我拥有的一个关于 VRP 问题的商业案例。由于我不是专业的程序员,我处理将信息输入到软件中的问题。示例中的文件是 .vrp 文件,因此我无法找到如何更改它们。我有 txt 格式的文件,但我找不到如何使用它们的方法。我希望有一种简单的方法可以将 txt 文件转换为 vrp。
非常感谢您提前。
迈克尔
optaplanner - optaplanner:修改车辆路线以不为客户提供服务
在车辆路线问题中,我想消除必须为每个客户服务的约束,但为服务的人增加奖励。
我想为每个客户 c_i 添加一个虚拟车辆 v_i,这样 v_i 只能为客户 c_i 服务,而当它发生时,这意味着没有为客户服务。因此,当有 N 个客户时,有 M 个真实车辆加上 N 个虚拟车辆。
我的疑问是:如何设置 Customer 类的 valueRangeProviderRefs 以避免车辆 v_i 为客户端 c_j 提供服务,也就是说,如果参考静态车辆列表,我可以让“vehicleRange”依赖于特定客户吗?
java - Optaplanner:同时规划实体和规划变量?
使用 Optaplanner,是否可以同时定义一个类作为计划实体和计划变量?
例子 :
drools - OptaPlanner 作为 jBPM 中的特定领域任务?
我正在尝试将 optaplanner 项目与 jbpm6 集成。我已将 optaplanner java 项目作为同步域特定节点。所有 java 类、solverconfig.xml 和 .drl 文件都已导出到 jboss-as-7.1.1.Final\standalone\deployments\jbpm-console.war\WEB-INF\lib\ 中的 JAR 文件。但是,当我执行该过程时,它说求解器配置(solverconfig.xml)不存在。我假设这是因为无法读取 JAR 中的 xml 文件。我已经读到有另一种方法可以将求解器配置创建为 java 文件(强烈不推荐)。
有没有其他方法可以解决这个问题?
drools - 从 drl 文件调用非静态方法?
使用 optapllaner,是否可以在分数计算 drl 文件中调用“Graph.getInstance().mdm()”方法?
我在某处读到我只能调用静态方法,但我不确定。
drools - Optaplanner:使用循环进行分数计算?
我正在处理任务调度问题。我想实施一个规则,以确保在任何时候,整个过程都不会使用更多可用资源。为此,我考虑过循环总时间过程的每一秒,并计算每秒使用的资源总和,如下所示:
"$sec" 表示要检查的秒数。
我如何使用流口水循环每一秒?
是否有任何等价物:
optaplanner - “addHardConstraintMatch”中“hardLevel”的目的是什么
对于我的问题,我使用 BendableScoreHolder 因为我需要 3 个硬约束和 2 个软约束。我想知道 addHardConstraintMatch 方法的第二个参数“hardlevel”的目的是什么。