【发布时间】:2016-10-11 14:02:34
【问题描述】:
我一直在尝试实现一个影子变量,以便我的一个问题事实可以跟踪与它相关的规划实体,最终目标是简化/加速我的规则。
我正在查看optaplanner doc about shadow variables,尤其是 cloudBalancing 示例。在“正常”cloudBalancing 中,CloudComputer 类不是计划实体。但是在下面的示例中,它被注释为planningEntity。
我们是否理解“托管”影子变量的类应该是一个计划实体?我认为planningEntity 必须有一个planningVariable,但CloudComputer 没有。 如果答案是肯定的,我建议在文档中更明确地说明它。如果答案是否定的,那么这个例子就有错误(@PlanningEntity注解应该从CloudComputer中删除)。
以下示例来自文档:
对于非链式计划变量,双向关系必须是多对一关系。要映射两个计划变量之间的双向关系,请将主端(即真实端)注释为正常的计划变量:
@PlanningEntity
public class CloudProcess {
@PlanningVariable(...)
public CloudComputer getComputer() {
return computer;
}
public void setComputer(CloudComputer computer) {...}
}
还有:
@PlanningEntity
public class CloudComputer {
@InverseRelationShadowVariable(sourceVariableName = "computer")
public List<CloudProcess> getProcessList() {
return processList;
}
}
另外,即使在求解过程中克隆了CloudProcess,是否真的只需要这样才能使 processList 保持最新?
【问题讨论】:
-
您能否指出文档中存在混淆的地方,即规划实体也可以包含影子变量而不是
@PlanningVariable?我想解决这个问题。 -
@GeoffreyDeSmet 在 4.3.3(关于规划实体的部分)中声明:“每个规划实体类都有一个或多个规划变量。”此外,我认为我在有关影子变量的部分中没有看到任何提及计划实体的内容,因为它们应该在计划实体类中是非常关键的一点。我意识到这就是为什么我的代码只有在我尝试复制示例并注意到额外的注释时才工作的原因。
-
针对 7.0 文档修复
标签: java optaplanner