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

OptaPlanner解决方案继承泛型会导致错误

邵繁
2023-03-14

我有一个抽象的泛型“Foo”解决方案类,我的特定实现继承了它。此类是泛型的,允许实现类定义其特定的规划实体,该实体扩展了“Bar”

这会扼杀 optaplanner,这会吐出如下错误:

solutionProperty(列表)未按预期克隆。FieldAccessingSolutionCloner无法识别该属性的字段,可能是因为其字段名不同。

我已经尝试用特定的实现类替换“EntityType ”,看起来一切正常。然而,我试图提取通用功能以减少维护,这使我无法提取所有的共性。

我还尝试过梳理OptaPlanner文档。我找不到这样的例子。

@PlanningSolution
public abstract class Foo <EntityType extends Bar> implements Solution<HardMediumSoftScore>
{
    protected HardMediumSoftScore score;
    protected ArrayList<EntityType> list = new ArrayList<>();

    @PlanningEntityCollectionProperty
    public ArrayList<EntityType> getList()
    {
        return this.list;
    }

    @Override
    public HardMediumSoftScore getScore()
    {
        return this.score;
    }

    public void setScore(HardMediumSoftScore score)
    {
        this.score = score;
    }
}

我希望能够继承而不抛出optaplanner错误。

是否设置了 optaplanner 来处理泛型/继承?我使用的是 6.5,是否有更新的版本可以更好地支持此功能?

共有1个答案

洪承天
2023-03-14

在该字段上添加@DeepPlanningClone批注。

此外,从< code >实现解决方案迁移到< code>@PlanningSolution,请参见optaplanner.org上的升级方案。

 类似资料:
  • Lombok@builder不适用于继承用例: 手动创建条形图的构造函数。 将生成器批注放在该构造函数上。 有更好的变通办法吗?

  • 和这个问题相关的课程: 现在,这似乎已被编译器接受。不幸的是,我不知道/理解如何创建的新实例,。 当然,这确实不起作用:

  • 我正在尝试解决类似于员工名册的问题。我面临的问题是,每次我运行求解器时,它都会生成不同的任务。这使得更难调试为什么选择特定案例而不是另一个案例。为什么会这样? 附注:我的任务有许多硬性限制,可能无法全部满足(大多数情况下,我仍然看到一些负面的硬性评分)。所以我的终止策略是基于< code > unimprovedSecondsSpentLimit 。会不会是这个原因?

  • 我有一个典型的问题,什么是更好的,我认为答案总是视情况而定,但我还是想澄清一下。所以有两种方法: 逻辑是: 我知道由于类型擦除,方法签名存在冲突,所以我的问题不是“为什么我不能同时拥有这两个方法?”,而是“你会选择哪种方法?”。

  • 我有以下CVRPTW问题,我正在尝试使用OptaPlanner找到一个好的解决方案。时间为hh: mm: ss格式。 我的DRL文件是这样的。此外,我还定义了一个与准备时间之前到达相关的硬约束。我的解算器配置如下,但终止标记不同: 这是问题陈述: 我有2辆车,容量为10件物品和1个仓库。 这是解决方案(客户按车辆分组,按到达时间排序): (D=需求,Ar.T=到达时间,上一个D=与上一个位置的距离