Java OptaPlanner任务调度中的逃逸局部最优解
我基本上(有一定的持续时间)是有弹性的,你可以说任务之间有“弹性”链接,例如任务B必须在任务B之后5到10分钟之间。任务也不能重叠,因为一个人每时每刻只能做一件事 还有一些我以后可能需要加入的附加功能,我在这里包括这些功能,以防它们在某个时候相关:Java OptaPlanner任务调度中的逃逸局部最优解,java,optaplanner,Java,Optaplanner,我基本上(有一定的持续时间)是有弹性的,你可以说任务之间有“弹性”链接,例如任务B必须在任务B之后5到10分钟之间。任务也不能重叠,因为一个人每时每刻只能做一件事 还有一些我以后可能需要加入的附加功能,我在这里包括这些功能,以防它们在某个时候相关: 任务持续时间在一定范围内可能会变得灵活 某些任务可能会锁定到某个时间点 您可以添加新人员,以便同时完成两项任务 我的问题是我的方法很容易陷入局部最优 我目前所做的是优化任务的开始时间,有一个硬约束,即有多少链接超出范围,以及它们是否重叠。这似乎工
- 任务持续时间在一定范围内可能会变得灵活
- 某些任务可能会锁定到某个时间点
- 您可以添加新人员,以便同时完成两项任务
我也看过,但虽然它帮助我理解了问题,但它并没有真正帮助解决问题。我想你也看过项目作业调度示例?在学术论文中,有一种替代方法对PJ很有效,我还没有在OptaPlanner中实现:给定一个有序的作业列表(=任务),使用确定性构造启发式来贪婪地放置它们。然后使用本地搜索对该列表重新排序。这种方法有时会丢弃解决方案,但对于MISTA2013(项目作业调度背后的竞争),它有着很好的结果。但实际上(除非你是元启发式专家),我建议只添加课程粒度的移动,并使用基准测试器来查看哪些移动值得添加。等待OptaPlanner支持上述开箱即用的方法。谢谢您的回复。我已经读了好几遍PJS示例,但仍然没有真正理解到底发生了什么(因此肯定也不是元启发式专家),我认为这可能是因为我现在忽略了很多东西(主要是资源)虽然我的灵活链接不存在。是否还有创建自定义MoveListFactory的示例?我还没有创建一个新的CompositeMove,因为我不知道如何创建一个新的ChangeMove。
variableDescriptor
和toPlanningValue
应该是什么?或者,即使我只需要一组变动动作,我也必须创建一个新的动作吗?