当前位置: 首页 > 知识库问答 >
问题:

在OptaPlanner中克隆PlanningSolution

吕衡
2023-03-14

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

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

我犯错了

但是,当方法看起来像

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

一切都还好。有什么理由呢?为什么我会出现这个错误?谢谢你的帮助。

共有1个答案

侯涵煦
2023-03-14

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

有两种解决方法:

  • 实现自定义规划克隆器(这并不简单,但在文档部分“4.3.7.6.克隆解决方案”中有说明。
  • 为规划解决方案而不是项目(或重构项目以实现解决方案)的课程设置规范字段。

我不会使用这种惰性初始化技巧,因为您可能无法保证getter在计划克隆发生之前至少被调用过一次。

 类似资料:
  • 问题内容: 在node.js中克隆对象的最佳方法是什么 例如,我想避免以下情况: 该对象很可能包含复杂的类型作为属性,因此简单的for(var1 in obj1)无法解决。我需要自己编写一个递归克隆吗,还是内置了一些我看不到的东西? 问题答案: 可能性1 简洁的深层副本: 可能性2(已弃用) 注意: 现在,Node.js文档中将该解决方案标记为不推荐使用: 从未打算在内部Node.js模块之外使用

  • 问题内容: 有没有一种方法可以克隆的实例而无需将其字符串化并重新解析结果? 浅表副本是可以接受的。 问题答案: 使用构造函数和方法。

  • 本文向大家介绍在MongoDB中克隆集合吗?,包括了在MongoDB中克隆集合吗?的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中克隆集合,可以使用方法。让我们首先用文档创建一个集合。 使用文档创建集合的查询如下- 在method的帮助下显示集合中的所有文档。查询如下- 以下是输出- 这是在MongoDB中进行克隆的查询- 让我们在MongoDB中检查克隆集合的文档。查询如下- 以下

  • 问题内容: 需要一个将克隆Oracle用户的sql查询。作为源,我拥有拥有所有必要特权的用户。我想知道是否可以创建相同的数据库,但在同一数据库中使用不同的用户名。 问题答案: 简要地(从这里开始) 然后,只需将用户名替换为您要创建的新用户名即可。

  • 主要内容:示例在某些情况下,您可能需要一个表的完整、精确副本,也即克隆表(复制表)。我们首先想到的是使用 CREATE TABLE 命令创建一张新表,然后使用 SELECT 命令从旧表中选取所有数据,并使用 INSERT 命令插入到新表中。但是这种做法可能达不到您的目的,因为副本必须包含相同的索引、约束、默认值等。 如果您使用 MySQL 数据库,可以借助 SHOW CREATE TABLE 命令,该命令用来展

  • 应用克隆 (用于已有服务,需要在另一个业务线下创建一个同样的服务,不需要重新创建) 服务/环境克隆(菜单栏:工具集->服务/环境克隆) 点击菜单栏,在项目列表中筛选您要克隆的项目,然后点击 克隆 ,弹框中选择您要克隆到哪个业务线。 选择目录空间,系统为在目标空间下生成该应用所需要的所有类型资源和Jenkins Job。