繁体   English   中英

我如何才能避免在 Optaplanner 中反复打破相同硬约束的局部最优分数?

[英]How can I escape local optima score that repeatedly breaks the same hard constraint in Optaplanner?

我正在使用 Optaplanner 8.31.0 解决时间表规划问题。 这是建立在 Spring Boot School Timetabling Quickstart 示例之上的。 定义了 6 个硬约束,没有软约束。 在基准测试期间,我在已解决的数据集上可以获得的最佳分数是 -8hard/0soft。 我正在尝试达到 0hard/0soft。 查看来自基准测试程序的“约束匹配总最佳分数”图表,它总是报告在最终分数中被打破的相同约束。 每次,它都会报告 8 个 Teacher Conflict 约束已被打破。 提到的特定约束是示例中包含的约束之一:

`

Constraint teacherConflict(ConstraintFactory constraintFactory) {
  // A teacher can teach at most one lesson at the same time.
  return constraintFactory
      .forEachUniquePair(Lesson.class,
          Joiners.equal(Lesson::getTimeslot),
          Joiners.equal(Lesson::getTeacher))
      .penalize(HardSoftScore.ONE_HARD)
      .asConstraint("Teacher conflict");
}

`

我已经用所有本地搜索算法尝试了 FIRST_FIT、FIRST_FIT_DECREASING 和 ALLOCATE_ENTITY_FROM_QUEUE 构造启发式算法。 最好的构造启发式方法似乎是 FIRST_FIT_DECREASING 和 ALLOCATE_ENTITY_FROM_QUEUE 以及 STEP_COUNTING_HILL_CLIMBING 本地搜索。 这些组合总是导致 -8 的硬分数,而其他组合和算法给出更差的分数。 我尝试使用各种移动选择器向求解器添加另一个阶段,以尝试突破它似乎陷入的局部最优状态。但是,我似乎找不到移动选择器和本地搜索算法的任何组合来改进分数。

我发现了一些与打破局部最优有关的问题,比如这个建议是检查分数陷阱; 介绍各种动作; 并实施一种称为迭代本地搜索的方法,您可以借此破坏部分解决方案,然后随机重新创建它。

由于上面报告的硬约束来自提供的学校时间表示例,我认为我的问题不是分数陷阱。 但是我可能是错的。 上述约束是否有可能落入分数陷阱?

除了mimic selectionnearby selection之外,我已经尝试过各种移动选择器。 这些移动类型在这种情况下会有帮助吗?

最后,任何人都可以建议如何实现迭代局部搜索的想法,您可以在其中销毁部分解决方案并重新创建它吗? 也许这有助于将事物混合到足以打破局部最优值的程度?

任何帮助深表感谢。

对于单个 StackOverflow 问题,这是很多问题。 下次,请把它们分开。

写。 分数陷阱——不包括任何软约束就是分数陷阱。 原始示例具有大量软约束,允许求解器更好地区分具有相同硬分的不同解决方案。 (求解器还应该怎么做?)

(更准确地说:分数是硬的还是软的并不重要。重要的是如果两个解决方案不同,它们的分数也不同。这并不总是可能的,但每次约束都做不到因此,引入了分数陷阱。)

写。 附近的选择——我看不出这对这里有什么帮助; 这主要用于车辆路线规划,其中“邻域”的概念更有意义。 也就是说,您可能想尝试启用支柱交换和支柱更改移动,也许这会有所帮助。 不过,避免得分陷阱是更好的选择。

写。 迭代本地搜索 - 我不确定为什么文档甚至提到了这一点。 实施这将是 OptaPlanner 核心的一项重大开发工作,我们尚未进行。 也就是说,我完全同意,这可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM