克隆OptaPlanner中的PlanningSolution

时间:2015-03-24 21:58:29

标签: optaplanner

我正在尝试用OptaPlanner解决时间表问题,但我面临的问题可能与克隆问题有关。为什么我的计划实体收集方法看起来像

    @PlanningEntityCollectionProperty
public List<Lesson> getLessons() {
    return getProject().getLessons();
}

我收到错误

  

java.lang.IllegalStateException:未按预期克隆solutionProperty(课程)。 FieldAccessingSolutionCloner无法识别该属性的字段,可能是因为其字段名称不同。

但是,当方法看起来像

    @PlanningEntityCollectionProperty
public List<Lesson> getLessons() {
    if (lessons == null) {
        lessons = getProject().getLessons();
    }
    return lessons;
}
一切都好。可能是什么原因?为什么我收到此错误?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

通用克隆程序(计划克隆最佳解决方案以便工作解决方案可以降级)不幸的是,目前无法处理第一段代码。

有2种解决方法:

  • 实施自定义规划克隆(这不简单,但在文档部分&#34; 4.3.7.6。克隆解决方案&#34;
  • 中对此进行了解释)
  • 为规划解决方案而不是Project(或重构Project实施解决方案)制作规范字段以供课程使用。

我不会用懒惰的初始化技巧来做,因为你可能无法保证在计划克隆发生之前至少调用过一次getter。